
    fTh              	          S r SSKrSSKrSSKJr  SSKJrJrJ	r	  SSK
r
SSKr
SSK
Jr  SSKJr  SSKJrJr  SS	KJr  SS
KJrJrJr  SSKJrJrJr  SSKJr  \R<                  " \5      r \ " S S\5      5       r!S r"S r#SDS\
RH                  S\%S\&S\
RH                  4S jjr' " S S\RP                  5      r) " S S\RP                  5      r* " S S\RP                  5      r+ " S S\RP                  5      r, " S S \RP                  5      r- " S! S"\RP                  5      r. " S# S$\RP                  5      r/ " S% S&\RP                  5      r0 " S' S(\RP                  5      r1 " S) S*\RP                  5      r2 " S+ S,\RP                  5      r3 " S- S.\RP                  5      r4 " S/ S0\RP                  5      r5\ " S1 S2\5      5       r6\ " S3 S4\65      5       r7 " S5 S6\RP                  5      r8 " S7 S8\RP                  5      r9 " S9 S:\RP                  5      r: " S; S<\RP                  5      r; " S= S>\RP                  5      r<\" S?S@9 " SA SB\65      5       r=/ SCQr>g)Ez"PyTorch Swin2SR Transformer model.    N)	dataclass)OptionalTupleUnion)nn   )ACT2FN)BaseModelOutputImageSuperResolutionOutput)PreTrainedModel) find_pruneable_heads_and_indicesmeshgridprune_linear_layer)ModelOutputauto_docstringlogging   )Swin2SRConfigc                       \ rS rSr% SrSr\\R                     \	S'   Sr
\\\R                        \	S'   Sr\\\R                        \	S'   Srg)Swin2SREncoderOutput%   aO  
Swin2SR encoder's outputs, with potential hidden states and attentions.

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

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

        Attentions weights after the attention softmax, used to compute the weighted average in the self-attention
        heads.
Nlast_hidden_statehidden_states
attentions )__name__
__module____qualname____firstlineno____doc__r   r   torchFloatTensor__annotations__r   r   r   __static_attributes__r       d/var/www/auris/envauris/lib/python3.13/site-packages/transformers/models/swin2sr/modeling_swin2sr.pyr   r   %   sS    & 6:x 1 1298<M8E%"3"345<59Ju00129r%   r   c                     U R                   u  p#pEU R                  X#U-  XU-  X5      n U R                  SSSSSS5      R                  5       R                  SXU5      nU$ )z*
Partitions the given input into windows.
r   r   r            shapeviewpermute
contiguous)input_featurewindow_size
batch_sizeheightwidthnum_channelswindowss          r&   window_partitionr8   @   so     /<.A.A+J!&&k);8LkM ##Aq!Q15@@BGGKfrsGNr%   c                     U R                   S   nU R                  SX!-  X1-  XU5      n U R                  SSSSSS5      R                  5       R                  SX#U5      n U $ )z7
Merges windows to produce higher resolution features.
r+   r   r   r   r(   r)   r*   r,   )r7   r2   r4   r5   r6   s        r&   window_reverser:   M   se     ==$Lll2v4e6JKfrsGooaAq!Q/::<AA"fUabGNr%   input	drop_probtrainingreturnc                    US:X  d  U(       d  U $ SU-
  nU R                   S   4SU R                  S-
  -  -   nU[        R                  " X@R                  U R
                  S9-   nUR                  5         U R                  U5      U-  nU$ )a*  
Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).

Comment by Ross Wightman: This is the same as the DropConnect impl I created for EfficientNet, etc networks,
however, the original name is misleading as 'Drop Connect' is a different form of dropout in a separate paper...
See discussion: https://github.com/tensorflow/tpu/issues/494#issuecomment-532968956 ... I've opted for changing the
layer and argument names to 'drop path' rather than mix DropConnect as a layer name and use 'survival rate' as the
argument.
        r   r   )r   )dtypedevice)r-   ndimr!   randrA   rB   floor_div)r;   r<   r=   	keep_probr-   random_tensoroutputs          r&   	drop_pathrJ   X   s     CxII[[^

Q 77E

5ELL YYMYYy!M1FMr%   c                      ^  \ rS rSrSrSS\\   SS4U 4S jjjrS\R                  S\R                  4S jr
S\4S	 jrS
rU =r$ )Swin2SRDropPathm   zXDrop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).Nr<   r>   c                 .   > [         TU ]  5         Xl        g N)super__init__r<   )selfr<   	__class__s     r&   rQ   Swin2SRDropPath.__init__p   s    "r%   r   c                 B    [        XR                  U R                  5      $ rO   )rJ   r<   r=   rR   r   s     r&   forwardSwin2SRDropPath.forwardt   s    FFr%   c                 8    SR                  U R                  5      $ )Nzp={})formatr<   rR   s    r&   
extra_reprSwin2SRDropPath.extra_reprw   s    }}T^^,,r%   )r<   rO   )r   r   r   r   r    r   floatrQ   r!   TensorrW   strr\   r$   __classcell__rS   s   @r&   rL   rL   m   sQ    b#(5/ #T # #GU\\ Gell G-C - -r%   rL   c                   r   ^  \ rS rSrSrU 4S jrS\\R                     S\	\R                     4S jrSrU =r$ )Swin2SREmbeddings{   z7
Construct the patch and optional position embeddings.
c                   > [         TU ]  5         [        U5      U l        U R                  R                  nUR
                  (       a?  [        R                  " [        R                  " SUS-   UR                  5      5      U l        OS U l        [        R                  " UR                  5      U l        UR                  U l        g )Nr   )rP   rQ   Swin2SRPatchEmbeddingspatch_embeddingsnum_patchesuse_absolute_embeddingsr   	Parameterr!   zeros	embed_dimposition_embeddingsDropouthidden_dropout_probdropoutr2   )rR   configri   rS   s      r&   rQ   Swin2SREmbeddings.__init__   s     6v >++77))')||EKK;QR?TZTdTd4e'fD$'+D$zz&"<"<=!--r%   pixel_valuesr>   c                     U R                  U5      u  p#U R                  b  X R                  -   nU R                  U5      nX#4$ rO   )rh   rn   rq   )rR   rt   
embeddingsoutput_dimensionss       r&   rW   Swin2SREmbeddings.forward   sF    (,(=(=l(K%
##/#&>&>>J\\*-
,,r%   )rq   rh   rn   r2   )r   r   r   r   r    rQ   r   r!   r"   r   r_   rW   r$   ra   rb   s   @r&   rd   rd   {   s9    .-HU->->$? -E%,,DW - -r%   rd   c                   |   ^  \ rS rSrSU 4S jjrS\\R                     S\\R                  \\
   4   4S jrSrU =r$ )rg      c                 (  > [         TU ]  5         UR                  nUR                  UR                  pT[        U[        R                  R                  5      (       a  UOXD4n[        U[        R                  R                  5      (       a  UOXU4nUS   US   -  US   US   -  /nX`l	        US   US   -  U l
        [        R                  " X1R                  XUS9U l        U(       a&  [        R                  " UR                  5      U l        g S U l        g )Nr   r   )kernel_sizestride)rP   rQ   rm   
image_size
patch_size
isinstancecollectionsabcIterablepatches_resolutionri   r   Conv2d
projection	LayerNorm	layernorm)rR   rr   normalize_patchesr6   r~   r   r   rS   s          r&   rQ   Swin2SRPatchEmbeddings.__init__   s    ''!'!2!2F4E4EJ#-j+//:R:R#S#SZZdYq
#-j+//:R:R#S#SZZdYq
(mz!}<jmzZ[}>\]"4-a03Ea3HH))L2B2BPZn;Lf&6&67RVr%   rv   r>   c                     U R                  U5      nUR                  u    p#nX44nUR                  S5      R                  SS5      nU R                  b  U R	                  U5      nX4$ )Nr(   r   )r   r-   flatten	transposer   )rR   rv   _r4   r5   rw   s         r&   rW   Swin2SRPatchEmbeddings.forward   sh    __Z0
(..1e#O''*44Q:
>>%
3J,,r%   )r   ri   r   r   )T)r   r   r   r   rQ   r   r!   r"   r   r_   intrW   r$   ra   rb   s   @r&   rg   rg      sA    W	-(5+<+<"= 	-%V[\_V`H`Ba 	- 	-r%   rg   c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )Swin2SRPatchUnEmbeddings   zImage to Patch Unembeddingc                 D   > [         TU ]  5         UR                  U l        g rO   )rP   rQ   rm   )rR   rr   rS   s     r&   rQ   !Swin2SRPatchUnEmbeddings.__init__   s    ))r%   c                     UR                   u  p4nUR                  SS5      R                  X0R                  US   US   5      nU$ )Nr   r(   r   )r-   r   r.   rm   )rR   rv   x_sizer3   height_widthr6   s         r&   rW    Swin2SRPatchUnEmbeddings.forward   sK    1;1A1A.
,))!Q/44ZQWXYQZ\bcd\ef
r%   )rm   	r   r   r   r   r    rQ   rW   r$   ra   rb   s   @r&   r   r      s    %*
 r%   r   c            	          ^  \ rS rSrSr\R                  4S\\   S\S\R                  SS4U 4S jjjr
S	 rS
\R                  S\\\4   S\R                  4S jrSrU =r$ )Swin2SRPatchMerging   a  
Patch Merging Layer.

Args:
    input_resolution (`Tuple[int]`):
        Resolution of input feature.
    dim (`int`):
        Number of input channels.
    norm_layer (`nn.Module`, *optional*, defaults to `nn.LayerNorm`):
        Normalization layer class.
input_resolutiondim
norm_layerr>   Nc                    > [         TU ]  5         Xl        X l        [        R
                  " SU-  SU-  SS9U l        U" SU-  5      U l        g )Nr)   r(   Fbias)rP   rQ   r   r   r   Linear	reductionnorm)rR   r   r   r   rS   s       r&   rQ   Swin2SRPatchMerging.__init__   sE     01s7AG%@q3w'	r%   c                     US-  S:H  =(       d    US-  S:H  nU(       a-  SSSUS-  SUS-  4n[         R                  R                  X5      nU$ )Nr(   r   r   )r   
functionalpad)rR   r1   r4   r5   
should_pad
pad_valuess         r&   	maybe_padSwin2SRPatchMerging.maybe_pad   sS    qjAo:519>
Q519a!<JMM--mHMr%   r1   input_dimensionsc                    Uu  p4UR                   u  pVnUR                  XSXG5      nU R                  XU5      nUS S 2SS S2SS S2S S 24   nUS S 2SS S2SS S2S S 24   n	US S 2SS S2SS S2S S 24   n
US S 2SS S2SS S2S S 24   n[        R                  " XX/S5      nUR                  USSU-  5      nU R                  U5      nU R                  U5      nU$ )Nr   r(   r   r+   r)   )r-   r.   r   r!   catr   r   )rR   r1   r   r4   r5   r3   r   r6   input_feature_0input_feature_1input_feature_2input_feature_3s               r&   rW   Swin2SRPatchMerging.forward   s   ((5(;(;%
%**:uS}eD'14a4Aq(89'14a4Aq(89'14a4Aq(89'14a4Aq(89		?_"fhjk%**:r1|;KL}5		-0r%   )r   r   r   r   )r   r   r   r   r    r   r   r   r   ModulerQ   r   r!   r_   rW   r$   ra   rb   s   @r&   r   r      s|    
 XZWcWc (s (# (299 (hl ( (U\\ U3PS8_ Y^YeYe  r%   r   c                      ^  \ rS rSrSS/4U 4S jjrS r   SS\R                  S\\R                     S\\R                     S\\
   S	\\R                     4
S
 jjrSrU =r$ )Swin2SRSelfAttention   r   c           
      
  > [         TU ]  5         X#-  S:w  a  [        SU SU S35      eX0l        [	        X#-  5      U l        U R                  U R
                  -  U l        [        U[        R                  R                  5      (       a  UOXD4U l        XPl        [        R                  " [        R                   " S[        R"                  " USS45      -  5      5      U l        [        R&                  " [        R(                  " SSS	S
9[        R*                  " S	S9[        R(                  " SUSS
95      U l        [        R.                  " U R                  S   S-
  * U R                  S   [        R0                  S9R3                  5       n[        R.                  " U R                  S   S-
  * U R                  S   [        R0                  S9R3                  5       n[        R4                  " [7        Xg/SS95      R9                  SSS5      R;                  5       R=                  S5      nUS   S:  a;  US S 2S S 2S S 2S4==   US   S-
  -  ss'   US S 2S S 2S S 2S4==   US   S-
  -  ss'   OTUS:  aN  US S 2S S 2S S 2S4==   U R                  S   S-
  -  ss'   US S 2S S 2S S 2S4==   U R                  S   S-
  -  ss'   US-  n[        R>                  " U5      [        R@                  " [        RB                  " U5      S-   5      -  [D        R@                  " S5      -  nURG                  [I        U R,                  RK                  5       5      RL                  5      nU RO                  SUSS9  [        R.                  " U R                  S   5      n	[        R.                  " U R                  S   5      n
[        R4                  " [7        X/SS95      n[        RP                  " US5      nUS S 2S S 2S 4   US S 2S S S 24   -
  nUR9                  SSS5      R;                  5       nUS S 2S S 2S4==   U R                  S   S-
  -  ss'   US S 2S S 2S4==   U R                  S   S-
  -  ss'   US S 2S S 2S4==   SU R                  S   -  S-
  -  ss'   URS                  S5      nU RO                  SUSS9  [        R(                  " U R                  U R                  URT                  S
9U l+        [        R(                  " U R                  U R                  SS
9U l,        [        R(                  " U R                  U R                  URT                  S
9U l-        [        R\                  " UR^                  5      U l0        g )Nr   zThe hidden size (z6) is not a multiple of the number of attention heads ()
   r   r(   i   Tr   inplaceFrA   ij)indexing         ?relative_coords_table
persistentr+   relative_position_index)1rP   rQ   
ValueErrornum_attention_headsr   attention_head_sizeall_head_sizer   r   r   r   r2   pretrained_window_sizer   rk   r!   logoneslogit_scale
Sequentialr   ReLUcontinuous_position_bias_mlparangeint64r^   stackr   r/   r0   	unsqueezesignlog2absmathtonext
parametersrA   register_bufferr   sumqkv_biasquerykeyvaluero   attention_probs_dropout_probrq   )rR   rr   r   	num_headsr2   r   relative_coords_hrelative_coords_wr   coords_hcoords_wcoordscoords_flattenrelative_coordsr   rS   s                  r&   rQ   Swin2SRSelfAttention.__init__   s   ?a#C5(^_h^iijk  $- #&s#7 !558P8PP%k;??3K3KLLKS^Rl 	 '=#<<		"uzz9aQRBS7T2T(UV,.MMIIa4("''$*?3PY`eAf-
)
 "LL4+;+;A+>+B)CTEUEUVWEX`e`k`klrrt!LL4+;+;A+>+B)CTEUEUVWEX`e`k`klrrtKK"3!GRVWXWQ1Z\Yq\	 	 "!$q(!!Q1*-1G1JQ1NN-!!Q1*-1G1JQ1NN-1_!!Q1*-1A1A!1Dq1HH-!!Q1*-1A1A!1Dq1HH-"JJ,-

599EZ;[^a;a0bbeienenopeqq 	 !6 8 8d>_>_>j>j>l9m9s9s t46KX]^ << 0 0 34<< 0 0 34Xx&:TJKvq1(At4~aqj7QQ)11!Q:EEG1a D$4$4Q$7!$;; 1a D$4$4Q$7!$;; 1a A(8(8(;$;a$?? "1"5"5b"968O\abYYt1143E3EFOO\
99T//1C1C%PYYt1143E3EFOO\
zz&"E"EFr%   c                     UR                  5       S S U R                  U R                  4-   nUR                  U5      nUR	                  SSSS5      $ )Nr+   r   r(   r   r   )sizer   r   r.   r/   )rR   xnew_x_shapes      r&   transpose_for_scores)Swin2SRSelfAttention.transpose_for_scores8  sL    ffhsmt'?'?AYAY&ZZFF;yyAq!$$r%   r   attention_mask	head_maskoutput_attentionsr>   c                 j   UR                   u  pVnU R                  U5      nU R                  U R                  U5      5      n	U R                  U R	                  U5      5      n
U R                  U5      n[
        R                  R                  USS9[
        R                  R                  U	SS9R                  SS5      -  n[        R                  " U R                  [        R                  " S5      S9R                  5       nX-  nU R                  U R                   5      R#                  SU R$                  5      nXR&                  R#                  S5         R#                  U R(                  S   U R(                  S   -  U R(                  S   U R(                  S   -  S5      nUR+                  SSS5      R-                  5       nS	[        R.                  " U5      -  nXR1                  S5      -   nUb  UR                   S   nUR#                  UU-  UU R$                  Xf5      UR1                  S5      R1                  S5      -   nXR1                  S5      R1                  S5      -   nUR#                  SU R$                  Xf5      n[
        R                  R3                  USS9nU R5                  U5      nUb  UU-  n[        R6                  " UU
5      nUR+                  SSSS
5      R-                  5       nUR9                  5       S S U R:                  4-   nUR#                  U5      nU(       a  UU4nU$ U4nU$ )Nr+   r   g      Y@)maxr   r   r(      r   )r-   r   r   r   r   r   r   	normalizer   r!   clampr   r   r   expr   r   r.   r   r   r2   r/   r0   sigmoidr   softmaxrq   matmulr   r   )rR   r   r   r   r   r3   r   r6   mixed_query_layer	key_layervalue_layerquery_layerattention_scoresr   relative_position_bias_tablerelative_position_bias
mask_shapeattention_probscontext_layernew_context_layer_shapeoutputss                        r&   rW   Swin2SRSelfAttention.forward=  s    )6(;(;%
 JJ}5--dhh}.EF	//

=0IJ//0AB ==22;B2G"--JaJa2 Kb K

)B
 kk$"2"28LMQQS+9'+'H'HIcIc'd'i'i(((
$ ">>Z>Z>_>_`b>c!d!i!iQ$"2"21"55t7G7G7JTM]M]^_M`7`bd"
 "8!?!?1a!H!S!S!U!#emm4J&K!K+.N.Nq.QQ%'--a0J/44j(*d6N6NPS ((+55a8 9  02J2J12M2W2WXY2ZZ/44R9Q9QSV\ --//0@b/I ,,7  -	9O_kB%--aAq9DDF"/"4"4"6s";t?Q?Q>S"S%**+BC6G=/2 O\M]r%   )r   r   r   rq   r   r   r   r   r   r   r2   NNF)r   r   r   r   rQ   r   r!   r_   r   r"   boolr   rW   r$   ra   rb   s   @r&   r   r      s    TUWXSY ;Gz% 7;15,1;||; !!2!23; E--.	;
 $D>; 
u||	; ;r%   r   c                   z   ^  \ rS rSrU 4S jrS\R                  S\R                  S\R                  4S jrSrU =r	$ )Swin2SRSelfOutputi|  c                    > [         TU ]  5         [        R                  " X"5      U l        [        R
                  " UR                  5      U l        g rO   )rP   rQ   r   r   densero   r   rq   rR   rr   r   rS   s      r&   rQ   Swin2SRSelfOutput.__init__}  s4    YYs(
zz&"E"EFr%   r   input_tensorr>   c                 J    U R                  U5      nU R                  U5      nU$ rO   r  rq   )rR   r   r  s      r&   rW   Swin2SRSelfOutput.forward  s$    

=1]3r%   r  
r   r   r   r   rQ   r!   r_   rW   r$   ra   rb   s   @r&   r  r  |  s7    G
U\\  RWR^R^  r%   r  c                      ^  \ rS rSrSU 4S jjrS r   SS\R                  S\\R                     S\\R                     S\\
   S\\R                     4
S	 jjrS
rU =r$ )Swin2SRAttentioni  c           
         > [         TU ]  5         [        UUUU[        U[        R
                  R                  5      (       a  UOXU4S9U l        [        X5      U l	        [        5       U l        g )Nrr   r   r   r2   r   )rP   rQ   r   r   r   r   r   rR   r  rI   setpruned_heads)rR   rr   r   r   r2   r   rS   s         r&   rQ   Swin2SRAttention.__init__  sa    (#0+//2J2JKK $:(A
	 (4Er%   c                 6   [        U5      S:X  a  g [        XR                  R                  U R                  R                  U R
                  5      u  p[        U R                  R                  U5      U R                  l        [        U R                  R                  U5      U R                  l        [        U R                  R                  U5      U R                  l	        [        U R                  R                  USS9U R                  l        U R                  R                  [        U5      -
  U R                  l        U R                  R                  U R                  R                  -  U R                  l        U R
                  R                  U5      U l        g )Nr   r   r   )lenr   rR   r   r   r"  r   r   r   r   rI   r  r   union)rR   headsindexs      r&   prune_headsSwin2SRAttention.prune_heads  s   u:?79900$))2O2OQUQbQb

 -TYY__eD		*499==%@		,TYY__eD		.t{{/@/@%QO )-		(E(EE
(R		%"&))"?"?$))B_B_"_		 --33E:r%   r   r   r   r   r>   c                 f    U R                  XX45      nU R                  US   U5      nU4USS  -   nU$ Nr   r   )rR   rI   )rR   r   r   r   r   self_outputsattention_outputr  s           r&   rW   Swin2SRAttention.forward  sB     yy	];;|AF#%QR(88r%   )rI   r"  rR   r   r  )r   r   r   r   rQ   r)  r!   r_   r   r"   r  r   rW   r$   ra   rb   s   @r&   r  r    sy    ";* 7;15,1
||
 !!2!23
 E--.	

 $D>
 
u||	
 
r%   r  c                   b   ^  \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )Swin2SRIntermediatei  c                   > [         TU ]  5         [        R                  " U[	        UR
                  U-  5      5      U l        [        UR                  [        5      (       a  [        UR                     U l        g UR                  U l        g rO   )rP   rQ   r   r   r   	mlp_ratior  r   
hidden_actr`   r	   intermediate_act_fnr  s      r&   rQ   Swin2SRIntermediate.__init__  sd    YYsC(8(83(>$?@
f''--'-f.?.?'@D$'-'8'8D$r%   r   r>   c                 J    U R                  U5      nU R                  U5      nU$ rO   r  r6  rV   s     r&   rW   Swin2SRIntermediate.forward  s&    

=100?r%   r9  r  rb   s   @r&   r2  r2    s(    9U\\ ell  r%   r2  c                   b   ^  \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )Swin2SROutputi  c                    > [         TU ]  5         [        R                  " [	        UR
                  U-  5      U5      U l        [        R                  " UR                  5      U l	        g rO   )
rP   rQ   r   r   r   r4  r  ro   rp   rq   r  s      r&   rQ   Swin2SROutput.__init__  sF    YYs6#3#3c#9:C@
zz&"<"<=r%   r   r>   c                 J    U R                  U5      nU R                  U5      nU$ rO   r  rV   s     r&   rW   Swin2SROutput.forward  s$    

=1]3r%   r  r  rb   s   @r&   r<  r<    s(    >
U\\ ell  r%   r<  c                      ^  \ rS rSr SU 4S jjrS\\\\4   \\\4   4   4S jrS rS r	  SS\
R                  S\\\4   S	\\
R                     S
\\   S\\
R                  \
R                  4   4
S jjrSrU =r$ )Swin2SRLayeri  c           
      ^  > [         T	U ]  5         X0l        U R                  UR                  UR                  4Xf45      u  pUS   U l        US   U l        [        UUUU R                  [        U[        R                  R                  5      (       a  UOXw4S9U l        [        R                  " X!R                  S9U l        US:  a  [!        U5      O[        R"                  " 5       U l        ['        X5      U l        [+        X5      U l        [        R                  " X!R                  S9U l        g )Nr   r   epsr@   )rP   rQ   r   _compute_window_shiftr2   
shift_sizer  r   r   r   r   	attentionr   r   layer_norm_epslayernorm_beforerL   IdentityrJ   r2  intermediater<  rI   layernorm_after)
rR   rr   r   r   r   drop_path_raterG  r   r2   rS   s
            r&   rQ   Swin2SRLayer.__init__  s    	 0"&"<"<!3!34z6N#
 'q>$Q-)((0+//2J2JKK $:(A
 !#S6K6K L<JS<P8VXVaVaVc/<#F0!||C5J5JKr%   r>   c                     [        U R                  U5       VVs/ s H  u  p4X4::  a  UOUPM     nnn[        U R                  XR5       VVVs/ s H  u  p4ocU::  a  SOUPM     nnnnXW4$ s  snnf s  snnnf Nr   )zipr   )rR   target_window_sizetarget_shift_sizerwr2   srG  s           r&   rF  "Swin2SRLayer._compute_window_shift  st    69$:O:OQc6de6ddaAFq)6de8;D<Q<QS^8rs8rWQ16aq(8r
s&& fss   A)A/c           	         U R                   S:  Gaw  [        R                  " SXS4US9n[        SU R                  * 5      [        U R                  * U R                   * 5      [        U R                   * S 5      4n[        SU R                  * 5      [        U R                  * U R                   * 5      [        U R                   * S 5      4nSnU H  nU H  n	XtS S 2XS S 24'   US-  nM     M     [        X@R                  5      n
U
R                  SU R                  U R                  -  5      n
U
R                  S5      U
R                  S5      -
  nUR                  US:g  [        S5      5      R                  US:H  [        S5      5      nU$ S nU$ )Nr   r   r   r+   r(   g      Yr@   )
rG  r!   rl   slicer2   r8   r.   r   masked_fillr^   )rR   r4   r5   rA   img_maskheight_sliceswidth_slicescountheight_slicewidth_slicemask_windows	attn_masks               r&   get_attn_maskSwin2SRLayer.get_attn_mask  s   ??Q{{Ava#8FHa$***+t'''$//)9:t&-M a$***+t'''$//)9:t&-L
 E -#/K@EQ1<=QJE $0 !.
 ,H6F6FGL',,R1A1ADDTDT1TUL$..q1L4J4J14MMI!--i1neFmLXXYbfgYginoristI  Ir%   c                     U R                   X0R                   -  -
  U R                   -  nU R                   X R                   -  -
  U R                   -  nSSSUSU4n[        R                  R                  X5      nX4$ rQ  )r2   r   r   r   )rR   r   r4   r5   	pad_right
pad_bottomr   s          r&   r   Swin2SRLayer.maybe_pad  sy    %%0@0@(@@DDTDTT	&&2B2B)BBdFVFVV
Ay!Z8
))-D((r%   r   r   r   r   c                    Uu  pVUR                  5       u  pxn	Un
UR                  XuXi5      nU R                  XU5      u  pUR                  u  ppU R                  S:  a.  [
        R                  " XR                  * U R                  * 4SS9nOUn[        XR                  5      nUR                  SU R                  U R                  -  U	5      nU R                  XUR                  S9nUb  UR                  UR                  5      nU R                  UUX4S9nUS   nUR                  SU R                  U R                  U	5      n[        UU R                  X5      nU R                  S:  a-  [
        R                  " UU R                  U R                  4SS9nOUnUS   S:  =(       d    US   S:  nU(       a  US S 2S U2S U2S S 24   R                  5       nUR                  XuU-  U	5      nU R!                  U5      nXR#                  U5      -   nU R%                  U5      nU R'                  U5      nXR#                  U R)                  U5      5      -   nU(       a	  UUS	   4nU$ U4nU$ )
Nr   )r   r(   )shiftsdimsr+   r   )r   r   r*   r   )r   r.   r   r-   rG  r!   rollr8   r2   rd  rA   r   rB   rH  r:   r0   rJ  rJ   rL  rI   rM  )rR   r   r   r   r   r4   r5   r3   r   channelsshortcutr   
height_pad	width_padshifted_hidden_stateshidden_states_windowsrc  attention_outputsr.  attention_windowsshifted_windows
was_paddedlayer_outputlayer_outputss                           r&   rW   Swin2SRLayer.forward  s    )"/"4"4"6
x  &**:uO$(NN=%$P!&3&9&9#y??Q$)JJ}FVY]YhYhXhEipv$w!$1! !11FHXHX Y 5 : :2t?O?ORVRbRb?bdl m&&zMDWDW&X	 !%:%A%ABI NN!9i + 
 -Q/,11"d6F6FHXHXZbc():D<L<Ljd ??Q %

?DOOUYUdUdCelr s /]Q&;*Q-!*;
 1!WfWfufa2G H S S U-22:~xX--.?@ >>-#@@((7{{<0$~~d6J6J<6X'YY@Q'8';< YeWfr%   )	rH  rJ   r   rL  rM  rJ  rI   rG  r2   )r@   r   r   NF)r   r   r   r   rQ   r   r   rF  rd  r   r!   r_   r   r"   r  rW   r$   ra   rb   s   @r&   rB  rB    s    qrL2'eTYZ]_bZbTcejknpsksetTtNu '
8) 26,18||8  S/8 E--.	8
 $D>8 
u||U\\)	*8 8r%   rB  c                      ^  \ rS rSrSrSU 4S jjr  SS\R                  S\\	\	4   S\
\R                     S\
\   S\\R                     4
S	 jjrS
rU =r$ )Swin2SRStageiS  z`
This corresponds to the Residual Swin Transformer Block (RSTB) in the original implementation.
c                   > [         T	U ]  5         Xl        X l        [        R
                  " [        U5       Vs/ s H)  n[        UUUUUS-  S:X  a  SOUR                  S-  US9PM+     sn5      U l	        UR                  S:X  a  [        R                  " X"SSS5      U l        OUR                  S:X  a  [        R                  " [        R                  " X"S-  SSS5      [        R                  " S	S
S9[        R                  " US-  US-  SSS5      [        R                  " S	S
S9[        R                  " US-  USSS5      5      U l        [        USS9U l        [#        U5      U l        g s  snf )Nr(   r   )rr   r   r   r   rG  r   1convr   r   3convr)   皙?Tnegative_sloper   F)r   )rP   rQ   rr   r   r   
ModuleListrangerB  r2   layersresi_connectionr   convr   	LeakyReLUrg   patch_embedr   patch_unembed)
rR   rr   r   r   depthr   rJ   r   irS   s
            r&   rQ   Swin2SRStage.__init__X  sH   mm u
 &A !%5'%&UaZqf6H6HA6M+A &

 !!W,		#Aq!4DI##w.		#axAq1C>		#(C1HaA6C>		#(CAq1DI 2&ER5f=7
s   0E,r   r   r   r   r>   c                    UnUu  pg[        U R                  5       H  u  pUb  X8   OS n
U	" XX5      nUS   nM     XgXg4nU R                  X5      nU R                  U5      nU R	                  U5      u  pX-   nX4nU(       a  UWSS  -  nU$ r,  )	enumerater  r  r  r  )rR   r   r   r   r   residualr4   r5   r  layer_modulelayer_head_maskry  rw   r   stage_outputss                  r&   rW   Swin2SRStage.forwardz  s     !((5OA.7.CilO(/mM)!,M  6 $F:**=K		-0++M:%0&:]12..Mr%   )rr   r  r   r  r  r  r0  r{  )r   r   r   r   r    rQ   r!   r_   r   r   r   r"   r  rW   r$   ra   rb   s   @r&   r}  r}  S  st     >L 26,1||  S/ E--.	
 $D> 
u||	 r%   r}  c                      ^  \ rS rSrU 4S jr    SS\R                  S\\\4   S\	\R                     S\	\   S\	\   S\	\   S	\\\4   4S
 jjrSrU =r$ )Swin2SREncoderi  c                 z  > [         TU ]  5         [        UR                  5      U l        Xl        [        R                  " SUR                  [        UR                  5      SS9 Vs/ s H  o3R                  5       PM     nn[        R                  " [        U R                  5       Vs/ s Hp  n[        UUR                  US   US   4UR                  U   UR                   U   U[        UR                  S U 5      [        UR                  S US-    5       SS9PMr     sn5      U l        SU l        g s  snf s  snf )Nr   cpu)rB   r   )rr   r   r   r  r   rJ   r   F)rP   rQ   r%  depths
num_stagesrr   r!   linspacerN  r   itemr   r  r  r}  rm   r   stagesgradient_checkpointing)rR   rr   	grid_sizer   dpr	stage_idxrS   s         r&   rQ   Swin2SREncoder.__init__  s   fmm,!&63H3H#fmmJ\ej!kl!kAvvx!klmm "'t!7 "8I !((&/lIaL%A --	2$..y9!#fmmJY&?"@3v}}UdW`cdWdGeCfg+, "8
 ',#! ms   &D3(A7D8r   r   r   r   output_hidden_statesreturn_dictr>   c                    SnU(       a  SOS nU(       a  SOS n	U(       a  X4-  n[        U R                  5       H  u  pUb  X:   OS nU R                  (       a/  U R                  (       a  U R	                  UR
                  XX5      nO	U" XX5      nUS   nUS   nUS   US   4nXr4-  nU(       a  X4-  nU(       d  M  XSS  -  n	M     U(       d  [        S XU	4 5       5      $ [        UUU	S9$ )	Nr   r   r   r   r+   r(   c              3   .   #    U  H  oc  M  Uv   M     g 7frO   r   ).0vs     r&   	<genexpr>)Swin2SREncoder.forward.<locals>.<genexpr>  s     m$[q$[s   	r   r   r   )r  r  r  r=   _gradient_checkpointing_func__call__tupler   )rR   r   r   r   r   r  r  all_input_dimensionsall_hidden_statesall_self_attentionsr  stage_moduler  ry  rw   s                  r&   rW   Swin2SREncoder.forward  s     ""6BD$5b4!11(5OA.7.CilO**t}} $ A A ))=O! !-]o q)!,M -a 0 1" 57H7LM $77 #!%55!  #QR'88#)  6, m]GZ$[mmm#++*
 	
r%   )rr   r  r  r  )NFFT)r   r   r   r   rQ   r!   r_   r   r   r   r"   r  r   r   rW   r$   ra   rb   s   @r&   r  r    s    ,4 26,1/4&*-
||-
  S/-
 E--.	-

 $D>-
 'tn-
 d^-
 
u**	+-
 -
r%   r  c                   *    \ rS rSr\rSrSrSrS r	Sr
g)Swin2SRPreTrainedModeli  swin2srrt   Tc                 :   [        U[        R                  [        R                  45      (       a  [        R                  R
                  R                  UR                  R                  U R                  R                  S9  UR                  b%  UR                  R                  R                  5         gg[        U[        R                  5      (       aJ  UR                  R                  R                  5         UR                  R                  R                  S5        gg)zInitialize the weights)stdNr   )r   r   r   r   r!   inittrunc_normal_weightdatarr   initializer_ranger   zero_r   fill_)rR   modules     r&   _init_weights$Swin2SRPreTrainedModel._init_weights  s    fryy"))455HHMM''(:(:@]@]'^{{&  &&( '--KK""$MM$$S) .r%   r   N)r   r   r   r   r   config_classbase_model_prefixmain_input_namesupports_gradient_checkpointingr  r$   r   r%   r&   r  r    s     L!$O&*#*r%   r  c                      ^  \ rS rSrU 4S jrS rS rS r\    SS\	R                  S\\	R                     S\\   S	\\   S
\\   S\\\4   4S jj5       rSrU =r$ )Swin2SRModeli  c                   > [         TU ]  U5        Xl        UR                  S:X  a;  UR                  S:X  a+  [
        R                  " / SQ5      R                  SSSS5      nO[
        R                  " SSSS5      nU R                  SUSS9  UR                  U l
        [        R                  " UR                  UR                  SSS5      U l        [        U5      U l        [#        XR                   R$                  R&                  S9U l        [        R*                  " UR                  UR,                  S9U l        [1        U5      U l        [        R                  " UR                  UR                  SSS5      U l        U R7                  5         g )	Nr   )gw#?g8EGr?gB`"?r   meanFr   )r  rD  )rP   rQ   rr   r6   num_channels_outr!   tensorr.   rl   r   	img_ranger   r   rm   first_convolutionrd   rv   r  rh   r   encoderr   rI  r   r   r  conv_after_body	post_init)rR   rr   r  rS   s      r&   rQ   Swin2SRModel.__init__  s4    !#(?(?1(D<< 89>>q!QJD;;q!Q*DVTe<))!#6+>+>@P@PRSUVXY!Z+F3%f8X8X8k8klf&6&6F<Q<QR5f=!yy)9)96;K;KQPQSTU 	r%   c                 .    U R                   R                  $ rO   )rv   rh   r[   s    r&   get_input_embeddings!Swin2SRModel.get_input_embeddings  s    ///r%   c                     UR                  5        H7  u  p#U R                  R                  U   R                  R	                  U5        M9     g)z
Prunes heads of the model. heads_to_prune: dict of {layer_num: list of heads to prune in this layer} See base
class PreTrainedModel
N)itemsr  layerrH  r)  )rR   heads_to_pruner  r'  s       r&   _prune_headsSwin2SRModel._prune_heads  s<    
 +002LELLu%//;;EB 3r%   c                 $   UR                  5       u    p#nU R                  R                  nXSU-  -
  U-  nXTU-  -
  U-  n[        R                  R                  USUSU4S5      nU R                  R                  U5      nX-
  U R                  -  nU$ )Nr   reflect)	r   rr   r2   r   r   r   r  type_asr  )	rR   rt   r   r4   r5   r2   modulo_pad_heightmodulo_pad_widthr  s	            r&   pad_and_normalizeSwin2SRModel.pad_and_normalize  s    *//11e kk--(K+??;N'+*==L}}((;KQPa7bdmn yy  .$+t~~=r%   rt   r   r   r  r  r>   c           	         Ub  UOU R                   R                  nUb  UOU R                   R                  nUb  UOU R                   R                  nU R	                  U[        U R                   R                  5      5      nUR                  u    pgnU R                  U5      nU R                  U5      n	U R                  U	5      u  pU R                  U
UUUUUS9nUS   nU R                  U5      nU R                  XU45      nU R                  U5      U	-   nU(       d  U4USS  -   nU$ [        UUR                   UR"                  S9$ )Nr   r   r  r  r   r   r  )rr   r   r  use_return_dictget_head_maskr%  r  r-   r  r  rv   r  r   r  r  r
   r   r   )rR   rt   r   r   r  r  r   r4   r5   rv   embedding_outputr   encoder_outputssequence_outputrI   s                  r&   rW   Swin2SRModel.forward&  sa    2C1N-TXT_T_TqTq$8$D $++JjJj 	 &1%<k$++B]B] &&y#dkk6H6H2IJ	*001e --l;++L9
-1__Z-H*,,/!5# ' 
 *!,..9,,_uoN..?*L%'/!"*==FM-)77&11
 	
r%   )rr   r  rv   r  r  r  r   r  )NNNN)r   r   r   r   rQ   r  r  r  r   r!   r"   r   r  r   r   r
   rW   r$   ra   rb   s   @r&   r  r    s    .0C  26,0/3&*5
''5
 E--.5
 $D>	5

 'tn5
 d^5
 
uo%	&5
 5
r%   r  c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )Upsamplei_  zUpsample module.

Args:
    scale (`int`):
        Scale factor. Supported scales: 2^n and 3.
    num_features (`int`):
        Channel number of intermediate features.
c                   > [         TU ]  5         Xl        XS-
  -  S:X  a  [        [	        [
        R                  " US5      5      5       H\  nU R                  SU 3[        R                  " USU-  SSS5      5        U R                  SU 3[        R                  " S5      5        M^     g US:X  a>  [        R                  " USU-  SSS5      U l        [        R                  " S5      U l        g [        S	U S
35      e)Nr   r   r(   convolution_r)   r   pixelshuffle_	   zScale z/ is not supported. Supported scales: 2^n and 3.)rP   rQ   scaler  r   r   r   
add_moduler   r   PixelShuffleconvolutionpixelshuffler   )rR   r  num_featuresr  rS   s       r&   rQ   Upsample.__init__i  s    
QYA%3txxq123,qc 2BIIlAP\L\^_abde4fg-s 3R__Q5GH 4 aZ!yyq<7GAqQD " 2DveW,[\]]r%   c                    U R                   U R                   S-
  -  S:X  ap  [        [        [        R                  " U R                   S5      5      5       H7  nU R                  SU 35      " U5      nU R                  SU 35      " U5      nM9     U$ U R                   S:X  a"  U R                  U5      nU R                  U5      nU$ )Nr   r   r(   r  r  r   )r  r  r   r   r   __getattr__r  r  )rR   hidden_stater  s      r&   rW   Upsample.forwardx  s    JJ$**q.)a/3txx

A678#//,qc0BCLQ#//-s0CD\R 9 	 ZZ1_++L9L,,\:Lr%   )r  r  r  r   rb   s   @r&   r  r  _  s    ^
 
r%   r  c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )UpsampleOneStepi  ai  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U ]  5         [        R                  " X!S-  U-  SSS5      U l        [        R
                  " U5      U l        g )Nr(   r   r   )rP   rQ   r   r   r  r  pixel_shuffle)rR   r  in_channelsout_channelsrS   s       r&   rQ   UpsampleOneStep.__init__  s>    IIk1H+DaAN	__U3r%   c                 J    U R                  U5      nU R                  U5      nU$ rO   r  r   )rR   r   s     r&   rW   UpsampleOneStep.forward  s$    IIaLq!r%   r  r   rb   s   @r&   r  r    s    4 r%   r  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )PixelShuffleUpsampleri  c                 ,  > [         TU ]  5         [        R                  " UR                  USSS5      U l        [        R                  " SS9U l        [        UR                  U5      U l
        [        R                  " X!R                  SSS5      U l        g Nr   r   Tr   )rP   rQ   r   r   rm   conv_before_upsampler  
activationr  upscaleupsampler  final_convolutionrR   rr   r  rS   s      r&   rQ   PixelShuffleUpsampler.__init__  sq    $&IIf.>.>aQRTU$V!,,t4 >!#<9P9PRSUVXY!Zr%   c                     U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU$ rO   )r  r  r  r  )rR   r  r   s      r&   rW   PixelShuffleUpsampler.forward  sC    %%o6OOAMM!""1%r%   )r  r  r  r  r   r   r   r   rQ   rW   r$   ra   rb   s   @r&   r  r    s    [ r%   r  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )NearestConvUpsampleri  c                   > [         TU ]  5         UR                  S:w  a  [        S5      e[        R
                  " UR                  USSS5      U l        [        R                  " SS9U l	        [        R
                  " X"SSS5      U l
        [        R
                  " X"SSS5      U l        [        R
                  " X"SSS5      U l        [        R
                  " X!R                  SSS5      U l        [        R                  " SSS9U l        g )	Nr)   zNThe nearest+conv upsampler only supports an upscale factor of 4 at the moment.r   r   Tr   r  r  )rP   rQ   r  r   r   r   rm   r  r  r  conv_up1conv_up2conv_hrr  r  lrelur  s      r&   rQ   NearestConvUpsampler.__init__  s    >>Qmnn$&IIf.>.>aQRTU$V!,,t4		,aAF		,aAFyyQ1E!#<9P9PRSUVXY!Z\\dC
r%   c           
         U R                  U5      nU R                  U5      nU R                  U R                  [        R
                  R                  R                  USSS95      5      nU R                  U R                  [        R
                  R                  R                  USSS95      5      nU R                  U R                  U R                  U5      5      5      nU$ )Nr(   nearest)scale_factormode)r  r  r  r  r!   r   r   interpolater  r  r  )rR   r  reconstructions      r&   rW   NearestConvUpsampler.forward  s    33OD///:**MM%((--99/XY`i9jk
 **MM%((--99/XY`i9jk
 //

4<<;X0YZr%   )r  r  r  r  r  r  r  r  rb   s   @r&   r  r    s    D
 
r%   r  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )PixelShuffleAuxUpsampleri  c           	      |  > [         TU ]  5         UR                  U l        [        R                  " UR
                  USSS5      U l        [        R                  " UR                  USSS5      U l        [        R                  " SS9U l
        [        R                  " X!R
                  SSS5      U l        [        R                  " [        R                  " SUSSS5      [        R                  " SS95      U l        [        UR                  U5      U l        [        R                  " X!R                   SSS5      U l        g r
  )rP   rQ   r  r   r   r6   conv_bicubicrm   r  r  r  conv_auxr   conv_after_auxr  r  r  r  r  s      r&   rQ   !PixelShuffleAuxUpsampler.__init__  s    ~~IIf&9&9<AqQ$&IIf.>.>aQRTU$V!,,t4		,0C0CQ1M mmBIIaq!Q,OQSQ]Q]fjQkl >!#<9P9PRSUVXY!Zr%   c                    U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      S S 2S S 2S X0R                  -  2S X@R                  -  24   US S 2S S 2S X0R                  -  2S X@R                  -  24   -   nU R                  U5      nXe4$ rO   )r'  r  r  r(  r)  r  r  r  )rR   r  bicubicr4   r5   auxr"  s          r&   rW    PixelShuffleAuxUpsampler.forward  s    ##G,33OD///:mmO,--c2MM/*1a1H6LL3H1HJ`ET`T`L`J`+`aa3f||335Ku||7K5KKLM 	 //@""r%   )r  r)  r(  r  r'  r  r  r  r  rb   s   @r&   r%  r%    s    
[# #r%   r%  zm
    Swin2SR Model transformer with an upsampler head on top for image super resolution and restoration.
    )custom_introc                      ^  \ rS rSrU 4S jr\      SS\\R                     S\\R                     S\\R                     S\\
   S\\
   S\\
   S	\\\4   4S
 jj5       rSrU =r$ )Swin2SRForImageSuperResolutioni  c                 Z  > [         TU ]  U5        [        U5      U l        UR                  U l        UR
                  U l        SnU R                  S:X  a  [        X5      U l        OU R                  S:X  a  [        X5      U l        OU R                  S:X  a1  [        UR
                  UR                  UR                  5      U l        OTU R                  S:X  a  [        X5      U l        O3[        R                  " UR                  UR                  SSS5      U l        U R!                  5         g )N@   r  pixelshuffle_auxpixelshuffledirectnearest+convr   r   )rP   rQ   r  r  	upsamplerr  r  r  r%  r  rm   r  r  r   r   r  r  r  s      r&   rQ   'Swin2SRForImageSuperResolution.__init__  s     #F+))~~ >>^+1&GDM^^114VJDM^^33+FNNF<L<LfNeNefDM^^~-0FDM &(YYv/?/?AXAXZ[]^`a%bD" 	r%   rt   r   labelsr   r  r  r>   c                    Ub  UOU R                   R                  nSnUb  [        S5      eUR                  SS u  pU R                   R                  S:X  a:  [
        R                  R                  UXR                  -  XR                  -  4SSS9n
U R                  UUUUUS9nUS	   nU R                  S
;   a  U R                  U5      nOhU R                  S:X  aE  U R                  UW
X5      u  pXR                  R                  -  U R                  R                  -   nOXR                  U5      -   nXR                  R                  -  U R                  R                  -   nUSS2SS2SXR                  -  2SXR                  -  24   nU(       d  U4USS -   nUb  U4U-   $ U$ [        UUUR                  UR                   S9$ )a  
Example:
 ```python
 >>> import torch
 >>> import numpy as np
 >>> from PIL import Image
 >>> import requests

 >>> from transformers import AutoImageProcessor, Swin2SRForImageSuperResolution

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

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

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

 >>> output = outputs.reconstruction.data.squeeze().float().cpu().clamp_(0, 1).numpy()
 >>> output = np.moveaxis(output, source=0, destination=-1)
 >>> output = (output * 255.0).round().astype(np.uint8)  # float32 to uint8
 >>> # you can visualize `output` with `Image.fromarray`
 ```Nz'Training is not supported at the momentr(   r4  r,  F)r   r   align_cornersr  r   )r  r5  r6  r   )lossr"  r   r   )rr   r  NotImplementedErrorr-   r7  r   r   r!  r  r  r  r  r  r  r   r   r   )rR   rt   r   r9  r   r  r  r<  r4   r5   r,  r  r  r"  r-  rI   s                   r&   rW   &Swin2SRForImageSuperResolution.forward  s   J &1%<k$++B]B]%&OPP$**12.;;  $66mm//||+U\\-AB#	 0 G ,,/!5#  
 "!*>>SS!]]?;N^^11"&--&"XN...1B1BBC),B,B?,SSN',,*@*@@4<<CTCTT'1.E0E.EG]Q]Q]I]G](]^$&4F)-)9TGf$EvE))!//))	
 	
r%   )r  r  r  r7  r  )NNNNNN)r   r   r   r   rQ   r   r   r!   r"   
LongTensorr  r   r   r   rW   r$   ra   rb   s   @r&   r1  r1    s    4  5915-1,0/3&*R
u001R
 E--.R
 ))*	R

 $D>R
 'tnR
 d^R
 
u00	1R
 R
r%   r1  )r1  r  r  )r@   F)?r    collections.abcr   r   dataclassesr   typingr   r   r   r!   torch.utils.checkpointr   activationsr	   modeling_outputsr
   r   modeling_utilsr   pytorch_utilsr   r   r   utilsr   r   r   configuration_swin2srr   
get_loggerr   loggerr   r8   r:   r_   r^   r  rJ   r   rL   rd   rg   r   r   r   r  r  r2  r<  rB  r}  r  r  r  r  r  r  r  r%  r1  __all__r   r%   r&   <module>rM     s9   )   ! ) )    ! K - [ [ 9 9 0 
		H	% :; : :4	U\\ e T V[VbVb *-bii --		 -<-RYY -6ryy 3")) 3n~299 ~D
		 
+ryy +^"))  	BII 	z299 zzD299 DND
RYY D
N *_ * *" h
) h
 h
V#ryy #Lbii 6BII "299 6#ryy #8 
n
%; n

n
b Wr%   