Ë
    ÜÓ^jÜ¯  ã                   óV  — d Z ddlZddlZddlmZ ddlZddlmZ ddlm	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  ej4                  e«      Z ed¬«      e G d„ de«      «       «       Zd„ Zd„ Z G d„ dej@                  «      Z! G d„ dej@                  «      Z" G d„ dej@                  «      Z# G d„ dej@                  «      Z$ G d„ dej@                  «      Z% G d„ dej@                  «      Z& G d „ d!ej@                  «      Z' G d"„ d#ej@                  «      Z( G d$„ d%ej@                  «      Z) G d&„ d'ej@                  «      Z* G d(„ d)ej@                  «      Z+ G d*„ d+e«      Z, G d,„ d-ej@                  «      Z-e G d.„ d/e«      «       Z.e G d0„ d1e.«      «       Z/ G d2„ d3ej@                  «      Z0 G d4„ d5ej@                  «      Z1 G d6„ d7ej@                  «      Z2 G d8„ d9ej@                  «      Z3 G d:„ d;ej@                  «      Z4 ed<¬«       G d=„ d>e.«      «       Z5g d?¢Z6y)@z"PyTorch Swin2SR Transformer model.é    N)Ú	dataclass)Únné   )Úinitialization)ÚACT2FN)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚImageSuperResolutionOutput)ÚPreTrainedModel)ÚModelOutputÚauto_docstringÚloggingé   )ÚSwin2SRConfigzQ
    Swin2SR encoder's outputs, with potential hidden states and attentions.
    )Úcustom_introc                   ó’   — e Zd ZU dZej
                  dz  ed<   dZeej
                     dz  ed<   dZ	eej
                     dz  ed<   y)ÚSwin2SREncoderOutputNÚlast_hidden_stateÚhidden_statesÚ
attentions)
Ú__name__Ú
__module__Ú__qualname__r   ÚtorchÚFloatTensorÚ__annotations__r   Útupler   © ó    úw/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/swin2sr/modeling_swin2sr.pyr   r   #   sN   … ð 37Ð�u×(Ñ(¨4Ñ/Ó6Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ô6r   r   c                 óÄ   — | j                   \  }}}}| j                  |||z  |||z  ||«      } | j                  dd«      j                  «       j                  d|||«      }|S )z2
    Partitions the given input into windows.
    é   r   éÿÿÿÿ©ÚshapeÚviewÚ	transposeÚ
contiguous)Úinput_featureÚwindow_sizeÚ
batch_sizeÚheightÚwidthÚnum_channelsÚwindowss          r    Úwindow_partitionr0   0   st   € ð /<×.AÑ.AÑ+€J�˜˜|Ø!×&Ñ&Ø�F˜kÑ)¨;¸ÀÑ8LÈkÐ[gó€Mð ×%Ñ% a¨Ó+×6Ñ6Ó8×=Ñ=¸bÀ+È{Ð\hÓi€GØ€Nr   c                 óÀ   — | j                   d   }| j                  d||z  ||z  |||«      } | j                  dd«      j                  «       j                  d|||«      } | S )z?
    Merges windows to produce higher resolution features.
    r#   r"   r   r$   )r/   r*   r,   r-   r.   s        r    Úwindow_reverser2   =   sg   € ð —=‘= Ñ$€LØ�l‰l˜2˜v¨Ñ4°e¸{Ñ6JÈKÐYdÐfrÓs€GØ×Ñ  1Ó%×0Ñ0Ó2×7Ñ7¸¸FÀEÈ<ÓX€GØ€Nr   c                   óf   ‡ — e Zd ZdZˆ fd„Zdej                  dz  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   )ÚsuperÚ__init__ÚSwin2SRPatchEmbeddingsÚpatch_embeddingsÚnum_patchesÚuse_absolute_embeddingsr   Ú	Parameterr   ÚzerosÚ	embed_dimÚposition_embeddingsÚDropoutÚhidden_dropout_probÚdropoutr*   )ÚselfÚconfigr:   Ú	__class__s      €r    r7   zSwin2SREmbeddings.__init__L   s‹   ø€ Ü‰ÑÔä 6°vÓ >ˆÔØ×+Ñ+×7Ñ7ˆà×)Ò)Ü')§|¡|´E·K±KÀÀ;ÐQRÁ?ÐTZ×TdÑTdÓ4eÓ'fˆDÕ$à'+ˆDÔ$ä—z‘z &×"<Ñ"<Ó=ˆŒØ!×-Ñ-ˆÕr   Úpixel_valuesNÚreturnc                 óŠ   — | j                  |«      \  }}| j                  �|| j                  z   }| j                  |«      }||fS ©N)r9   r?   rB   )rC   rF   Ú
embeddingsÚoutput_dimensionss       r    ÚforwardzSwin2SREmbeddings.forwardZ   sN   € Ø(,×(=Ñ(=¸lÓ(KÑ%ˆ
Ð%à×#Ñ#Ð/Ø# d×&>Ñ&>Ñ>ˆJà—\‘\ *Ó-ˆ
àÐ,Ð,Ð,r   )r   r   r   Ú__doc__r7   r   r   r   ÚTensorrL   Ú__classcell__©rE   s   @r    r4   r4   G   s4   ø„ ñô.ð- E×$5Ñ$5¸Ñ$<ð -ÀÀuÇ|Á|ÑAT÷ -r   r4   c                   ón   ‡ — e Zd Zdˆ fd„	Zdej
                  dz  deej                  ee   f   fd„Z	ˆ xZ
S )r8   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)r6   r7   r>   Ú
image_sizeÚ
patch_sizeÚ
isinstanceÚcollectionsÚabcÚIterableÚpatches_resolutionr:   r   ÚConv2dÚ
projectionÚ	LayerNormÚ	layernorm)rC   rD   Únormalize_patchesr.   rU   rV   r[   rE   s          €r    r7   zSwin2SRPatchEmbeddings.__init__f   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   rJ   NrG   c                 óÒ   — | j                  |«      }|j                  \  }}}}||f}|j                  d«      j                  dd«      }| j                  �| j	                  |«      }||fS )Nr"   r   )r]   r%   Úflattenr'   r_   )rC   rJ   Ú_r,   r-   rK   s         r    rL   zSwin2SRPatchEmbeddings.forwardt   so   € Ø—_‘_ ZÓ0ˆ
Ø(×.Ñ.Ñˆˆ1ˆf�eØ# U˜OÐØ×'Ñ'¨Ó*×4Ñ4°Q¸Ó:ˆ
à�>‰>Ð%ØŸ™¨
Ó3ˆJàÐ,Ð,Ð,r   )T)r   r   r   r7   r   r   r   rN   ÚintrL   rO   rP   s   @r    r8   r8   e   s<   ø„ õWð	- %×"3Ñ"3°dÑ":ð 	-¸uÀUÇ\Á\ÐSXÐY\ÑS]ÐE]Ñ?^÷ 	-r   r8   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚSwin2SRPatchUnEmbeddingszImage to Patch Unembeddingc                 óD   •— t         ‰| �  «        |j                  | _        y rI   )r6   r7   r>   )rC   rD   rE   s     €r    r7   z!Swin2SRPatchUnEmbeddings.__init__ƒ   s   ø€ Ü‰ÑÔà×)Ñ)ˆ�r   c                 óŽ   — |j                   \  }}}|j                  dd«      j                  || j                  |d   |d   «      }|S )Nr   r"   r   )r%   r'   r&   r>   )rC   rJ   Úx_sizer+   Úheight_widthr.   s         r    rL   z Swin2SRPatchUnEmbeddings.forwardˆ   sO   € Ø1;×1AÑ1AÑ.ˆ
�L ,Ø×)Ñ)¨!¨QÓ/×4Ñ4°ZÀÇÁÐQWÐXYÑQZÐ\bÐcdÑ\eÓfˆ
ØÐr   ©r   r   r   rM   r7   rL   rO   rP   s   @r    rf   rf   €   s   ø„ Ù%ô*ö
r   rf   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_layerrG   Nc                 ó¤   •— t         ‰| �  «        || _        || _        t	        j
                  d|z  d|z  d¬«      | _         |d|z  «      | _        y )Né   r"   F©Úbias)r6   r7   rn   ro   r   ÚLinearÚ	reductionÚnorm)rC   rn   ro   rp   rE   s       €r    r7   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)rC   r)   r,   r-   Ú
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   r)   Ú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#   rr   )r%   r&   r}   r   Úcatrv   rw   )rC   r)   r~   r,   r-   r+   ro   r.   Úinput_feature_0Úinput_feature_1Úinput_feature_2Úinput_feature_3s               r    rL   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   rM   r   r^   r   rd   ÚModuler7   r}   r   rN   rL   rO   rP   s   @r    rm   rm   �   sr   ø„ ñ
ð XZ×WcÑWcñ (¨¨s©ð (¸#ð (È2Ï9É9ð (Ðhlõ (òð U§\¡\ð ÀUÈ3ÐPSÈ8Á_ð ÐY^×YeÑYe÷ r   rm   c            
       ó˜   ‡ — e Zd Zddgfˆ fd„	Z	 	 d
dej
                  dej                  dz  dedz  deej
                     fd„Z	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¬
«      «      | _        | j/                  «       \  }}| j1                  d|d¬«       | j1                  d|d¬«       t        j(                  | j                  | j                  |j2                  ¬
«      | _        t        j(                  | j                  | j                  d¬
«      | _        t        j(                  | j                  | j                  |j2                  ¬
«      | _        t        j:                  |j<                  «      | _        y )Nr   zThe hidden size (z6) is not a multiple of the number of attention heads (ú)é
   r   r"   i   Trs   ©ÚinplaceFÚrelative_coords_table©Ú
persistentÚrelative_position_index) r6   r7   Ú
ValueErrorÚnum_attention_headsrd   Úattention_head_sizeÚall_head_sizerW   rX   rY   rZ   r*   Úpretrained_window_sizer   r<   r   ÚlogÚonesÚlogit_scaleÚ
Sequentialru   ÚReLUÚcontinuous_position_bias_mlpÚcreate_coords_table_and_indexÚregister_bufferÚqkv_biasÚqueryÚkeyÚvaluer@   Úattention_probs_dropout_probrB   )	rC   rD   ro   Ú	num_headsr*   r•   r�   r�   rE   s	           €r    r7   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ó-
ˆÔ)ð :>×9[Ñ9[Ó9]Ñ6ÐÐ6Ø×ÑÐ4Ð6KÐX]ÐÔ^Ø×ÑÐ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   Nr   Úattention_maskÚoutput_attentionsrG   c                 óR  — |j                   \  }}}| j                  |«      j                  |d| j                  | j                  «      j                  dd«      }| j                  |«      j                  |d| j                  | j                  «      j                  dd«      }| j                  |«      j                  |d| j                  | j                  «      j                  dd«      }	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                  |«      }t        j6                  ||	«      }|j+                  dddd
«      j-                  «       }|j9                  «       d d | j:                  fz   }|j                  |«      }|r||f}|S |f}|S )Nr#   r   r"   )ro   éþÿÿÿg      Y@)Úmaxr   é   r   )r%   rŸ   r&   r’   r“   r'   r    r¡   r   ry   Ú	normalizer   Úclampr˜   Úmathr–   Úexpr›   r�   r�   r*   Úpermuter(   ÚsigmoidÚ	unsqueezeÚsoftmaxrB   ÚmatmulÚsizer”   )rC   r   r¤   r¥   r+   ro   r.   Úquery_layerÚ	key_layerÚvalue_layerÚattention_scoresr˜   Úrelative_position_bias_tableÚrelative_position_biasÚ
mask_shapeÚattention_probsÚcontext_layerÚnew_context_layer_shapeÚoutputss                      r    rL   zSwin2SRSelfAttention.forwardä   sx  € ð )6×(;Ñ(;Ñ%ˆ
�C˜à�J‰J�}Ó%ß‰T�*˜b $×":Ñ":¸D×<TÑ<TÓUß‰Y�q˜!‹_ð 	ð �H‰H�]Ó#ß‰T�*˜b $×":Ñ":¸D×<TÑ<TÓUß‰Y�q˜!‹_ð 	ð �J‰J�}Ó%ß‰T�*˜b $×":Ñ":¸D×<TÑ<TÓUß‰Y�q˜!‹_ð 	ô Ÿ=™=×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ˆô Ÿ™ _°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   c                 ó8  — t        j                  | j                  d   dz
   | j                  d   t         j                  ¬«      j	                  «       }t        j                  | j                  d   dz
   | j                  d   t         j                  ¬«      j	                  «       }t        j
                  t        j                  ||gd¬«      «      j                  ddd«      j                  «       j                  d«      }| j                  d   dkD  rO|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<   n`| j                  d   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        j                  |«      dz   «      z  t        j                  d«      z  }|j                  t!        | j"                  j%                  «       «      j&                  «      }t        j                  | j                  d   «      }t        j                  | j                  d   «      }t        j
                  t        j                  ||gd¬«      «      }t        j(                  |d«      }|d d …d d …d f   |d d …d d d …f   z
  }|j                  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<   |j+                  d	«      }	||	fS )
Nr   r   ©ÚdtypeÚij)Úindexingr"   é   g      ð?r#   )r   Úaranger*   Úint64ÚfloatÚstackÚmeshgridr®   r(   r°   r•   ÚsignÚlog2Úabsr¬   ÚtoÚnextr›   Ú
parametersrÁ   rb   Úsum)
rC   Úrelative_coords_hÚrelative_coords_wr�   Úcoords_hÚcoords_wÚcoordsÚcoords_flattenÚrelative_coordsr�   s
             r    rœ   z2Swin2SRSelfAttention.create_coords_table_and_index(  s?  € ä!Ÿ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œŸ™Ð(9Ð;LÐ'MÐX\Ô]Ó^ß‰W�Q˜˜1Óß‰Z‹\ß‰Y�q‹\ð	 	ð ×&Ñ& qÑ)¨AÒ-Ø!¢!¢Qª¨1 *Ó-°×1LÑ1LÈQÑ1OÐRSÑ1SÑSÓ-Ø!¢!¢Qª¨1 *Ó-°×1LÑ1LÈQÑ1OÐRSÑ1SÑSÔ-Ø×Ñ˜aÑ  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Ðô —<‘< × 0Ñ 0°Ñ 3Ó4ˆÜ—<‘< × 0Ñ 0°Ñ 3Ó4ˆÜ—‘œUŸ^™^¨X°xÐ,@È4ÔPÓQˆÜŸ™ 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Ðà$Ð&=Ð=Ð=r   ©NF)r   r   r   r7   r   rN   r   Úboolr   rL   rœ   rO   rP   s   @r    r‡   r‡   Æ   sm   ø„ ØTUÐWXÐSYõ Gð@ 48Ø).ñ	Bà—|‘|ðBð ×)Ñ)¨DÑ0ðBð   $™;ð	Bð
 
ˆu�|‰|Ñ	óBöH#>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 rI   )r6   r7   r   ru   Údenser@   r¢   rB   ©rC   rD   ro   rE   s      €r    r7   zSwin2SRSelfOutput.__init__P  s6   ø€ Ü‰ÑÔÜ—Y‘Y˜s CÓ(ˆŒ
Ü—z‘z &×"EÑ"EÓFˆ�r   r   Úinput_tensorrG   c                 óJ   — | j                  |«      }| j                  |«      }|S rI   ©rÝ   rB   )rC   r   rß   s      r    rL   zSwin2SRSelfOutput.forwardU  s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆàÐr   ©r   r   r   r7   r   rN   rL   rO   rP   s   @r    rÛ   rÛ   O  s2   ø„ ôGð
 U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ r   rÛ   c            
       óŒ   ‡ — e Zd Zdˆ fd„	Z	 	 d	dej
                  dej                  dz  dedz  deej
                     fd„Z	ˆ xZ
S )
ÚSwin2SRAttentionc           
      ó¾   •— t         ‰| �  «        t        ||||t        |t        j
                  j                  «      r|n||f¬«      | _        t        ||«      | _	        y )N©rD   ro   r£   r*   r•   )
r6   r7   r‡   rW   rX   rY   rZ   rC   rÛ   Úoutput)rC   rD   ro   r£   r*   r•   rE   s         €r    r7   zSwin2SRAttention.__init__^  sY   ø€ Ü‰ÑÔÜ(ØØØØ#äÐ0´+·/±/×2JÑ2JÔKñ $:à(Ð*@ÐAô
ˆŒ	ô (¨°Ó4ˆ�r   Nr   r¤   r¥   rG   c                 óh   — | j                  |||«      }| j                  |d   |«      }|f|dd  z   }|S ©Nr   r   )rC   rç   )rC   r   r¤   r¥   Úself_outputsÚattention_outputr¾   s          r    rL   zSwin2SRAttention.forwardk  sE   € ð —y‘y °Ð@QÓRˆØŸ;™; |°A¡¸ÓFÐØ#Ð%¨°Q°RÐ(8Ñ8ˆØˆr   ©r   rØ   )r   r   r   r7   r   rN   r   rÙ   r   rL   rO   rP   s   @r    rä   rä   ]  sW   ø„ õ5ð  48Ø).ñ		à—|‘|ð	ð ×)Ñ)¨DÑ0ð	ð   $™;ð		ð
 
ˆ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 rI   )r6   r7   r   ru   rd   Ú	mlp_ratiorÝ   rW   Ú
hidden_actÚstrr   Úintermediate_act_fnrÞ   s      €r    r7   zSwin2SRIntermediate.__init__y  sa   ø€ Ü‰ÑÔÜ—Y‘Y˜s¤C¨×(8Ñ(8¸3Ñ(>Ó$?Ó@ˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r   r   rG   c                 óJ   — | j                  |«      }| j                  |«      }|S rI   )rÝ   ró   ©rC   r   s     r    rL   zSwin2SRIntermediate.forward�  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr   râ   rP   s   @r    rî   rî   x  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 rI   )
r6   r7   r   ru   rd   rð   rÝ   r@   rA   rB   rÞ   s      €r    r7   zSwin2SROutput.__init__‰  sF   ø€ Ü‰ÑÔÜ—Y‘Yœs 6×#3Ñ#3°cÑ#9Ó:¸CÓ@ˆŒ
Ü—z‘z &×"<Ñ"<Ó=ˆ�r   r   rG   c                 óJ   — | j                  |«      }| j                  |«      }|S rI   rá   rõ   s     r    rL   zSwin2SROutput.forwardŽ  s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØÐr   râ   rP   s   @r    r÷   r÷   ˆ  s#   ø„ ô>ð
 U§\¡\ð °e·l±l÷ r   r÷   c                   ór   ‡ — e Zd ZdZd	deddfˆ fd„Zdej                  dej                  fd„Zde	fd„Z
ˆ xZS )
ÚSwin2SRDropPathzÏStochastic depth (DropPath) per sample, for residual blocks.

    Identity when ``drop_prob`` is 0 or outside training. See `Deep Networks with Stochastic Depth
    <https://arxiv.org/abs/1603.09382>`_.
    Ú	drop_probrG   Nc                 ó0   •— t         ‰| �  «        || _        y rI   )r6   r7   rü   )rC   rü   rE   s     €r    r7   zSwin2SRDropPath.__init__œ  s   ø€ Ü‰ÑÔØ"ˆ�r   r   c                 óP  — | j                   dk(  s| j                  s|S d| j                   z
  }|j                  d   fd|j                  dz
  z  z   }t	        j
                  ||j                  |j                  ¬«      }t	        j                  ||z   «      }|j                  |«      |z  S )Nç        r   r   )r   )rÁ   Údevice)
rü   Útrainingr%   Úndimr   ÚrandrÁ   r   ÚfloorÚdiv)rC   r   Ú	keep_probr%   Úrandom_tensors        r    rL   zSwin2SRDropPath.forward   s—   € Ø�>‰>˜SÒ ¨¯ªØ Ð Ø˜Ÿ™Ñ&ˆ	Ø×$Ñ$ QÑ'Ð)¨D°M×4FÑ4FÈÑ4JÑ,KÑKˆÜŸ
™
 5°×0CÑ0CÈM×L`ÑL`ÔaˆÜŸ™ M°IÑ$=Ó>ˆØ× Ñ  Ó+¨mÑ;Ð;r   c                 ó    — d| j                   › �S )Nzp=)rü   ©rC   s    r    Ú
extra_reprzSwin2SRDropPath.extra_repr©  s   € Ø�D—N‘NÐ#Ð$Ð$r   )rÿ   )r   r   r   rM   rÇ   r7   r   rN   rL   rò   r
  rO   rP   s   @r    rû   rû   •  sB   ø„ ññ# %ð #°$õ #ð< U§\¡\ð <°e·l±ló <ð%˜C÷ %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d	z  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æ   ©Úepsrÿ   )r6   r7   rn   Ú_compute_window_shiftr*   Ú
shift_sizerä   rW   rX   rY   rZ   Ú	attentionr   r^   Úlayer_norm_epsÚlayernorm_beforerû   ÚIdentityÚ	drop_pathrî   Úintermediater÷   rç   Úlayernorm_after)
rC   rD   ro   rn   r£   Údrop_path_rater  r•   r*   rE   s
            €r    r7   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   rG   c                 óî   — t        | j                  |«      D ��cg c]  \  }}t        ||«      ‘Œ }}}t        | j                  ||«      D ���cg c]  \  }}}||k  rdn|‘Œ }}}}||fS c c}}w c c}}}w ©Nr   )Úziprn   Úmin)rC   Útarget_window_sizeÚtarget_shift_sizeÚrÚwr*   Úsr  s           r    r  z"Swin2SRLayer._compute_window_shiftÈ  sy   € Ü-0°×1FÑ1FÐHZÓ-[×\¡T Q¨”s˜1˜a•yÐ\ˆÑ\Ü8;¸D×<QÑ<QÐS^Ð`qÓ8r×sÐs©W¨Q°°1˜1 š6‘a qÑ(Ðsˆ
ÒsØ˜JÐ&Ð&ùó ]ùÜss   šA*ÁA0c                 óä  — | j                   dk  ryt        j                  |«      }t        j                  |«      }||| j                  z
  k\  j	                  «       ||| j                   z
  k\  j	                  «       z   }||| j                  z
  k\  j	                  «       ||| j                   z
  k\  j	                  «       z   }|ddd…ddf   dz  |dddd…df   z   j                  |«      }t        || j                  «      }	|	j                  d| j                  | j                  z  «      }	|	j                  d«      |	j                  d«      z
  }
|
j                  |
dk7  d«      j                  |
dk(  d«      }
|
S )	uµ  Build the cyclic-shift attention mask for shifted-window MSA; returns None when shift_size is 0.

        Each (h, w) position belongs to one of 9 cyclic-shift regions (3 along each axis), encoded
        as ``h_region * 3 + w_region``. Regions per axis:
        - 0: indices ``[0, axis - window_size)``
        - 1: indices ``[axis - window_size, axis - shift_size)``
        - 2: indices ``[axis - shift_size, axis)``
        Implementation note: a single arithmetic pass on `torch.arange` (two comparisons +
        broadcast add) replaces the original 9-iteration nested-Python-loop slice-assignment â€”
        fully vectorised, no per-cell host-side scatter, no GPUâ†”host sync.
        r   Nr   r#   r   r"   g      YÀrÿ   )
r  r   rÅ   r*   ÚlongrÍ   r0   r&   r°   Úmasked_fill)rC   r,   r-   rÁ   Úh_idxÚw_idxÚh_regionÚw_regionÚimg_maskÚmask_windowsÚ	attn_masks              r    Úget_attn_maskzSwin2SRLayer.get_attn_maskÍ  se  € ð �?‰?˜aÒØÜ—‘˜VÓ$ˆÜ—‘˜UÓ#ˆØ˜V d×&6Ñ&6Ñ6Ñ6×<Ñ<Ó>À%È6ÐTX×TcÑTcÑKcÑBc×AiÑAiÓAkÑkˆØ˜U T×%5Ñ%5Ñ5Ñ5×;Ñ;Ó=ÀÈ%ÐRV×RaÑRaÑJaÑAa×@gÑ@gÓ@iÑiˆØ˜T¢1 d¨DÐ0Ñ1°AÑ5¸ÀÀtÊQÐPTÐATÑ8UÑU×YÑYÐZ_Ó`ˆÜ'¨°$×2BÑ2BÓCˆØ#×(Ñ(¨¨T×-=Ñ-=À×@PÑ@PÑ-PÓQˆØ ×*Ñ*¨1Ó-°×0FÑ0FÀqÓ0IÑIˆ	Ø×)Ñ)¨)°q©.¸&ÓA×MÑMÈiÐ[\ÉnÐ^aÓbˆ	ØÐr   c                 óþ   — | j                   || j                   z  z
  | j                   z  }| j                   || j                   z  z
  | j                   z  }ddd|d|f}t        j                  j                  ||«      }||fS r  )r*   r   ry   rz   )rC   r   r,   r-   Ú	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¥   Nc                 óà  — |\  }}|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   Úrollr0   r*   r-  rÁ   rÍ   r   r  r2   r(   r  r  r  rç   r  )rC   r   r~   r¥   r,   r-   r+   rc   ÚchannelsÚshortcutr|   Ú
height_padÚ	width_padÚshifted_hidden_statesÚhidden_states_windowsr,  Úattention_outputsrë   Úattention_windowsÚshifted_windowsÚ
was_paddedÚlayer_outputÚlayer_outputss                          r    rL   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Ð+@À)Ð_p˜NÓqÐà,¨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   )rÿ   r   r   ©F)r   r   r   r7   r   rd   r  r-  r}   r   rN   rÙ   rL   rO   rP   s   @r    r  r  ®  s˜   ø„ àqrõLð2'ÈeÐTYÐZ]Ð_bÐZbÑTcÐejÐknÐpsÐksÑetÐTtÑNuó 'ò
ò2)ð */ñ	5à—|‘|ð5ð    S ™/ð5ð   $™;ð	5ð
 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷5r   r  c            
       ó~   ‡ — e Zd ZdZd	ˆ fd„	Z	 d
dej                  deeef   de	dz  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   )rD   ro   rn   r£   r  r•   Ú1convr   r   Ú3convrr   çš™™™™™É?T©Únegative_sloperŒ   F)r`   )r6   r7   rD   ro   r   Ú
ModuleListÚranger  r*   ÚlayersÚresi_connectionr\   Úconvr™   Ú	LeakyReLUr8   Úpatch_embedrf   Úpatch_unembed)
rC   rD   ro   rn   Údepthr£   r  r•   ÚirE   s
            €r    r7   zSwin2SRStage.__init__*  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¥   NrG   c                 ó  — |}|\  }}t        | j                  «      D ]  \  }} ||||«      }	|	d   }Œ ||||f}
| j                  ||«      }| j                  |«      }| j	                  |«      \  }}||z   }||
f}|r|	dd  z  }|S ré   )Ú	enumeraterM  rR  rO  rQ  )rC   r   r~   r¥   Úresidualr,   r-   rT  Úlayer_modulerA  rK   rc   Ústage_outputss                r    rL   zSwin2SRStage.forwardL  s¾   € ð !ˆà(‰ˆ�Ü(¨¯©Ó5ò 	-‰OˆAˆ|Ù(¨Ð8HÐJ[Ó\ˆMà)¨!Ñ,‰Mð	-ð
 $ U¨F°EÐ:Ðà×*Ñ*¨=Ð:JÓKˆØŸ	™	 -Ó0ˆØ×+Ñ+¨MÓ:Ñˆ�qà%¨Ñ0ˆà&Ð(9Ð:ˆáØ˜]¨1¨2Ð.Ñ.ˆMØÐr   rì   rB  )r   r   r   rM   r7   r   rN   r   rd   rÙ   rL   rO   rP   s   @r    rD  rD  %  sW   ø„ ñõ >ðL */ñ	à—|‘|ðð    S ™/ðð   $™;ð	ð
 
ˆu�|‰|Ñ	÷r   rD  c                   ó|   ‡ — e Zd Zˆ fd„Z	 	 	 d
dej
                  deeef   dedz  dedz  dedz  dee	z  fd	„Z
ˆ xZS )ÚSwin2SREncoderc                 óz  •— t         ‰| �  «        t        |j                  «      | _        || _        t        j                  d|j                  t        |j                  «      d¬«      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   Úcpu)r   r   )rD   ro   rn   rS  r£   r  r•   F)r6   r7   ÚlenÚdepthsÚ
num_stagesrD   r   Úlinspacer  rÐ   Úitemr   rK  rL  rD  r>   r£   ÚstagesÚgradient_checkpointing)rC   rD   Ú	grid_sizeÚxÚdprÚ	stage_idxrE   s         €r    r7   zSwin2SREncoder.__init__j  s  ø€ Ü‰ÑÔÜ˜fŸm™mÓ,ˆŒØˆŒÜ!&§¡°°6×3HÑ3HÌ#ÈfÏmÉmÓJ\ÐejÔ!kÖl˜Aˆq�v‰v�xÐlˆÐlÜ—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Ø+,öòó
ˆŒð ',ˆÕ#ùò! mùòs   Á)D3Â(A7D8r   r~   r¥   NÚoutput_hidden_statesÚreturn_dictrG   c                 ó   — d}|rdnd }|rdnd }|r||fz  }t        | j                  «      D ]<  \  }	}
 |
|||«      }|d   }|d   }|d   |d   f}||fz  }|r||fz  }|sŒ5||dd  z  }Œ> |st        d„ |||fD «       «      S t        |||¬«      S )	Nr   r   r   r§   r#   r"   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wrI   r   )Ú.0Úvs     r    ú	<genexpr>z)Swin2SREncoder.forward.<locals>.<genexpr>Ÿ  s   è ø€ Òm˜qÐ_`Ñ_lœÑmùs   ‚Š©r   r   r   )rV  rc  r   r   )rC   r   r~   r¥   ri  rj  Úall_input_dimensionsÚall_hidden_statesÚall_self_attentionsrT  Ústage_modulerA  rK   s                r    rL   zSwin2SREncoder.forward€  sð   € ð  "ÐÙ"6™B¸DÐÙ$5™b¸4ÐáØ -Ð!1Ñ1Ðä(¨¯©Ó5ò 	9‰OˆAˆ|Ù(¨Ð8HÐJ[Ó\ˆMà)¨!Ñ,ˆ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   )FFT)r   r   r   r7   r   rN   r   rd   rÙ   r   rL   rO   rP   s   @r    r[  r[  i  sp   ø„ ô,ð4 */Ø,1Ø#'ñ%
à—|‘|ð%
ð    S ™/ð%
ð   $™;ð	%
ð
 # T™kð%
ð ˜D‘[ð%
ð 
Ð%Ñ	%÷%
r   r[  c                   ób   ‡ — e Zd ZU eed<   dZdZdZdZ e	j                  «       ˆ fd„«       Zˆ xZS )ÚSwin2SRPreTrainedModelrD   Úswin2srrF   )ÚimageTc                 ó´  •— t         ‰| �  |«       t        |t        j                  t        j
                  f«      rbt        j                  |j                  | j                  j                  ¬«       |j                  � t        j                  |j                  «       yyt        |t        «      r‡t        j                  |j                  t!        j"                  d«      «       |j%                  «       \  }}t        j&                  |j(                  |«       t        j&                  |j*                  |«       yt        |t,        «      r•|j                  j.                  dk(  rC|j                  j0                  dk(  r*t3        j4                  g d¢«      j7                  dddd«      }nt3        j8                  dddd«      }t        j&                  |j:                  |«       yy)zInitialize the weights)ÚstdNrŠ   r   ©gšwœ¢#¹Ü?gï8EGrùÛ?gB`åÐ"ÛÙ?r   )r6   Ú_init_weightsrW   r   ru   r\   ÚinitÚtrunc_normal_ÚweightrD   Úinitializer_rangert   Úzeros_r‡   Ú	constant_r˜   r¬   r–   rœ   Úcopy_r�   r�   ÚSwin2SRModelr.   Únum_channels_outr   Útensorr&   r=   Úmean)rC   Úmoduler�   r�   r‡  rE   s        €r    r|  z$Swin2SRPreTrainedModel._init_weights°  sE  ø€ ô 	‰Ñ˜fÔ%Ü�fœrŸy™y¬"¯)©)Ð4Ô5Ü×Ñ˜vŸ}™}°$·+±+×2OÑ2OÕPØ�{‰{Ð&Ü—‘˜FŸK™KÕ(ð 'ä˜Ô 4Ô5Ü�N‰N˜6×-Ñ-¬t¯x©x¸«|Ô<Ø=C×=aÑ=aÓ=cÑ:Ð!Ð#:Ü�J‰J�v×3Ñ3Ð5JÔKÜ�J‰J�v×5Ñ5Ð7NÕOÜ˜¤Ô-Ø�}‰}×)Ñ)¨QÒ.°6·=±=×3QÑ3QÐUVÒ3VÜ—|‘|Ò$<Ó=×BÑBÀ1ÀaÈÈAÓN‘ä—{‘{ 1 a¨¨AÓ.�Ü�J‰J�v—{‘{ DÕ)ð .r   )r   r   r   r   r   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingr   Úno_gradr|  rO   rP   s   @r    rv  rv  ¨  s:   ø… àÓØ!ÐØ$€OØ!ÐØ&*Ð#à€U‡]�]ƒ_ó*ó ô*r   rv  c                   ó„   ‡ — e Zd Zˆ fd„Zd„ Zd„ Ze	 	 	 ddej                  de	dz  de	dz  de	dz  d	e
ez  f
d
„«       Zˆ xZS )r„  c                 ó$  •— 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   r{  r   r‡  FrŽ   )re  r  )r6   r7   rD   r.   r…  r   r†  r&   r=   r�   Ú	img_ranger   r\   r>   Úfirst_convolutionr4   rJ   r[  r9   r[   Úencoderr^   r  r_   rf   rR  Úconv_after_bodyÚ	post_init)rC   rD   r‡  rE   s      €r    r7   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 rI   )rJ   r9   r	  s    r    Úget_input_embeddingsz!Swin2SRModel.get_input_embeddingsÞ  s   € Ø�‰×/Ñ/Ð/r   c                 óX  — |j                  «       \  }}}}| j                  j                  }|||z  z
  |z  }|||z  z
  |z  }t        j                  j                  |d|d|fd«      }| j                  j                  |j                  |j                  ¬«      }||z
  | j                  z  }|S )Nr   Úreflect)r   rÁ   )r³   rD   r*   r   ry   rz   r‡  rÍ   r   rÁ   r�  )	rC   rF   rc   r,   r-   r*   Úmodulo_pad_heightÚmodulo_pad_widthr‡  s	            r    Úpad_and_normalizezSwin2SRModel.pad_and_normalizeá  sµ   € Ø*×/Ñ/Ó1Ñˆˆ1ˆf�eð —k‘k×-Ñ-ˆØ(¨6°KÑ+?Ñ?À;ÑNÐØ'¨%°+Ñ*=Ñ=ÀÑLÐÜ—}‘}×(Ñ(¨¸Ð;KÈQÐPaÐ7bÐdmÓnˆð �y‰y�|‰| <×#6Ñ#6¸l×>PÑ>Pˆ|ÓQˆØ$ tÑ+¨t¯~©~Ñ=ˆàÐr   NrF   r¥   ri  rj  rG   c                 ó2  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| 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¥   ri  rj  r   r   rp  )rD   r¥   ri  rj  r%   r›  r‘  rJ   r’  r_   rR  r“  r	   r   r   )rC   rF   r¥   ri  rj  Úkwargsrc   r,   r-   rJ   Úembedding_outputr~   Úencoder_outputsÚsequence_outputrç   s                  r    rL   zSwin2SRModel.forwardð  sB  € ð 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà*×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   )NNN)r   r   r   r7   r–  r›  r   r   r   rÙ   r   r	   rL   rO   rP   s   @r    r„  r„  Å  sx   ø„ ôò.0òð ð *.Ø,0Ø#'ñ-
à×'Ñ'ð-
ð   $™;ð-
ð # T™kð	-
ð
 ˜D‘[ð-
ð 
�Ñ	 ò-
ó ô-
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 ]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   Úconvolution_rr   r   Úpixelshuffle_r"   é	   zScale z/ is not supported. Supported scales: 2^n and 3.)r6   r7   ÚscalerL  rd   r¬   rË   Ú
add_moduler   r\   ÚPixelShuffleÚconvolutionÚpixelshuffler‘   )rC   r¨  Únum_featuresrT  rE   s       €r    r7   zUpsample.__init__+  sä   ø€ Ü‰ÑÔàˆŒ
Ø�U˜Q‘YÑ AÒ%äœ3œtŸy™y¨Ó/Ó0Ó1ò 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(  rlt        t        t        j                  | j                   «      «      «      D ]6  } | j                  d|› �«      |«      } | j                  d|› �«      |«      }Œ8 |S | j                   dk(  r"| j                  |«      }| j                  |«      }|S )Nr   r   r¥  r¦  r   )r¨  rL  rd   r¬   rË   Ú__getattr__r«  r¬  )rC   Úhidden_staterT  s      r    rL   zUpsample.forward:  sº   € Ø�J‰J˜$Ÿ*™* q™.Ñ)¨aÒ/Üœ3œtŸy™y¨¯©Ó4Ó5Ó6ò S�ØC˜t×/Ñ/°,¸q¸cÐ0BÓCÀLÓQ�ØD˜t×/Ñ/°-À¸sÐ0CÓDÀ\ÓR‘ðSð Ðð	 �Z‰Z˜1Š_Ø×+Ñ+¨LÓ9ˆLØ×,Ñ,¨\Ó:ˆLàÐr   rk   rP   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   )r6   r7   r   r\   rO  rª  Úpixel_shuffle)rC   r¨  Úin_channelsÚout_channelsrE   s       €r    r7   zUpsampleOneStep.__init__U  s@   ø€ Ü‰ÑÔä—I‘I˜k¨E°1©H¸Ñ+DÀaÈÈAÓNˆŒ	ÜŸ_™_¨UÓ3ˆÕr   c                 óJ   — | j                  |«      }| j                  |«      }|S rI   )rO  r´  )rC   rf  s     r    rL   zUpsampleOneStep.forward[  s$   € Ø�I‰I�a‹LˆØ×Ñ˜qÓ!ˆàˆr   rk   rP   s   @r    r²  r²  G  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‹   )r6   r7   r   r\   r>   Úconv_before_upsamplerP  Ú
activationr£  ÚupscaleÚupsampler…  Úfinal_convolution©rC   rD   r­  rE   s      €r    r7   zPixelShuffleUpsampler.__init__c  ss   ø€ Ü‰ÑÔÜ$&§I¡I¨f×.>Ñ.>ÀÈaÐQRÐTUÓ$VˆÔ!ÜŸ,™,¨tÔ4ˆŒÜ  §¡°Ó>ˆŒÜ!#§¡¨<¸×9PÑ9PÐRSÐUVÐXYÓ!ZˆÕr   c                 óŽ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S rI   )r¼  r½  r¿  rÀ  )rC   r¡  rf  s      r    rL   zPixelShuffleUpsampler.forwardj  sC   € Ø×%Ñ% oÓ6ˆØ�O‰O˜AÓˆØ�M‰M˜!ÓˆØ×"Ñ" 1Ó%ˆàˆr   ©r   r   r   r7   rL   rO   rP   s   @r    r¹  r¹  b  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 )	Nrr   zNThe nearest+conv upsampler only supports an upscale factor of 4 at the moment.r   r   Tr‹   rH  rI  )r6   r7   r¾  r‘   r   r\   r>   r¼  rP  r½  Úconv_up1Úconv_up2Úconv_hrr…  rÀ  ÚlrelurÁ  s      €r    r7   zNearestConvUpsampler.__init__t  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   ry   ÚinterpolaterÈ  rÀ  rÉ  )rC   r¡  Úreconstructions      r    rL   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Ã  rP   s   @r    rÅ  rÅ  s  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»  )r6   r7   r¾  r   r\   r.   Úconv_bicubicr>   r¼  rP  r½  Úconv_auxr™   Úconv_after_auxr£  r¿  r…  rÀ  rÁ  s      €r    r7   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 rI   )rÔ  r¼  r½  rÕ  rÖ  r¿  r¾  rÀ  )rC   r¡  Úbicubicr,   r-   ÚauxrÐ  s          r    rL   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Ã  rP   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	 	 	 	 	 d
dej                  dz  dej                  dz  dedz  dedz  dedz  de	e
z  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   )r6   r7   r„  rw  Ú	upsamplerr¾  r¹  r¿  rÒ  r²  r>   r…  rÅ  r   r\   rÀ  r”  rÁ  s      €r    r7   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   NrF   Úlabelsr¥   ri  rj  rG   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Ý  
        Example:
         ```python
         >>> import torch
         >>> import numpy as np
         >>> from PIL import Image
         >>> import httpx
        >>> from io import BytesIO

         >>> 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"
         >>> with httpx.stream("GET", url) as response:
         ...     image = Image.open(BytesIO(response.read()))
         >>> # 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   )rD   rj  ÚNotImplementedErrorr%   rá  r   ry   rÏ  r¾  rw  r¿  r�  r‡  rÀ  r
   r   r   )rC   rF   râ  r¥   ri  rj  rž  rå  r,   r-   rØ  r¾   r¡  rÐ  rÙ  rç   s                   r    rL   z&Swin2SRForImageSuperResolution.forwardÊ  sæ  € ðN &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàˆØÐÜ%Ð&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   )NNNNN)r   r   r   r7   r   r   r   Ú
LongTensorrÙ   r   r
   rL   rO   rP   s   @r    rÛ  rÛ  ª  s—   ø„ ôð4 ð 26Ø*.Ø)-Ø,0Ø#'ñS
à×'Ñ'¨$Ñ.ðS
ð × Ñ  4Ñ'ðS
ð   $™;ð	S
ð
 # T™kðS
ð ˜D‘[ðS
ð 
Ð+Ñ	+òS
ó ôS
r   rÛ  )rÛ  r„  rv  )7rM   Úcollections.abcrX   r¬   Údataclassesr   r   r   Ú r   r}  Úactivationsr   Úmodeling_layersr   Úmodeling_outputsr	   r
   Úmodeling_utilsr   Úutilsr   r   r   Úconfiguration_swin2srr   Ú
get_loggerr   Úloggerr   r0   r2   r…   r4   r8   rf   rm   r‡   rÛ   rä   rî   r÷   rû   r  rD  r[  rv  r„  r£  r²  r¹  rÅ  rÒ  rÛ  Ú__all__r   r   r    ú<module>rô     s  ðñ )ã Û Ý !ã Ý å &Ý !Ý 9ß KÝ -ß 9Ñ 9Ý 0ð 
ˆ×	Ñ	˜HÓ	%€ñ ðôð
 ô7˜;ó 7ó óð7ò	òô-˜Ÿ	™	ô -ô<-˜RŸY™Yô -ô6˜rŸy™yô ô3˜"Ÿ)™)ô 3ônE>˜2Ÿ9™9ô E>ôR
˜Ÿ	™	ô 
ô�r—y‘yô ô6˜"Ÿ)™)ô ô 	�B—I‘Iô 	ô%�b—i‘iô %ô2t�2—9‘9ô tônAÐ-ô AôH<
�R—Y‘Yô <
ð~ ô*˜_ó *ó ð*ð8 ôX
Ð)ó X
ó ðX
ôv#ˆr�y‰yô #ôL�b—i‘iô ô6˜BŸI™Iô ô"˜2Ÿ9™9ô ô6#˜rŸy™yô #ñ8 ðôô
o
Ð%;ó o
óð
o
òd W�r   