§
    ‚ŠtjÜ¯  ã                   óX  — 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j        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?¢Z6dS )@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<   dS )ÚSwin2SREncoderOutputNÚlast_hidden_stateÚhidden_statesÚ
attentions)
Ú__name__Ú
__module__Ú__qualname__r   ÚtorchÚFloatTensorÚ__annotations__r   Útupler   © ó    új/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/swin2sr/modeling_swin2sr.pyr   r   #   sg   € € € € € € ð 37Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ð6Ð6r   r   c                 óÚ   — | j         \  }}}}|                      |||z  |||z  ||¦  «        } |                      dd¦  «                             ¦   «                              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   s   € ð /<Ô.AÑ+€J�˜˜|Ø!×&Ò&Ø�F˜kÑ)¨;¸ÀÑ8LÈkÐ[gñô €Mð ×%Ò% a¨Ñ+Ô+×6Ò6Ñ8Ô8×=Ò=¸bÀ+È{Ð\hÑiÔi€GØ€Nr   c                 óÜ   — | j         d         }|                      d||z  ||z  |||¦  «        } |                      dd¦  «                             ¦   «                              d|||¦  «        } | S )z?
    Merges windows to produce higher resolution features.
    r#   r"   r   r$   )r/   r*   r,   r-   r.   s        r    Úwindow_reverser2   =   sq   € ð ”= Ô$€LØ�lŠl˜2˜v¨Ñ4°e¸{Ñ6JÈKÐYdÐfrÑsÔs€GØ×Ò  1Ñ%Ô%×0Ò0Ñ2Ô2×7Ò7¸¸FÀEÈ<ÑXÔX€GØ€Nr   c                   óX   ‡ — 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                 ód  •— t          ¦   «                              ¦   «          t          |¦  «        | _        | j        j        }|j        r6t          j        t          j	        d|dz   |j
        ¦  «        ¦  «        | _        nd | _        t          j        |j        ¦  «        | _        |j        | _        d S )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ˆàÔ)ð 	,Ý')¤|µE´KÀÀ;ÐQRÁ?ÐTZÔTdÑ4eÔ4eÑ'fÔ'fˆDÔ$Ð$à'+ˆDÔ$å”z &Ô"<Ñ=Ô=ˆŒØ!Ô-ˆÔÐÐr   Úpixel_valuesNÚreturnc                 ó†   — |                       |¦  «        \  }}| j        �
|| j        z   }|                      |¦  «        }||fS ©N)r9   r?   rB   )rC   rF   Ú
embeddingsÚoutput_dimensionss       r    ÚforwardzSwin2SREmbeddings.forwardZ   sN   € Ø(,×(=Ò(=¸lÑ(KÔ(KÑ%ˆ
Ð%àÔ#Ð/Ø# dÔ&>Ñ>ˆJà—\’\ *Ñ-Ô-ˆ
àÐ,Ð,Ð,r   )r   r   r   Ú__doc__r7   r   r   r   ÚTensorrL   Ú__classcell__©rE   s   @r    r4   r4   G   ss   ø€ € € € € ðð ð.ð .ð .ð .ð .ð- EÔ$5¸Ñ$<ð -ÀÀuÄ|ÔATð -ð -ð -ð -ð -ð -ð -ð -r   r4   c                   óf   ‡ — 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   Tc                 ó  •— 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        ¦  «        nd | _        d S )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°FÔ4E�Jˆ
å#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ý#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ø(¨œm¨z¸!¬}Ñ<¸jÈ¼mÈzÐZ[Ì}Ñ>\Ð]ÐØ"4ˆÔØ-¨aÔ0Ð3EÀaÔ3HÑHˆÔåœ) L°&Ô2BÐPZÐcmÐnÑnÔnˆŒØ;LÐV�œ fÔ&6Ñ7Ô7Ð7ÐRVˆŒˆˆr   rJ   NrG   c                 óÞ   — |                       |¦  «        }|j        \  }}}}||f}|                     d¦  «                             dd¦  «        }| j        �|                      |¦  «        }||fS )Nr"   r   )r]   r%   Úflattenr'   r_   )rC   rJ   Ú_r,   r-   rK   s         r    rL   zSwin2SRPatchEmbeddings.forwardt   sv   € Ø—_’_ ZÑ0Ô0ˆ
Ø(Ô.Ñˆˆ1ˆf�eØ# U˜OÐØ×'Ò'¨Ñ*Ô*×4Ò4°Q¸Ñ:Ô:ˆ
àŒ>Ð%ØŸš¨
Ñ3Ô3ˆJàÐ,Ð,Ð,r   )T)r   r   r   r7   r   r   r   rN   ÚintrL   rO   rP   s   @r    r8   r8   e   s€   ø€ € € € € ðWð Wð Wð Wð Wð Wð	- %Ô"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                 ó`   •— t          ¦   «                              ¦   «          |j        | _        d S rI   )r6   r7   r>   )rC   rD   rE   s     €r    r7   z!Swin2SRPatchUnEmbeddings.__init__ƒ   s'   ø€ Ý‰Œ×ÒÑÔÐàÔ)ˆŒˆˆr   c                 ó–   — |j         \  }}}|                     dd¦  «                             || j        |d         |d         ¦  «        }|S )Nr   r"   r   )r%   r'   r&   r>   )rC   rJ   Úx_sizer+   Úheight_widthr.   s         r    rL   z Swin2SRPatchUnEmbeddings.forwardˆ   sP   € Ø1;Ô1AÑ.ˆ
�L ,Ø×)Ò)¨!¨QÑ/Ô/×4Ò4°ZÀÄÐQWÐXYÔQZÐ\bÐcdÔ\eÑfÔfˆ
ØÐr   ©r   r   r   rM   r7   rL   rO   rP   s   @r    rf   rf   €   sM   ø€ € € € € Ø%Ð%ð*ð *ð *ð *ð *ð
ð ð ð ð ð ð 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  ¦  «        | _        d S )Né   r"   F©Úbias)r6   r7   rn   ro   r   ÚLinearÚ	reductionÚnorm)rC   rn   ro   rp   rE   s       €r    r7   zSwin2SRPatchMerging.__init__œ   sa   ø€ Ý‰Œ×ÒÑÔÐØ 0ˆÔØˆŒÝœ 1 s¡7¨A°©G¸%Ð@Ñ@Ô@ˆŒØ�J˜q 3™wÑ'Ô'ˆŒ	ˆ	ˆ	r   c                 óŠ   — |dz  dk    p|dz  dk    }|r.ddd|dz  d|dz  f}t           j                             ||¦  «        }|S )Nr"   r   r   )r   Ú
functionalÚpad)rC   r)   r,   r-   Ú
should_padÚ
pad_valuess         r    Ú	maybe_padzSwin2SRPatchMerging.maybe_pad£   s\   € Ø˜q‘j A’oÐ:¨5°1©9¸ª>ˆ
Øð 	IØ˜Q  5¨1¡9¨a°¸!±Ð<ˆJÝœM×-Ò-¨m¸ZÑHÔHˆMàÐr   r)   Úinput_dimensionsc                 óî  — |\  }}|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¦  «        }|                     |dd|z  ¦  «        }|                      |¦  «        }|                      |¦  «        }|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«   sD  € Ø(‰ˆ�à(5Ô(;Ñ%ˆ
�C˜à%×*Ò*¨:°v¸uÀlÑSÔSˆàŸš }°f¸eÑDÔDˆà'¨¨¨¨1¨4¨a¨4°°°A°°q°q°qÐ(8Ô9ˆà'¨¨¨¨1¨4¨a¨4°°°A°°q°q°qÐ(8Ô9ˆà'¨¨¨¨1¨4¨a¨4°°°A°°q°q°qÐ(8Ô9ˆà'¨¨¨¨1¨4¨a¨4°°°A°°q°q°qÐ(8Ô9ˆåœ	 ?°OÀ_ÐVeÐ"fÐhjÑkÔkˆØ%×*Ò*¨:°r¸1¸|Ñ;KÑLÔLˆàŸš }Ñ5Ô5ˆØŸ	š	 -Ñ0Ô0ˆàÐr   )r   r   r   rM   r   r^   r   rd   ÚModuler7   r}   r   rN   rL   rO   rP   s   @r    rm   rm   �   sÀ   ø€ € € € € ð
ð 
ð XZÔWcð (ð (¨¨s¬ð (¸#ð (È2Ì9ð (Ðhlð (ð (ð (ð (ð (ð (ðð ð ð U¤\ð ÀUÈ3ÐPSÈ8Ä_ð ÐY^Ô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           
      óD  •— t          ¦   «                              ¦   «          ||z  dk    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¬
¦  «        ¦  «        | _        |                      ¦   «         \  }}|                      d|d¬¦  «         |                      d|d¬¦  «         t          j        | j        | j        |j        ¬
¦  «        | _        t          j        | j        | j        d¬
¦  «        | _        t          j        | j        | j        |j        ¬
¦  «        | _        t          j        |j        ¦  «        | _        d S )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ÒÐÝØk CÐkÐkÐ_hÐkÐkÐkñô ð ð $-ˆÔ Ý#& s¨Y¡Ñ#7Ô#7ˆÔ Ø!Ô5¸Ô8PÑPˆÔå% kµ;´?Ô3KÑLÔLÐlˆKˆKÐS^Ð`kÐRlð 	Ôð '=ˆÔ#Ýœ<­¬	°"µu´zÀ9ÈaÐQRÐBSÑ7TÔ7TÑ2TÑ(UÔ(UÑVÔVˆÔå,.¬MÝŒI�a˜ 4Ð(Ñ(Ô(­"¬'¸$Ð*?Ñ*?Ô*?ÅÄÈ3ÐPYÐ`eÐAfÑAfÔAfñ-
ô -
ˆÔ)ð :>×9[Ò9[Ñ9]Ô9]Ñ6ÐÐ6Ø×ÒÐ4Ð6KÐX]ÐÑ^Ô^Ð^Ø×ÒÐ6Ð8OÐ\aÐÑbÔbÐbå”Y˜tÔ1°4Ô3EÈFÌOÐ\Ñ\Ô\ˆŒ
Ý”9˜TÔ/°Ô1CÈ%ÐPÑPÔPˆŒÝ”Y˜tÔ1°4Ô3EÈFÌOÐ\Ñ\Ô\ˆŒ
Ý”z &Ô"EÑFÔFˆŒˆˆr   NFr   Úattention_maskÚoutput_attentionsrG   c                 óž  — |j         \  }}}|                      |¦  «                             |d| j        | j        ¦  «                             dd¦  «        }|                      |¦  «                             |d| j        | j        ¦  «                             dd¦  «        }|                      |¦  «                             |d| j        | j        ¦  «                             dd¦  «        }	t          j	         
                    |d¬¦  «        t          j	         
                    |d¬¦  «                             dd¦  «        z  }
t          j        | j        t          j        d¦  «        ¬¦  «                             ¦   «         }|
|z  }
|                      | j        ¦  «                             d| j        ¦  «        }|| j                             d¦  «                                      | j        d         | j        d         z  | j        d         | j        d         z  d¦  «        }|                     ddd¦  «                             ¦   «         }d	t          j        |¦  «        z  }|
|                     d¦  «        z   }
|�Ÿ|j         d         }|
                     ||z  || j        ||¦  «        |                     d¦  «                             d¦  «        z   }
|
|                     d¦  «                             d¦  «        z   }
|
                     d| j        ||¦  «        }
t          j	                             |
d¬¦  «        }|                      |¦  «        }t          j        ||	¦  «        }|                     dddd
¦  «                             ¦   «         }|                     ¦   «         d d…         | j        fz   }|                     |¦  «        }|r||fn|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ä   s¢  € ð )6Ô(;Ñ%ˆ
�C˜à�JŠJ�}Ñ%Ô%ßŠT�*˜b $Ô":¸DÔ<TÑUÔUßŠY�q˜!‰_Œ_ð 	ð �HŠH�]Ñ#Ô#ßŠT�*˜b $Ô":¸DÔ<TÑUÔUßŠY�q˜!‰_Œ_ð 	ð �JŠJ�}Ñ%Ô%ßŠT�*˜b $Ô":¸DÔ<TÑUÔUßŠY�q˜!‰_Œ_ð 	õ œ=×2Ò2°;ÀBÐ2ÑGÔGÍ"Ì-×JaÒJaØ˜2ð Kbñ K
ô K
ç
Š)�B˜Ñ
Ô
ñÐõ ”k $Ô"2½¼ÀÑ8LÔ8LÐMÑMÔM×QÒQÑSÔSˆØ+¨kÑ9ÐØ'+×'HÒ'HÈÔIcÑ'dÔ'd×'iÒ'iØ�Ô(ñ(
ô (
Ð$ð ">¸dÔ>Z×>_Ò>_Ð`bÑ>cÔ>cÔ!d×!iÒ!iØÔ˜QÔ $Ô"2°1Ô"5Ñ5°tÔ7GÈÔ7JÈTÔM]Ð^_ÔM`Ñ7`Ðbdñ"
ô "
Ðð "8×!?Ò!?ÀÀ1ÀaÑ!HÔ!H×!SÒ!SÑ!UÔ!UÐØ!#¥e¤mÐ4JÑ&KÔ&KÑ!KÐØ+Ð.D×.NÒ.NÈqÑ.QÔ.QÑQÐàÐ%à'Ô-¨aÔ0ˆJØ/×4Ò4Ø˜jÑ(¨*°dÔ6NÐPSÐUXñ ô  à×(Ò(¨Ñ+Ô+×5Ò5°aÑ8Ô8ñ 9Ðð  0°.×2JÒ2JÈ1Ñ2MÔ2M×2WÒ2WÐXYÑ2ZÔ2ZÑZÐØ/×4Ò4°R¸Ô9QÐSVÐX[Ñ\Ô\Ðõ œ-×/Ò/Ð0@ÀbÐ/ÑIÔIˆð Ÿ,š, Ñ7Ô7ˆõ œ _°kÑBÔBˆØ%×-Ò-¨a°°A°qÑ9Ô9×DÒDÑFÔFˆØ"/×"4Ò"4Ñ"6Ô"6°s¸°sÔ";¸tÔ?QÐ>SÑ"SÐØ%×*Ò*Ð+BÑCÔCˆà6GÐ]�= /Ð2Ð2ÈmÐM]ˆàˆr   c                 óP  — t          j        | j        d         dz
   | j        d         t           j        ¬¦  «                             ¦   «         }t          j        | j        d         dz
   | j        d         t           j        ¬¦  «                             ¦   «         }t          j        t          j        ||gd¬¦  «        ¦  «                             ddd¦  «                             ¦   «          	                    d¦  «        }| j
        d         dk    rQ|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<   na| j        d         dk    rP|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  }|                     t!          | 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
  }|                     ddd¦  «                             ¦   «         }|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<   |                     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¨4Ô+;¸AÔ+>ÀÑ+BÐ)CÀTÔEUÐVWÔEXÕ`eÔ`kÐlÑlÔl×rÒrÑtÔtÐÝ!œL¨4Ô+;¸AÔ+>ÀÑ+BÐ)CÀTÔEUÐVWÔEXÕ`eÔ`kÐlÑlÔl×rÒrÑtÔtÐåŒK�œÐ(9Ð;LÐ'MÐX\Ð]Ñ]Ô]Ñ^Ô^ßŠW�Q˜˜1ÑÔßŠZ‰\Œ\ßŠY�q‰\Œ\ð	 	ð Ô& qÔ)¨AÒ-Ð-Ø! ! ! ! Q Q Q¨¨¨¨1 *Ð-Ð-Ô-°Ô1LÈQÔ1OÐRSÑ1SÑSÐ-Ð-Ñ-Ø! ! ! ! Q Q Q¨¨¨¨1 *Ð-Ð-Ô-°Ô1LÈQÔ1OÐRSÑ1SÑSÐ-Ð-Ñ-Ð-ØÔ˜aÔ  1Ò$Ð$Ø! ! ! ! Q Q Q¨¨¨¨1 *Ð-Ð-Ô-°Ô1AÀ!Ô1DÀqÑ1HÑHÐ-Ð-Ñ-Ø! ! ! ! Q Q Q¨¨¨¨1 *Ð-Ð-Ô-°Ô1AÀ!Ô1DÀqÑ1HÑHÐ-Ð-Ñ-Ø Ñ"ÐåŒJÐ,Ñ-Ô-µ´
½5¼9ÐEZÑ;[Ô;[Ð^aÑ;aÑ0bÔ0bÑbÕeiÔenÐopÑeqÔeqÑqð 	ð !6× 8Ò 8½¸dÔ>_×>jÒ>jÑ>lÔ>lÑ9mÔ9mÔ9sÑ tÔ tÐõ ”< Ô 0°Ô 3Ñ4Ô4ˆÝ”< Ô 0°Ô 3Ñ4Ô4ˆÝ”�Uœ^¨X°xÐ,@È4ÐPÑPÔPÑQÔQˆÝœ v¨qÑ1Ô1ˆØ(¨¨¨¨A¨A¨A¨t¨Ô4°~ÀaÀaÀaÈÈqÈqÈqÀjÔ7QÑQˆØ)×1Ò1°!°Q¸Ñ:Ô:×EÒEÑGÔGˆØ˜˜˜˜1˜1˜1˜a˜Ð Ð Ô  DÔ$4°QÔ$7¸!Ñ$;Ñ;Ð Ð Ñ Ø˜˜˜˜1˜1˜1˜a˜Ð Ð Ô  DÔ$4°QÔ$7¸!Ñ$;Ñ;Ð Ð Ñ Ø˜˜˜˜1˜1˜1˜a˜Ð Ð Ô  A¨Ô(8¸Ô(;Ñ$;¸aÑ$?Ñ?Ð Ð Ñ Ø"1×"5Ò"5°bÑ"9Ô"9Ðà$Ð&=Ð=Ð=r   ©NF)r   r   r   r7   r   rN   r   Úboolr   rL   rœ   rO   rP   s   @r    r‡   r‡   Æ   sÂ   ø€ € € € € ØTUÐWXÐSYð Gð Gð Gð Gð Gð Gð@ 48Ø).ð	Bð Bà”|ðBð Ô)¨DÑ0ðBð   $™;ð	Bð
 
ˆuŒ|Ô	ðBð Bð Bð BðH#>ð #>ð #>ð #>ð #>ð #>ð #>r   r‡   c                   óP   ‡ — 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        ¦  «        | _        d S rI   )r6   r7   r   ru   Údenser@   r¢   rB   ©rC   rD   ro   rE   s      €r    r7   zSwin2SRSelfOutput.__init__P  sD   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜s CÑ(Ô(ˆŒ
Ý”z &Ô"EÑFÔFˆŒˆˆr   r   Úinput_tensorrG   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S rI   ©rÝ   rB   )rC   r   rß   s      r    rL   zSwin2SRSelfOutput.forwardU  s*   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆàÐr   ©r   r   r   r7   r   rN   rL   rO   rP   s   @r    rÛ   rÛ   O  sn   ø€ € € € € ðGð Gð Gð Gð Gð
 U¤\ð ÀÄð ÐRWÔR^ð ð ð ð ð ð ð ð r   rÛ   c            
       ót   ‡ — 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 )ÚSwin2SRAttentionr   c           
      óê   •— t          ¦   «                              ¦   «          t          ||||t          |t          j        j        ¦  «        r|n||f¬¦  «        | _        t          ||¦  «        | _	        d S )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__^  sz   ø€ Ý‰Œ×ÒÑÔÐÝ(ØØØØ#åÐ0µ+´/Ô2JÑKÔKð$BÐ#9Ð#9à(Ð*@ÐAð
ñ 
ô 
ˆŒ	õ (¨°Ñ4Ô4ˆŒˆˆr   NFr   r¤   r¥   rG   c                 óˆ   — |                       |||¦  «        }|                      |d         |¦  «        }|f|dd …         z   }|S ©Nr   r   )rC   rç   )rC   r   r¤   r¥   Úself_outputsÚattention_outputr¾   s          r    rL   zSwin2SRAttention.forwardk  sM   € ð —y’y °Ð@QÑRÔRˆØŸ;š; |°A¤¸ÑFÔFÐØ#Ð%¨°Q°R°RÔ(8Ñ8ˆØˆr   ©r   rØ   )r   r   r   r7   r   rN   r   rÙ   r   rL   rO   rP   s   @r    rä   rä   ]  s™   ø€ € € € € ð5ð 5ð 5ð 5ð 5ð 5ð  48Ø).ð		ð 	à”|ð	ð Ô)¨DÑ0ð	ð   $™;ð		ð
 
ˆuŒ|Ô	ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r   rä   c                   óB   ‡ — 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                 | _        d S |j        | _        d S rI   )r6   r7   r   ru   rd   Ú	mlp_ratiorÝ   rW   Ú
hidden_actÚstrr   Úintermediate_act_fnrÞ   s      €r    r7   zSwin2SRIntermediate.__init__y  sx   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜s¥C¨Ô(8¸3Ñ(>Ñ$?Ô$?Ñ@Ô@ˆŒ
Ý�fÔ'­Ñ-Ô-ð 	9Ý'-¨fÔ.?Ô'@ˆDÔ$Ð$Ð$à'-Ô'8ˆDÔ$Ð$Ð$r   r   rG   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S rI   )rÝ   ró   ©rC   r   s     r    rL   zSwin2SRIntermediate.forward�  s,   € ØŸ
š
 =Ñ1Ô1ˆØ×0Ò0°Ñ?Ô?ˆØÐr   râ   rP   s   @r    rî   rî   x  s^   ø€ € € € € ð9ð 9ð 9ð 9ð 9ð U¤\ð °e´lð ð ð ð ð ð ð ð r   rî   c                   óB   ‡ — 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        ¦  «        | _	        d S rI   )
r6   r7   r   ru   rd   rð   rÝ   r@   rA   rB   rÞ   s      €r    r7   zSwin2SROutput.__init__‰  sT   ø€ Ý‰Œ×ÒÑÔÐÝ”Y�s 6Ô#3°cÑ#9Ñ:Ô:¸CÑ@Ô@ˆŒ
Ý”z &Ô"<Ñ=Ô=ˆŒˆˆr   r   rG   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S rI   rá   rõ   s     r    rL   zSwin2SROutput.forwardŽ  s*   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØÐr   râ   rP   s   @r    r÷   r÷   ˆ  s^   ø€ € € € € ð>ð >ð >ð >ð >ð
 U¤\ð °e´lð ð ð ð ð ð ð ð r   r÷   c                   ó^   ‡ — 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                 óV   •— t          ¦   «                              ¦   «          || _        d S rI   )r6   r7   rý   )rC   rý   rE   s     €r    r7   zSwin2SRDropPath.__init__œ  s$   ø€ Ý‰Œ×ÒÑÔÐØ"ˆŒˆˆr   r   c                 ó  — | 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   ¦  «        }| 	                    |¦  «        |z  S )Nrü   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ÈÑ4JÑ,KÑKˆÝœ
 5°Ô0CÈMÔL`ÐaÑaÔaˆÝœ M°IÑ$=Ñ>Ô>ˆØ× Ò  Ñ+Ô+¨mÑ;Ð;r   c                 ó   — d| j         › �S )Nzp=)rý   ©rC   s    r    Ú
extra_reprzSwin2SRDropPath.extra_repr©  s   € Ø$�D”NÐ$Ð$Ð$r   )rü   )r   r   r   rM   rÇ   r7   r   rN   rL   rò   r
  rO   rP   s   @r    rû   rû   •  s›   ø€ € € € € ðð ð#ð # %ð #°$ð #ð #ð #ð #ð #ð #ð< U¤\ð <°e´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 )ÚSwin2SRLayerrü   r   c           
      óˆ  •— t          ¦   «                              ¦   «          || _        |                      |j        |j        f||f¦  «        \  }}|d         | _        |d         | _        t          |||| j        t          |t          j	        j
        ¦  «        r|n||f¬¦  «        | _        t          j        ||j        ¬¦  «        | _        |dk    rt!          |¦  «        nt          j        ¦   «         | _        t'          ||¦  «        | _        t+          ||¦  «        | _        t          j        ||j        ¬¦  «        | _        d S )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Ð4°zÀ:Ð6Nñ#
ô #
Ñˆ�Zð ' qœ>ˆÔØ$ Qœ-ˆŒÝ)ØØØØÔ(åÐ0µ+´/Ô2JÑKÔKð$BÐ#9Ð#9à(Ð*@ÐAð
ñ 
ô 
ˆŒõ !#¤¨S°fÔ6KÐ LÑ LÔ LˆÔØ<JÈSÒ<PÐ<P�¨Ñ8Ô8Ð8ÕVXÔVaÑVcÔVcˆŒÝ/°¸Ñ<Ô<ˆÔÝ# F¨CÑ0Ô0ˆŒÝ!œ|¨C°VÔ5JÐKÑKÔKˆÔÐÐr   rG   c                 óˆ   — d„ t          | j        |¦  «        D ¦   «         }d„ t          | j        ||¦  «        D ¦   «         }||fS )Nc                 ó4   — g | ]\  }}t          ||¦  «        ‘ŒS r   )Úmin)Ú.0ÚrÚws      r    ú
<listcomp>z6Swin2SRLayer._compute_window_shift.<locals>.<listcomp>É  s$   € Ð\Ð\Ð\¡T Q¨•s˜1˜a‘y”yÐ\Ð\Ð\r   c                 ó*   — g | ]\  }}}||k    rd n|‘ŒS rì   r   )r  r  r  Úss       r    r   z6Swin2SRLayer._compute_window_shift.<locals>.<listcomp>Ê  s*   € ÐsÐsÐs©W¨Q°°1˜1 š6˜6�a�a qÐsÐsÐsr   )Úziprn   )rC   Útarget_window_sizeÚtarget_shift_sizer*   r  s        r    r  z"Swin2SRLayer._compute_window_shiftÈ  sR   € Ø\Ð\­S°Ô1FÐHZÑ-[Ô-[Ð\Ñ\Ô\ˆØsÐs½¸DÔ<QÐS^Ð`qÑ8rÔ8rÐsÑsÔsˆ
Ø˜JÐ&Ð&r   c                 ó  — | j         dk    rdS t          j        |¦  «        }t          j        |¦  «        }||| j        z
  k                         ¦   «         ||| j         z
  k                         ¦   «         z   }||| j        z
  k                         ¦   «         ||| j         z
  k                         ¦   «         z   }|ddd…ddf         dz  |dddd…df         z                        |¦  «        }t          || j        ¦  «        }	|	                     d| j        | j        z  ¦  «        }	|	                     d¦  «        |	                     d¦  «        z
  }
|
 	                    |
dk    d¦  «         	                    |
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Í  s~  € ð Œ?˜aÒÐØ�4Ý”˜VÑ$Ô$ˆÝ”˜UÑ#Ô#ˆØ˜V dÔ&6Ñ6Ò6×<Ò<Ñ>Ô>À%È6ÐTXÔTcÑKcÒBc×AiÒAiÑAkÔAkÑkˆØ˜U TÔ%5Ñ5Ò5×;Ò;Ñ=Ô=ÀÈ%ÐRVÔRaÑJaÒAa×@gÒ@gÑ@iÔ@iÑiˆØ˜T 1 1 1 d¨DÐ0Ô1°AÑ5¸ÀÀtÈQÈQÈQÐPTÐATÔ8UÑU×YÒYÐZ_Ñ`Ô`ˆÝ'¨°$Ô2BÑCÔCˆØ#×(Ò(¨¨TÔ-=ÀÔ@PÑ-PÑQÔQˆØ ×*Ò*¨1Ñ-Ô-°×0FÒ0FÀqÑ0IÔ0IÑIˆ	Ø×)Ò)¨)°qª.¸&ÑAÔA×MÒMÈiÐ[\ÊnÐ^aÑbÔbˆ	ØÐr   c                 óÂ   — | j         || j         z  z
  | j         z  }| j         || j         z  z
  | j         z  }ddd|d|f}t          j                             ||¦  «        }||fS )Nr   )r*   r   ry   rz   )rC   r   r,   r-   Ú	pad_rightÚ
pad_bottomr|   s          r    r}   zSwin2SRLayer.maybe_padæ  sp   € ØÔ%¨°Ô0@Ñ(@Ñ@ÀDÔDTÑTˆ	ØÔ&¨°$Ô2BÑ)BÑBÀdÔFVÑVˆ
Ø˜˜A˜y¨!¨ZÐ8ˆ
Ýœ×)Ò)¨-¸ÑDÔDˆØ˜jÐ(Ð(r   Fr   r~   r¥   Nc                 óô  — |\  }}|                      ¦   «         \  }}}|}	|                     ||||¦  «        }|                      |||¦  «        \  }}
|j        \  }}}}| j        dk    r&t          j        || j         | j         fd¬¦  «        }n|}t          || j        ¦  «        }|                     d| j        | j        z  |¦  «        }|  	                    |||j
        ¬¦  «        }|�|                     |j        ¦  «        }|                      |||¬¦  «        }|d         }|                     d| j        | j        |¦  «        }t          || j        ||¦  «        }| j        dk    r$t          j        || j        | j        fd¬¦  «        }n|}|
d         dk    p|
d         dk    }|r&|d d …d |…d |…d d …f                              ¦   «         }|                     |||z  |¦  «        }|                      |¦  «        }|	|                      |¦  «        z   }|                      |¦  «        }|                      |¦  «        }||                      |                      |¦  «        ¦  «        z   }|r
||d	         fn|f}|S )
Nr   )r   r"   )ÚshiftsÚdimsr#   rÀ   )r¥   r   é   r   )r³   r&   r}   r%   r  r   Úrollr0   r*   r0  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Ô"6Ñˆ
�A�xØ ˆð &×*Ò*¨:°v¸uÀhÑOÔOˆØ$(§N¢N°=À&È%Ñ$PÔ$PÑ!ˆ�zØ&3Ô&9Ñ#ˆˆ:�y !àŒ?˜QÒÐÝ$)¤J¨}ÀtÄÐFVÐY]ÔYhÐXhÐEiÐpvÐ$wÑ$wÔ$wÐ!Ð!à$1Ð!õ !1Ð1FÈÔHXÑ YÔ YÐØ 5× :Ò :¸2¸tÔ?OÐRVÔRbÑ?bÐdlÑ mÔ mÐØ×&Ò& z°9ÀMÔDWÐ&ÑXÔXˆ	ØÐ Ø!ŸšÐ%:Ô%AÑBÔBˆIà ŸNšNÐ+@À)Ð_p˜NÑqÔqÐà,¨QÔ/Ðà,×1Ò1°"°dÔ6FÈÔHXÐZbÑcÔcÐÝ(Ð):¸DÔ<LÈjÐZcÑdÔdˆð Œ?˜QÒÐÝ %¤
¨?ÀDÄOÐUYÔUdÐCeÐlrÐ sÑ sÔ sÐÐà /Ðà ”] QÒ&Ð;¨*°Q¬-¸!Ò*;ˆ
Øð 	VØ 1°!°!°!°W°f°W¸f¸u¸fÀaÀaÀaÐ2GÔ H× SÒ SÑ UÔ UÐà-×2Ò2°:¸vÈ¹~ÈxÑXÔXÐØ×-Ò-Ð.?Ñ@Ô@ˆØ  4§>¢>°-Ñ#@Ô#@Ñ@ˆà×(Ò(¨Ñ7Ô7ˆØ—{’{ <Ñ0Ô0ˆØ$ t§~¢~°d×6JÒ6JÈ<Ñ6XÔ6XÑ'YÔ'YÑYˆà@QÐf˜Ð'8¸Ô';Ð<Ð<ÐXdÐWfˆØÐr   )rü   r   r   ©F)r   r   r   r7   r   rd   r  r0  r}   r   rN   rÙ   rL   rO   rP   s   @r    r  r  ®  s  ø€ € € € € àqrðLð Lð Lð Lð Lð Lð2'ÈeÐTYÐZ]Ð_bÐZbÔTcÐejÐknÐpsÐksÔetÐTtÔNuð 'ð 'ð 'ð 'ð
ð ð ð2)ð )ð )ð */ð	5ð 5à”|ð5ð    S œ/ð5ð   $™;ð	5ð
 
ˆuŒ|˜Uœ\Ð)Ô	*ð5ð 5ð 5ð 5ð 5ð 5ð 5ð 5r   r  c            
       óv   ‡ — 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.
    r   c                 ó¼  •‡‡‡‡‡— t          ¦   «                              ¦   «          ‰| _        ‰| _        t	          j        ˆˆˆˆˆfd„t          |¦  «        D ¦   «         ¦  «        | _        ‰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          ‰¦  «        | _        d S )Nc           
      ó`   •— g | ]*}t          ‰‰‰‰|d z  dk    rdn	‰j        d z  ‰¬¦  «        ‘Œ+S )r"   r   )rD   ro   rn   r£   r  r•   )r  r*   )r  ÚirD   ro   rn   r£   r•   s     €€€€€r    r   z)Swin2SRStage.__init__.<locals>.<listcomp>/  sd   ø€ ð 
ð 
ð 
ð õ Ø!ØØ%5Ø'Ø%&¨¡U¨a¢Z Z˜q˜q°fÔ6HÈAÑ6MØ+Aðñ ô ð
ð 
ð 
r   Ú1convr   r   Ú3convrr   çš™™™™™É?T©Únegative_sloperŒ   r   F)r`   )r6   r7   rD   ro   r   Ú
ModuleListÚrangeÚlayersÚresi_connectionr\   Úconvr™   Ú	LeakyReLUr8   Úpatch_embedrf   Úpatch_unembed)	rC   rD   ro   rn   Údepthr£   r  r•   rE   s	    ``` ` `€r    r7   zSwin2SRStage.__init__*  sm  øøøøøø€ Ý‰Œ×ÒÑÔÐØˆŒØˆŒÝ”mð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
õ ˜u™œð
ñ 
ô 
ñ
ô 
ˆŒð Ô! WÒ,Ð,Ýœ	 # s¨A¨q°!Ñ4Ô4ˆDŒIˆIØÔ# wÒ.Ð.åœÝ”	˜#˜s a™x¨¨A¨qÑ1Ô1Ý”¨C¸Ð>Ñ>Ô>Ý”	˜# ™( C¨1¡H¨a°°AÑ6Ô6Ý”¨C¸Ð>Ñ>Ô>Ý”	˜# ™( C¨¨A¨qÑ1Ô1ñô ˆDŒIõ 2°&ÈEÐRÑRÔRˆÔå5°fÑ=Ô=ˆÔÐÐr   Fr   r~   r¥   NrG   c                 ó4  — |}|\  }}t          | j        ¦  «        D ]\  }} ||||¦  «        }	|	d         }Œ||||f}
|                      ||¦  «        }|                      |¦  «        }|                      |¦  «        \  }}||z   }||
f}|r||	dd …         z  }|S ré   )Ú	enumeraterR  rW  rT  rV  )rC   r   r~   r¥   Úresidualr,   r-   rJ  Úlayer_modulerD  rK   rc   Ústage_outputss                r    rL   zSwin2SRStage.forwardL  sÔ   € ð !ˆà(‰ˆ�Ý(¨¬Ñ5Ô5ð 	-ð 	-‰OˆAˆ|Ø(˜L¨Ð8HÐJ[Ñ\Ô\ˆMà)¨!Ô,ˆMˆMà# U¨F°EÐ:Ðà×*Ò*¨=Ð:JÑKÔKˆØŸ	š	 -Ñ0Ô0ˆØ×+Ò+¨MÑ:Ô:Ñˆ�qà%¨Ñ0ˆà&Ð(9Ð:ˆàð 	/Ø˜]¨1¨2¨2Ô.Ñ.ˆMØÐr   rì   rE  )r   r   r   rM   r7   r   rN   r   rd   rÙ   rL   rO   rP   s   @r    rG  rG  %  s¡   ø€ € € € € ðð ð >ð  >ð  >ð  >ð  >ð  >ðL */ð	ð à”|ðð    S œ/ðð   $™;ð	ð
 
ˆuŒ|Ô	ðð ð ð ð ð ð ð r   rG  c                   óx   ‡ — 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                 ó€  •‡‡‡— t          ¦   «                              ¦   «          t          ‰j        ¦  «        | _        ‰| _        d„ t          j        d‰j        t          ‰j        ¦  «        d¬¦  «        D ¦   «         Št          j        ˆˆˆfd„t          | j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   )Úitem)r  Úxs     r    r   z+Swin2SREncoder.__init__.<locals>.<listcomp>n  s    € ÐlÐlÐl˜Aˆq�vŠv‰xŒxÐlÐlÐlr   r   Úcpu)r   c                 ó  •— g | ]€}t          ‰‰j        ‰d          ‰d         f‰j        |         ‰j        |         ‰t	          ‰j        d|…         ¦  «        t	          ‰j        d|dz   …         ¦  «        …         d ¬¦  «        ‘Œ�S )r   r   N)rD   ro   rn   rX  r£   r  r•   )rG  r>   Údepthsr£   rÐ   )r  Ú	stage_idxrD   ÚdprÚ	grid_sizes     €€€r    r   z+Swin2SREncoder.__init__.<locals>.<listcomp>p  s§   ø€ ð ð ð ð õ Ø!ØÔ(Ø&/°¤l°I¸a´LÐ%AØ œ-¨	Ô2Ø$Ô.¨yÔ9Ø!¥# f¤m°J°Y°JÔ&?Ñ"@Ô"@Å3ÀvÄ}ÐUdÐW`ÐcdÑWdÐUdÔGeÑCfÔCfÐ"fÔgØ+,ðñ ô ðð ð r   F)r6   r7   Úlenrf  Ú
num_stagesrD   r   Úlinspacer  rÐ   r   rP  rQ  ÚstagesÚgradient_checkpointing)rC   rD   ri  rh  rE   s    ``@€r    r7   zSwin2SREncoder.__init__j  sÇ   øøøø€ Ý‰Œ×ÒÑÔÐÝ˜fœmÑ,Ô,ˆŒØˆŒØlÐl¥¤°°6Ô3HÍ#ÈfÌmÑJ\ÔJ\ÐejÐ!kÑ!kÔ!kÐlÑlÔlˆÝ”mðð ð ð ð ð õ "' t¤Ñ!7Ô!7ðñ ô ñ
ô 
ˆŒð ',ˆÔ#Ð#Ð#r   FTr   r~   r¥   NÚoutput_hidden_statesÚreturn_dictrG   c                 óV  — d}|rdnd }|rdnd }|r||fz  }t          | j        ¦  «        D ]O\  }	}
 |
|||¦  «        }|d         }|d         }|d         |d         f}||fz  }|r||fz  }|r||dd …         z  }ŒP|st          d„ |||fD ¦   «         ¦  «        S t          |||¬¦  «        S )	Nr   r   r   r§   r#   r"   c              3   ó   K  — | ]}|®|V — Œ	d S rI   r   )r  Úvs     r    ú	<genexpr>z)Swin2SREncoder.forward.<locals>.<genexpr>Ÿ  s(   è è € ÐmÐm˜qÐ_`Ð_l˜Ð_lÐ_lÐ_lÐ_lÐmÐmr   ©r   r   r   )rZ  rm  r   r   )rC   r   r~   r¥   ro  rp  Úall_input_dimensionsÚall_hidden_statesÚall_self_attentionsrJ  Ústage_modulerD  rK   s                r    rL   zSwin2SREncoder.forward€  s,  € ð  "ÐØ"6Ð@˜B˜B¸DÐØ$5Ð?˜b˜b¸4Ðàð 	2Ø -Ð!1Ñ1Ðå(¨¬Ñ5Ô5ð 	9ð 	9‰OˆAˆ|Ø(˜L¨Ð8HÐJ[Ñ\Ô\ˆMà)¨!Ô,ˆMØ -¨aÔ 0Ðà 1°"Ô 5Ð7HÈÔ7LÐMÐØ Ð%5Ð$7Ñ7Ð à#ð 6Ø! mÐ%5Ñ5Ð!à ð 9Ø# }°Q°R°RÔ'8Ñ8Ð#øàð 	nÝÐmÐm ]Ð4EÐGZÐ$[ÐmÑmÔmÑmÔmÐmå#Ø+Ø+Ø*ð
ñ 
ô 
ð 	
r   )FFT)r   r   r   r7   r   rN   r   rd   rÙ   r   rL   rO   rP   s   @r    r_  r_  i  s²   ø€ € € € € ð,ð ,ð ,ð ,ð ,ð4 */Ø,1Ø#'ð%
ð %
à”|ð%
ð    S œ/ð%
ð   $™;ð	%
ð
 # T™kð%
ð ˜D‘[ð%
ð 
Ð%Ñ	%ð%
ð %
ð %
ð %
ð %
ð %
ð %
ð %
r   r_  c                   ód   ‡ — 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                 ón  •— t          ¦   «                              |¦  «         t          |t          j        t          j        f¦  «        rIt          j        |j        | j	        j
        ¬¦  «         |j        �t          j        |j        ¦  «         dS dS t          |t          ¦  «        ryt          j        |j        t!          j        d¦  «        ¦  «         |                     ¦   «         \  }}t          j        |j        |¦  «         t          j        |j        |¦  «         dS t          |t,          ¦  «        r€|j	        j        dk    r=|j	        j        dk    r-t3          j        g d¢¦  «                             dddd¦  «        }nt3          j        dddd¦  «        }t          j        |j        |¦  «         dS dS )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°  sŽ  ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�rœy­"¬)Ð4Ñ5Ô5ð 	*ÝÔ˜vœ}°$´+Ô2OÐPÑPÔPÐPØŒ{Ð&Ý”˜FœKÑ(Ô(Ð(Ð(Ð(ð 'Ð&å˜Õ 4Ñ5Ô5ð 
	*ÝŒN˜6Ô-­t¬x¸©|¬|Ñ<Ô<Ð<Ø=C×=aÒ=aÑ=cÔ=cÑ:Ð!Ð#:ÝŒJ�vÔ3Ð5JÑKÔKÐKÝŒJ�vÔ5Ð7NÑOÔOÐOÐOÐOÝ˜¥Ñ-Ô-ð 	*ØŒ}Ô)¨QÒ.Ð.°6´=Ô3QÐUVÒ3VÐ3VÝ”|Ð$<Ð$<Ð$<Ñ=Ô=×BÒBÀ1ÀaÈÈAÑNÔN��å”{ 1 a¨¨AÑ.Ô.�ÝŒ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    r{  r{  ¨  so   ø€ € € € € € àÐÐÑØ!ÐØ$€OØ!ÐØ&*Ð#à€U„]�_„_ð*ð *ð *ð *ñ „_ð*ð *ð *ð *ð *r   r{  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    r8|j        dk    r-t          j        g d¢¦  «                             dddd¦  «        }nt          j        dddd¦  «        }|  	                    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¦  «        | _        |                      ¦   «          d S )	Nr   r€  r   rŒ  FrŽ   )ri  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   rW  Úconv_after_bodyÚ	post_init)rC   rD   rŒ  rE   s      €r    r7   zSwin2SRModel.__init__Ç  sW  ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒàÔ !Ò#Ð#¨Ô(?À1Ò(DÐ(DÝ”<Ð 8Ð 8Ð 8Ñ9Ô9×>Ò>¸qÀ!ÀQÈÑJÔJˆDˆDå”;˜q ! Q¨Ñ*Ô*ˆDØ×Ò˜V T°eÐÑ<Ô<Ð<àÔ)ˆŒå!#¤¨6Ô+>ÀÔ@PÐRSÐUVÐXYÑ!ZÔ!ZˆÔÝ+¨FÑ3Ô3ˆŒÝ% f¸¼Ô8XÔ8kÐlÑlÔlˆŒåœ fÔ&6¸FÔ<QÐRÑRÔRˆŒÝ5°fÑ=Ô=ˆÔÝ!œy¨Ô)9¸6Ô;KÈQÐPQÐSTÑUÔUˆÔð 	�ŠÑÔÐÐÐr   c                 ó   — | j         j        S rI   )rJ   r9   r	  s    r    Úget_input_embeddingsz!Swin2SRModel.get_input_embeddingsÞ  s   € ØŒÔ/Ð/r   c                 ó,  — |                      ¦   «         \  }}}}| j        j        }|||z  z
  |z  }|||z  z
  |z  }t          j                             |d|d|fd¦  «        }| 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Ñˆˆ1ˆf�eð ”kÔ-ˆØ(¨6°KÑ+?Ñ?À;ÑNÐØ'¨%°+Ñ*=Ñ=ÀÑLÐÝ”}×(Ò(¨¸Ð;KÈQÐPaÐ7bÐdmÑnÔnˆð Œy�|Š| <Ô#6¸lÔ>Pˆ|ÑQÔQˆØ$ tÑ+¨t¬~Ñ=ˆàÐr   NrF   r¥   ro  rp  rG   c                 ó(  — |�|n| j         j        }|�|n| j         j        }|�|n| j         j        }|j        \  }}}}|                      |¦  «        }|                      |¦  «        }	|                      |	¦  «        \  }
}|                      |
||||¬¦  «        }|d         }|  	                    |¦  «        }|  
                    |||f¦  «        }|                      |¦  «        |	z   }|s|f|dd …         z   }|S t          ||j        |j        ¬¦  «        S )N©r¥   ro  rp  r   r   ru  )rD   r¥   ro  rp  r%   r   r–  rJ   r—  r_   rW  r˜  r	   r   r   )rC   rF   r¥   ro  rp  Úkwargsrc   r,   r-   rJ   Úembedding_outputr~   Úencoder_outputsÚsequence_outputrç   s                  r    rL   zSwin2SRModel.forwardð  sY  € ð 2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆà*Ô0Ñˆˆ1ˆf�eð ×-Ò-¨lÑ;Ô;ˆà×+Ò+¨LÑ9Ô9ˆ
Ø-1¯_ª_¸ZÑ-HÔ-HÑ*ÐÐ*àŸ,š,ØØØ/Ø!5Ø#ð 'ñ 
ô 
ˆð *¨!Ô,ˆØŸ.š.¨Ñ9Ô9ˆà×,Ò,¨_¸vÀu¸oÑNÔNˆØ×.Ò.¨Ñ?Ô?À*ÑLˆàð 	Ø%Ð'¨/¸!¸"¸"Ô*=Ñ=ˆFàˆMåØ-Ø)Ô7Ø&Ô1ð
ñ 
ô 
ð 	
r   )NNN)r   r   r   r7   r›  r   r   r   r   rÙ   r   r	   rL   rO   rP   s   @r    r‰  r‰  Å  sÊ   ø€ € € € € ðð ð ð ð ð.0ð 0ð 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                 ó2  •— t          ¦   «                              ¦   «          || _        ||dz
  z  dk    r�t          t	          t          j        |¦  «        ¦  «        ¦  «        D ]_}|                      d|› �t          j	        |d|z  ddd¦  «        ¦  «         |                      d|› �t          j
        d¦  «        ¦  «         Œ`d S |dk    r;t          j	        |d|z  ddd¦  «        | _        t          j
        d¦  «        | _        d S t          d	|› d
�¦  «        ‚)Nr   r   Úconvolution_rr   r   Úpixelshuffle_r"   é	   zScale z/ is not supported. Supported scales: 2^n and 3.)r6   r7   ÚscalerQ  rd   r¬   rË   Ú
add_moduler   r\   ÚPixelShuffleÚconvolutionÚpixelshuffler‘   )rC   r­  Únum_featuresrJ  rE   s       €r    r7   zUpsample.__init__+  s)  ø€ Ý‰Œ×ÒÑÔÐàˆŒ
Ø�U˜Q‘YÑ AÒ%Ð%å�3�tœy¨Ñ/Ô/Ñ0Ô0Ñ1Ô1ð Ið I�Ø—’Ð 2¨qÐ 2Ð 2µB´I¸lÈAÐP\ÑL\Ð^_ÐabÐdeÑ4fÔ4fÑgÔgÐgØ—’Ð 3°Ð 3Ð 3µR´_ÀQÑ5GÔ5GÑHÔHÐHÐHðIð Ið �aŠZˆZÝ!œy¨°q¸<Ñ7GÈÈAÈqÑQÔQˆDÔÝ "¤°Ñ 2Ô 2ˆDÔÐÐåÐ\ eÐ\Ð\Ð\Ñ]Ô]Ð]r   c                 óŽ  — | j         | j         dz
  z  dk    ryt          t          t          j        | j         ¦  «        ¦  «        ¦  «        D ]D} |                      d|› �¦  «        |¦  «        } |                      d|› �¦  «        |¦  «        }ŒEn5| j         dk    r*|                      |¦  «        }|                      |¦  «        }|S )Nr   r   rª  r«  r   )r­  rQ  rd   r¬   rË   Ú__getattr__r°  r±  )rC   Úhidden_staterJ  s      r    rL   zUpsample.forward:  sÔ   € ØŒJ˜$œ* q™.Ñ)¨aÒ/Ð/Ý�3�tœy¨¬Ñ4Ô4Ñ5Ô5Ñ6Ô6ð Sð S�ØC˜t×/Ò/Ð0B¸qÐ0BÐ0BÑCÔCÀLÑQÔQ�ØD˜t×/Ò/Ð0CÀÐ0CÐ0CÑDÔDÀ\ÑRÔR��ðSð ŒZ˜1Š_ˆ_Ø×+Ò+¨LÑ9Ô9ˆLØ×,Ò,¨\Ñ:Ô:ˆLàÐr   rk   rP   s   @r    r¨  r¨  !  sV   ø€ € € € € ðð ð^ð ^ð ^ð ^ð ^ð
ð 
ð 
ð 
ð 
ð 
ð 
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        |¦  «        | _        d S )Nr"   r   r   )r6   r7   r   r\   rT  r¯  Úpixel_shuffle)rC   r­  Úin_channelsÚout_channelsrE   s       €r    r7   zUpsampleOneStep.__init__U  sS   ø€ Ý‰Œ×ÒÑÔÐå”I˜k¨E°1©H¸Ñ+DÀaÈÈAÑNÔNˆŒ	Ýœ_¨UÑ3Ô3ˆÔÐÐr   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S rI   )rT  r¹  )rC   rc  s     r    rL   zUpsampleOneStep.forward[  s)   € Ø�IŠI�a‰LŒLˆØ×Ò˜qÑ!Ô!ˆàˆr   rk   rP   s   @r    r·  r·  G  sQ   ø€ € € € € ðð ð4ð 4ð 4ð 4ð 4ðð ð ð ð ð ð r   r·  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚPixelShuffleUpsamplerc                 ó8  •— t          ¦   «                              ¦   «          t          j        |j        |ddd¦  «        | _        t          j        d¬¦  «        | _        t          |j	        |¦  «        | _
        t          j        ||j        ddd¦  «        | _        d S ©Nr   r   Tr‹   )r6   r7   r   r\   r>   Úconv_before_upsamplerU  Ú
activationr¨  ÚupscaleÚupsamplerŠ  Úfinal_convolution©rC   rD   r²  rE   s      €r    r7   zPixelShuffleUpsampler.__init__c  s…   ø€ Ý‰Œ×ÒÑÔÐÝ$&¤I¨fÔ.>ÀÈaÐQRÐTUÑ$VÔ$VˆÔ!Ýœ,¨tÐ4Ñ4Ô4ˆŒÝ  ¤°Ñ>Ô>ˆŒÝ!#¤¨<¸Ô9PÐRSÐUVÐXYÑ!ZÔ!ZˆÔÐÐr   c                 ó®   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rI   )rÁ  rÂ  rÄ  rÅ  )rC   r¦  rc  s      r    rL   zPixelShuffleUpsampler.forwardj  sO   € Ø×%Ò% oÑ6Ô6ˆØ�OŠO˜AÑÔˆØ�MŠM˜!ÑÔˆØ×"Ò" 1Ñ%Ô%ˆàˆr   ©r   r   r   r7   rL   rO   rP   s   @r    r¾  r¾  b  sL   ø€ € € € € ð[ð [ð [ð [ð [ðð ð ð ð ð ð r   r¾  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚNearestConvUpsamplerc                 ó  •— t          ¦   «                              ¦   «          |j        dk    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¬¦  «        | _        d S )	Nrr   zNThe nearest+conv upsampler only supports an upscale factor of 4 at the moment.r   r   Tr‹   rM  rN  )r6   r7   rÃ  r‘   r   r\   r>   rÁ  rU  rÂ  Úconv_up1Úconv_up2Úconv_hrrŠ  rÅ  ÚlrelurÆ  s      €r    r7   zNearestConvUpsampler.__init__t  sí   ø€ Ý‰Œ×ÒÑÔÐØŒ>˜QÒÐÝÐmÑnÔnÐnå$&¤I¨fÔ.>ÀÈaÐQRÐTUÑ$VÔ$VˆÔ!Ýœ,¨tÐ4Ñ4Ô4ˆŒÝœ	 ,°¸aÀÀAÑFÔFˆŒÝœ	 ,°¸aÀÀAÑFÔFˆŒÝ”y ¨|¸QÀÀ1ÑEÔEˆŒÝ!#¤¨<¸Ô9PÐRSÐUVÐXYÑ!ZÔ!ZˆÔÝ”\°¸dÐCÑCÔCˆŒ
ˆ
ˆ
r   c           	      ó  — |                       |¦  «        }|                      |¦  «        }|                      |                      t          j        j                             |dd¬¦  «        ¦  «        ¦  «        }|                      |                      t          j        j                             |dd¬¦  «        ¦  «        ¦  «        }|  	                    |                      |  
                    |¦  «        ¦  «        ¦  «        }|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ÔDˆØŸ/š/¨/Ñ:Ô:ˆØŸ*š*Ø�MŠM�%œ(Ô-×9Ò9¸/ÐXYÐ`iÐ9ÑjÔjÑkÔkñ
ô 
ˆð Ÿ*š*Ø�MŠM�%œ(Ô-×9Ò9¸/ÐXYÐ`iÐ9ÑjÔjÑkÔkñ
ô 
ˆð ×/Ò/°·
²
¸4¿<º<ÈÑ;XÔ;XÑ0YÔ0YÑZÔZˆØÐr   rÈ  rP   s   @r    rÊ  rÊ  s  sL   ø€ € € € € ðDð Dð Dð Dð 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¦  «        | _        d S rÀ  )r6   r7   rÃ  r   r\   r.   Úconv_bicubicr>   rÁ  rU  rÂ  Úconv_auxr™   Úconv_after_auxr¨  rÄ  rŠ  rÅ  rÆ  s      €r    r7   z!PixelShuffleAuxUpsampler.__init__�  sý   ø€ Ý‰Œ×ÒÑÔÐà”~ˆŒÝœI fÔ&9¸<ÈÈAÈqÑQÔQˆÔÝ$&¤I¨fÔ.>ÀÈaÐQRÐTUÑ$VÔ$VˆÔ!Ýœ,¨tÐ4Ñ4Ô4ˆŒÝœ	 ,°Ô0CÀQÈÈ1ÑMÔMˆŒÝ œm­B¬I°a¸ÀqÈ!ÈQÑ,OÔ,OÕQSÔQ]ÐfjÐQkÑQkÔQkÑlÔlˆÔÝ  ¤°Ñ>Ô>ˆŒÝ!#¤¨<¸Ô9PÐRSÐUVÐXYÑ!ZÔ!ZˆÔÐÐr   c                 ó¾  — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        d d …d d …d || j        z  …d || j        z  …f         |d d …d d …d || j        z  …d || j        z  …f         z   }|                      |¦  «        }||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ÔDˆØŸ/š/¨/Ñ:Ô:ˆØ�mŠm˜OÑ,Ô,ˆØ×-Ò-¨cÑ2Ô2ˆà�MŠM˜/Ñ*Ô*¨1¨1¨1¨a¨a¨aÐ1H°6¸D¼LÑ3HÐ1HÐJ`ÈEÐTXÔT`ÑL`ÐJ`Ð+`ÔaØ�a�a�a˜˜˜Ð3˜f t¤|Ñ3Ð3Ð5K°u¸t¼|Ñ7KÐ5KÐKÔLñMð 	ð ×/Ò/°Ñ@Ô@ˆà˜sÐ"Ð"r   rÈ  rP   s   @r    r×  r×  Ž  sL   ø€ € € € € ð
[ð 
[ð 
[ð 
[ð 
[ð#ð #ð #ð #ð #ð #ð #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                 óD  •— t          ¦   «                              |¦  «         t          |¦  «        | _        |j        | _        |j        | _        d}| j        dk    rt          ||¦  «        | _        nš| j        dk    rt          ||¦  «        | _        ny| j        dk    r&t          |j        |j
        |j        ¦  «        | _        nH| j        dk    rt          ||¦  «        | _        n't          j        |j
        |j        ddd¦  «        | _        |                      ¦   «          d S )Né@   r±  Úpixelshuffle_auxÚpixelshuffledirectúnearest+convr   r   )r6   r7   r‰  r|  Ú	upsamplerrÃ  r¾  rÄ  r×  r·  r>   rŠ  rÊ  r   r\   rÅ  r™  rÆ  s      €r    r7   z'Swin2SRForImageSuperResolution.__init__°  s  ø€ Ý‰Œ×Ò˜Ñ Ô Ð å# FÑ+Ô+ˆŒØÔ)ˆŒØ”~ˆŒð ˆØŒ>˜^Ò+Ð+Ý1°&¸,ÑGÔGˆDŒMˆMØŒ^Ð1Ò1Ð1Ý4°V¸\ÑJÔJˆDŒMˆMØŒ^Ð3Ò3Ð3å+¨F¬N¸FÔ<LÈfÔNeÑfÔfˆDŒMˆMØŒ^˜~Ò-Ð-å0°¸ÑFÔFˆDŒMˆMõ &(¤Y¨vÔ/?ÀÔAXÐZ[Ð]^Ð`aÑ%bÔ%bˆDÔ"ð 	�ŠÑÔÐÐÐr   NrF   Úlabelsr¥   ro  rp  rG   c                 ó  — |�|n| j         j        }d}|�t          d¦  «        ‚|j        dd…         \  }}	| j         j        dk    r5t
          j                             ||| j        z  |	| j        z  fdd¬¦  «        }
|  	                    ||||¬¦  «        }|d	         }| j        d
v r|  
                    |¦  «        }n[| j        dk    r8|  
                    ||
||	¦  «        \  }}|| j	        j        z  | j	        j        z   }n||                      |¦  «        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   n|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   rp  ÚNotImplementedErrorr%   ræ  r   ry   rÔ  rÃ  r|  rÄ  r•  rŒ  rÅ  r
   r   r   )rC   rF   rç  r¥   ro  rp  r£  rê  r,   r-   rÝ  r¾   r¦  rÕ  rÞ  rç   s                   r    rL   z&Swin2SRForImageSuperResolution.forwardÊ  sñ  € ðN &1Ð%<�k�kÀ$Ä+ÔBYˆàˆØÐÝ%Ð&OÑPÔPÐPà$Ô*¨1¨2¨2Ô.‰ˆ�àŒ;Ô Ð$6Ò6Ð6Ý”m×/Ò/ØØ˜tœ|Ñ+¨U°T´\Ñ-AÐBØØ#ð	 0ñ ô ˆGð —,’,ØØ/Ø!5Ø#ð	 ñ 
ô 
ˆð " !œ*ˆàŒ>ÐSÐSÐSØ!Ÿ]š]¨?Ñ;Ô;ˆNˆNØŒ^Ð1Ò1Ð1Ø"&§-¢-°ÀÈ&ÐRWÑ"XÔ"XÑˆN˜CØ˜œÔ.Ñ.°´Ô1BÑBˆCˆCà)¨D×,BÒ,BÀ?Ñ,SÔ,SÑSˆNà'¨$¬,Ô*@Ñ@À4Ä<ÔCTÑTˆØ'¨¨¨¨1¨1¨1Ð.E°¸¼Ñ0EÐ.EÐG]ÈÐQUÔQ]ÑI]ÐG]Ð(]Ô^ˆàð 	FØ$Ð&¨°°°¬Ñ4ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸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
àÔ'¨$Ñ.ðS
ð Ô  4Ñ'ðS
ð   $™;ð	S
ð
 # T™kðS
ð ˜D‘[ðS
ð 
Ð+Ñ	+ðS
ð S
ð S
ñ „^ðS
ð S
ð S
ð S
ð S
r   rà  )rà  r‰  r{  )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  rG  r_  r{  r‰  r¨  r·  r¾  rÊ  r×  rà  Ú__all__r   r   r    ú<module>rù     s‚  ðð )Ð (à Ð Ð Ð Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ -Ð -Ð -Ð -Ð -Ð -Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0ð 
ˆÔ	˜HÑ	%Ô	%€ð €ððñ ô ð
 ð7ð 7ð 7ð 7ð 7˜;ñ 7ô 7ñ „ñô ð7ð	ð 	ð 	ðð ð ð-ð -ð -ð -ð -˜œ	ñ -ô -ð -ð<-ð -ð -ð -ð -˜RœYñ -ô -ð -ð6ð ð ð ð ˜rœyñ ô ð ð3ð 3ð 3ð 3ð 3˜"œ)ñ 3ô 3ð 3ðnE>ð E>ð E>ð E>ð E>˜2œ9ñ E>ô E>ð E>ðR
ð 
ð 
ð 
ð 
˜œ	ñ 
ô 
ð 
ðð ð ð ð �r”yñ ô ð ð6ð ð ð ð ˜"œ)ñ ô ð ð 	ð 	ð 	ð 	ð 	�B”Iñ 	ô 	ð 	ð%ð %ð %ð %ð %�b”iñ %ô %ð %ð2tð tð tð tð t�2”9ñ tô tð tðnAð Að Að Að AÐ-ñ Aô Að AðH<
ð <
ð <
ð <
ð <
�R”Yñ <
ô <
ð <
ð~ ð*ð *ð *ð *ð *˜_ñ *ô *ñ „ð*ð8 ðX
ð X
ð X
ð X
ð X
Ð)ñ X
ô X
ñ „ðX
ðv#ð #ð #ð #ð #ˆrŒyñ #ô #ð #ðLð ð ð ð �b”iñ ô ð ð6ð ð ð ð ˜BœIñ ô ð ð"ð ð ð ð ˜2œ9ñ ô ð ð6#ð #ð #ð #ð #˜rœyñ #ô #ð #ð8 €ððñ ô ð
o
ð o
ð o
ð o
ð o
Ð%;ñ o
ô o
ñô ð
o
ðd WÐ
VÐ
V€€€r   