
    Z j9              	          S r SSKrSSKrSSKJr  SSKrSSKJr  SSKJ	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  \R4                  " \5      r\" SS9\ " S S\5      5       5       rS rS rSES\R@                  S\!S\"S\R@                  4S jjr# " S S\RH                  5      r% " S S\RH                  5      r& " S S\RH                  5      r' " S S \RH                  5      r( " S! S"\RH                  5      r) " S# S$\RH                  5      r* " S% S&\RH                  5      r+ " S' S(\RH                  5      r, " S) S*\RH                  5      r- " S+ S,\RH                  5      r. " S- S.\RH                  5      r/ " S/ S0\5      r0 " S1 S2\RH                  5      r1\ " S3 S4\5      5       r2\ " S5 S6\25      5       r3 " S7 S8\RH                  5      r4 " S9 S:\RH                  5      r5 " S; S<\RH                  5      r6 " S= S>\RH                  5      r7 " S? S@\RH                  5      r8\" SAS9 " SB SC\25      5       r9/ SDQr:g)Fz"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                       \ rS rSr% Sr\R                  S-  \S'   Sr\	\R                     S-  \S'   Sr
\	\R                     S-  \S'   Srg)Swin2SREncoderOutput#   Nlast_hidden_statehidden_states
attentions )__name__
__module____qualname____firstlineno__r   torchFloatTensor__annotations__r   tupler   __static_attributes__r       }/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/transformers/models/swin2sr/modeling_swin2sr.pyr   r   #   sN     37u((4/659M5**+d2926Je''(4/6r"   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_partitionr5   0   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)   )r4   r/   r1   r2   r3   s        r#   window_reverser7   =   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$ )z[
Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).

        r   r   )r   )dtypedevice)r*   ndimr   randr>   r?   floor_div)r8   r9   r:   	keep_probr*   random_tensoroutputs          r#   	drop_pathrG   H   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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$ )Swin2SRDropPathX   zXDrop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).Nr9   r;   c                 .   > [         TU ]  5         Xl        g N)super__init__r9   )selfr9   	__class__s     r#   rN   Swin2SRDropPath.__init__[   s    "r"   r   c                 B    [        XR                  U R                  5      $ rL   )rG   r9   r:   rO   r   s     r#   forwardSwin2SRDropPath.forward_   s    FFr"   c                      SU R                    3$ )Nzp=r9   rO   s    r#   
extra_reprSwin2SRDropPath.extra_reprb   s    DNN#$$r"   rW   rL   )r   r   r   r   __doc__floatrN   r   TensorrT   strrY   r!   __classcell__rP   s   @r#   rI   rI   X   sQ    b#%$, #$ # #GU\\ Gell G%C % %r"   rI   c                   r   ^  \ rS rSrSrU 4S jrS\R                  S-  S\\R                     4S jr
SrU =r$ )	Swin2SREmbeddingsf   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   )rM   rN   Swin2SRPatchEmbeddingspatch_embeddingsnum_patchesuse_absolute_embeddingsr   	Parameterr   zeros	embed_dimposition_embeddingsDropouthidden_dropout_probdropoutr/   )rO   configrg   rP   s      r#   rN   Swin2SREmbeddings.__init__k   s     6v >++77))')||EKK;QR?TZTdTd4e'fD$'+D$zz&"<"<=!--r"   pixel_valuesNr;   c                     U R                  U5      u  p#U R                  b  X R                  -   nU R                  U5      nX#4$ rL   )rf   rl   ro   )rO   rr   
embeddingsoutput_dimensionss       r#   rT   Swin2SREmbeddings.forwardy   sF    (,(=(=l(K%
##/#&>&>>J\\*-
,,r"   )ro   rf   rl   r/   )r   r   r   r   r[   rN   r   r   r    r]   rT   r!   r_   r`   s   @r#   rb   rb   f   s9    .-E$5$5$< -u||AT - -r"   rb   c                   |   ^  \ rS rSrSU 4S jjrS\R                  S-  S\\R                  \\	   4   4S jr
SrU =r$ )	re      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)rM   rN   rk   
image_size
patch_size
isinstancecollectionsabcIterablepatches_resolutionrg   r   Conv2d
projection	LayerNorm	layernorm)rO   rp   normalize_patchesr3   r|   r}   r   rP   s          r#   rN   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"   rt   Nr;   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   )rO   rt   _r1   r2   ru   s         r#   rT   Swin2SRPatchEmbeddings.forward   sh    __Z0
(..1e#O''*44Q:
>>%
3J,,r"   )r   rg   r   r   )T)r   r   r   r   rN   r   r   r    r]   intrT   r!   r_   r`   s   @r#   re   re      sA    W	-%"3"3d": 	-uU\\SXY\S]E]?^ 	- 	-r"   re   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 rL   )rM   rN   rk   )rO   rp   rP   s     r#   rN   !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+   rk   )rO   rt   x_sizer0   height_widthr3   s         r#   rT    Swin2SRPatchUnEmbeddings.forward   sK    1;1A1A.
,))!Q/44ZQWXYQZ\bcd\ef
r"   )rk   	r   r   r   r   r[   rN   rT   r!   r_   r`   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)rM   rN   r   r   r   Linear	reductionnorm)rO   r   r   r   rP   s       r#   rN   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)rO   r.   r1   r2   
should_pad
pad_valuess         r#   	maybe_padSwin2SRPatchMerging.maybe_pad   sS    qjAo:519>
Q519a!<JMM--mHMr"   r.   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   )rO   r.   r   r1   r2   r0   r   r3   input_feature_0input_feature_1input_feature_2input_feature_3s               r#   rT   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   ModulerN   r   r   r]   rT   r!   r_   r`   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S\R                  S\R                  S-  S\S-  S\	\R                     4S	 jjr
S
 rSrU =r$ )Swin2SRSelfAttention   r   c           
      h  > [         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        U R/                  5       u  pgU R1                  SUSS9  U R1                  SUSS9  [        R(                  " U R                  U R                  UR2                  S
9U l        [        R(                  " U R                  U R                  SS
9U l        [        R(                  " U R                  U R                  UR2                  S
9U l        [        R:                  " UR<                  5      U l        g )Nr   zThe hidden size (z6) is not a multiple of the number of attention heads ()
   r   r%   i   Tr   inplaceFrelative_coords_table
persistentrelative_position_index) rM   rN   
ValueErrornum_attention_headsr   attention_head_sizeall_head_sizer~   r   r   r   r/   pretrained_window_sizer   ri   r   logoneslogit_scale
Sequentialr   ReLUcontinuous_position_bias_mlpcreate_coords_table_and_indexregister_bufferqkv_biasquerykeyvaluerm   attention_probs_dropout_probro   )	rO   rp   r   	num_headsr/   r   r   r   rP   s	           r#   rN   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-
) :>9[9[9]646KX]^68O\abYYt1143E3EFOO\
99T//1C1C%PYYt1143E3EFOO\
zz&"E"EFr"   Nr   attention_maskoutput_attentionsr;   c                 :   UR                   u  pEnU R                  U5      R                  USU R                  U R                  5      R                  SS5      nU R                  U5      R                  USU R                  U R                  5      R                  SS5      nU R                  U5      R                  USU R                  U R                  5      R                  SS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                  XN-  XR                  XU5      UR1                  S5      R1                  S5      -   n
XR1                  S5      R1                  S5      -   n
U
R                  SU R                  XU5      n
[        R                  R3                  U
SS9nU R5                  U5      n[        R6                  " X5      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   r%   )r   g      Y@)maxr      r   )r*   r   r+   r   r   r   r   r   r   r   	normalizer   clampr   mathr   expr   r   r   r/   r,   r-   sigmoid	unsqueezesoftmaxro   matmulsizer   )rO   r   r   r   r0   r   r3   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#   rT   Swin2SRSelfAttention.forward  sa    )6(;(;%
JJ}%T*b$":":D<T<TUYq!_ 	 HH]#T*b$":":D<T<TUYq!_ 	 JJ}%T*b$":":D<T<TUYq!_ 	 ==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(*6N6NPS ((+55a8 9  02J2J12M2W2WXY2ZZ/44R9Q9QSV\ --//0@b/I ,,7 _B%--aAq9DDF"/"4"4"6s";t?Q?Q>S"S%**+BC6G=/2 O\M]r"   c                 8   [         R                  " U R                  S   S-
  * U R                  S   [         R                  S9R	                  5       n[         R                  " U R                  S   S-
  * U R                  S   [         R                  S9R	                  5       n[         R
                  " [         R                  " X/SS95      R                  SSS5      R                  5       R                  S5      nU R                  S   S:  aO  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'   OaU R                  S   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                  " [         R                  " U5      S-   5      -  [        R                  " S5      -  nUR                  [!        U R"                  R%                  5       5      R&                  5      n[         R                  " U R                  S   5      n[         R                  " U R                  S   5      n[         R
                  " [         R                  " XE/SS95      n[         R(                  " US5      nUS S 2S S 2S 4   US S 2S S S 24   -
  nUR                  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R+                  S	5      n	X94$ )
Nr   r   r>   ij)indexingr%      g      ?r(   )r   aranger/   int64r\   stackmeshgridr,   r-   r   r   signlog2absr   tonextr   
parametersr>   r   sum)
rO   relative_coords_hrelative_coords_wr   coords_hcoords_wcoordscoords_flattenrelative_coordsr   s
             r#   r   2Swin2SRSelfAttention.create_coords_table_and_indexG  s7   !LL4+;+;A+>+B)CTEUEUVWEX`e`k`klrrt!LL4+;+;A+>+B)CTEUEUVWEX`e`k`klrrtKK(9'MX\]^WQ1Z\Yq\	 	 &&q)A-!!Q1*-1L1LQ1ORS1SS-!!Q1*-1L1LQ1ORS1SS-a 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 << 0 0 34<< 0 0 34U^^X,@4PQ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$==r"   )r   r   r   ro   r   r   r   r   r   r   r/   NF)r   r   r   r   rN   r   r]   r   boolr    rT   r   r!   r_   r`   s   @r#   r   r      sr    TUWXSY G@ 48).	B||B ))D0B  $;	B
 
u||	BH#> #>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	$ )Swin2SRSelfOutputin  c                    > [         TU ]  5         [        R                  " X"5      U l        [        R
                  " UR                  5      U l        g rL   )rM   rN   r   r   denserm   r   ro   rO   rp   r   rP   s      r#   rN   Swin2SRSelfOutput.__init__o  s4    YYs(
zz&"E"EFr"   r   input_tensorr;   c                 J    U R                  U5      nU R                  U5      nU$ rL   r  ro   )rO   r   r  s      r#   rT   Swin2SRSelfOutput.forwardt  s$    

=1]3r"   r  
r   r   r   r   rN   r   r]   rT   r!   r_   r`   s   @r#   r  r  n  s7    G
U\\  RWR^R^  r"   r  c            
          ^  \ rS rSrS
U 4S jjr  SS\R                  S\R                  S-  S\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	        g )Nrp   r   r   r/   r   )
rM   rN   r   r~   r   r   r   rO   r  rF   )rO   rp   r   r   r/   r   rP   s         r#   rN   Swin2SRAttention.__init__}  sW    (#0+//2J2JKK $:(A
	 (4r"   Nr   r   r   r;   c                 f    U R                  XU5      nU R                  US   U5      nU4USS  -   nU$ Nr   r   )rO   rF   )rO   r   r   r   self_outputsattention_outputr   s          r#   rT   Swin2SRAttention.forward  sC     yy@QR;;|AF#%QR(88r"   )rF   rO   r   r	  )r   r   r   r   rN   r   r]   r   r
  r    rT   r!   r_   r`   s   @r#   r  r  |  s\    5  48).		||	 ))D0	  $;		
 
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 rL   )rM   rN   r   r   r   	mlp_ratior  r~   
hidden_actr^   r   intermediate_act_fnr  s      r#   rN   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$ rL   r  r&  rS   s     r#   rT   Swin2SRIntermediate.forward  s&    

=100?r"   r)  r  r`   s   @r#   r"  r"    s(    9U\\ ell  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	$ )Swin2SROutputi  c                    > [         TU ]  5         [        R                  " [	        UR
                  U-  5      U5      U l        [        R                  " UR                  5      U l	        g rL   )
rM   rN   r   r   r   r$  r  rm   rn   ro   r  s      r#   rN   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$ rL   r  rS   s     r#   rT   Swin2SROutput.forward  s$    

=1]3r"   r  r  r`   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	\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=   )rM   rN   r   _compute_window_shiftr/   
shift_sizer  r~   r   r   r   	attentionr   r   layer_norm_epslayernorm_beforerI   IdentityrG   r"  intermediater,  rF   layernorm_after)
rO   rp   r   r   r   drop_path_rater7  r   r/   rP   s
            r#   rN   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  p4[        X45      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   min)rO   target_window_sizetarget_shift_sizerwr/   sr7  s           r#   r6  "Swin2SRLayer._compute_window_shift  so    -01F1FHZ-[\-[TQs1y-[\8;D<Q<QS^8rs8rWQ16aq(8r
s&& ]ss   A+A1c           	         U R                   S:  Gae  [        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      R                  US:H  S5      nU$ S nU$ )Nr   r   r   r(   r%   g      Yr=   )	r7  r   rj   slicer/   r5   r+   r   masked_fill)rO   r1   r2   r>   img_maskheight_sliceswidth_slicescountheight_slicewidth_slicemask_windows	attn_masks               r#   get_attn_maskSwin2SRLayer.get_attn_mask  sy   ??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!--i1nfEQQR[_`R`befI  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$ rA  )r/   r   r   r   )rO   r   r1   r2   	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   Nc                    Uu  pEUR                  5       u  pgnUn	UR                  XdXX5      nU R                  XU5      u  pUR                  u  p{pU 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                  XUS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                  XdU-  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*   r7  r   rollr5   r/   rU  r>   r   r?   r8  r7   r-   r:  rG   r<  rF   r=  )rO   r   r   r   r1   r2   r0   r   channelsshortcutr   
height_pad	width_padshifted_hidden_stateshidden_states_windowsrT  attention_outputsr  attention_windowsshifted_windows
was_paddedlayer_outputlayer_outputss                          r#   rT   Swin2SRLayer.forward  sx    )"/"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+@_pNq,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"   )	r8  rG   r   r<  r=  r:  rF   r7  r/   )r=   r   r   F)r   r   r   r   rN   r    r   r6  rU  r   r   r]   r
  rT   r!   r_   r`   s   @r#   r2  r2    s    qrL2'eTYZ]_bZbTcejknpsksetTtNu '
8) */	5||5  S/5  $;	5
 
u||U\\)	*5 5r"   r2  c            
          ^  \ rS rSrSrSU 4S jjr SS\R                  S\\	\	4   S\
S-  S\\R                     4S	 jjrS
rU =r$ )Swin2SRStagei.  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   )rp   r   r   r   r7  r   1convr   r   3convr&   皙?Tnegative_sloper   F)r   )rM   rN   rp   r   r   
ModuleListranger2  r/   layersresi_connectionr   convr   	LeakyReLUre   patch_embedr   patch_unembed)
rO   rp   r   r   depthr   rG   r   irP   s
            r#   rN   Swin2SRStage.__init__3  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   Nr;   c                    UnUu  pV[        U R                  5       H  u  pxU" XU5      n	U	S   nM     XVXV4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  )	enumeraterw  r|  ry  r{  )rO   r   r   r   residualr1   r2   r~  layer_modulerj  ru   r   stage_outputss                r#   rT   Swin2SRStage.forwardU  s     !((5OA(J[\M)!,M  6
 $F:**=K		-0++M:%0&:]12..Mr"   )rp   ry  r   rw  r{  r|  r   rl  )r   r   r   r   r[   rN   r   r]   r    r   r
  rT   r!   r_   r`   s   @r#   rn  rn  .  s\     >L */	||  S/  $;	
 
u||	 r"   rn  c                      ^  \ rS rSrU 4S jr   SS\R                  S\\\4   S\	S-  S\	S-  S\	S-  S	\\
-  4S
 jjrSrU =r$ )Swin2SREncoderir  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)r?   r   )rp   r   r   r}  r   rG   r   F)rM   rN   lendepths
num_stagesrp   r   linspacer>  r   itemr   ru  rv  rn  rk   r   stagesgradient_checkpointing)rO   rp   	grid_sizexdpr	stage_idxrP   s         r#   rN   Swin2SREncoder.__init__s  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   Noutput_hidden_statesreturn_dictr;   c                 N   SnU(       a  SOS nU(       a  SOS nU(       a  Xq4-  n[        U R                  5       HC  u  pU
" XU5      nUS   nUS   nUS   US   4nXb4-  nU(       a  Xq4-  nU(       d  M<  XSS  -  nME     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rL   r   ).0vs     r#   	<genexpr>)Swin2SREncoder.forward.<locals>.<genexpr>  s     m$[q$[s   	r   r   r   )r  r  r    r   )rO   r   r   r   r  r  all_input_dimensionsall_hidden_statesall_self_attentionsr~  stage_modulerj  ru   s                r#   rT   Swin2SREncoder.forward  s      ""6BD$5b4!11(5OA(J[\M)!,M -a 0 1" 57H7LM $77 #!%55!  #QR'88#  6 m]GZ$[mmm#++*
 	
r"   )rp   r  r  r  )FFT)r   r   r   r   rN   r   r]   r    r   r
  r   rT   r!   r_   r`   s   @r#   r  r  r  su    ,4 */,1#'%
||%
  S/%
  $;	%

 #Tk%
 D[%
 
%	%%
 %
r"   r  c                   ^    \ rS rSr% \\S'   SrSrSrSr	\
R                  " 5       S 5       rSrg	)
Swin2SRPreTrainedModeli  rp   swin2srrr   )imageTc                    [        U[        R                  [        R                  45      (       ab  [        R
                  " UR                  U R                  R                  S9  UR                  b!  [        R                  " UR                  5        gg[        U[        R                  5      (       aA  [        R                  " UR                  5        [        R                  " UR                  5        g[        U[        5      (       a  [        R                  " UR                  [         R"                  " S5      5        UR%                  5       u  p#[        R&                  " UR(                  U5        [        R&                  " UR*                  U5        g[        U[,        5      (       a  UR                  R.                  S:X  aE  UR                  R0                  S:X  a+  [2        R4                  " / SQ5      R7                  SSSS5      nO[2        R8                  " SSSS5      n[        R&                  " UR:                  U5        gg)zInitialize the weights)stdNr   r   gw#?g8EGr?gB`"?r   )r~   r   r   r   inittrunc_normal_weightrp   initializer_ranger   zeros_r   ones_r   	constant_r   r   r   r   copy_r   r   Swin2SRModelr3   num_channels_outr   tensorr+   rj   mean)rO   moduler   r   r  s        r#   _init_weights$Swin2SRPreTrainedModel._init_weights  sn    fryy"))455v}}$++2O2OP{{&FKK( '--KK$JJv}}% 455NN6--txx|<=C=a=a=c:!JJv335JKJJv557NO--}}))Q.6==3Q3QUV3V||$<=BB1aAN{{1aA.JJv{{D) .r"   r   N)r   r   r   r   r   r   base_model_prefixmain_input_nameinput_modalitiessupports_gradient_checkpointingr   no_gradr  r!   r   r"   r#   r  r    s7    !$O!&*#
]]_* *r"   r  c                      ^  \ rS rSrU 4S jrS rS r\   SS\R                  S\
S-  S\
S-  S	\
S-  S
\\-  4
S jj5       rSrU =r$ )r  i  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   r  r   r  Fr   )r  r4  )rM   rN   rp   r3   r  r   r  r+   rj   r   	img_ranger   r   rk   first_convolutionrb   rt   r  rf   r   encoderr   r9  r   r   r|  conv_after_body	post_init)rO   rp   r  rP   s      r#   rN   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                  $ rL   )rt   rf   rX   s    r#   get_input_embeddings!Swin2SRModel.get_input_embeddings  s    ///r"   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   rp   r/   r   r   r   r  type_asr  )	rO   rr   r   r1   r2   r/   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"   Nrr   r   r  r  r;   c                 0   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    pgnU R                  U5      nU R                  U5      n	U R                  U	5      u  pU R                  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  )rp   r   r  r  r*   r  r  rt   r  r   r|  r  r	   r   r   )rO   rr   r   r  r  kwargsr   r1   r2   rt   embedding_outputr   encoder_outputssequence_outputrF   s                  r#   rT   Swin2SRModel.forward  s;    2C1N-TXT_T_TqTq$8$D $++JjJj 	 &1%<k$++BYBY*001e --l;++L9
-1__Z-H*,,/!5# ' 
 *!,..9,,_uoN..?*L%'/!"*==FM-)77&11
 	
r"   )rp   r  rt   r  r  r  r   r|  )NNN)r   r   r   r   rN   r  r  r   r   r   r
  r    r	   rT   r!   r_   r`   s   @r#   r  r    sx    .0  *.,0#'-
''-
  $;-
 #Tk	-

 D[-
 
	 -
 -
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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   convolution_r&   r   pixelshuffle_r%   	   zScale z/ is not supported. Supported scales: 2^n and 3.)rM   rN   scalerv  r   r   r   
add_moduler   r   PixelShuffleconvolutionpixelshuffler   )rO   r  num_featuresr~  rP   s       r#   rN   Upsample.__init__6  s    
QYA%3tyy/01,qc 2BIIlAP\L\^_abde4fg-s 3R__Q5GH 2 aZ!yyq<7GAqQD " 2DveW,[\]]r"   c                    U R                   U R                   S-
  -  S:X  ao  [        [        [        R                  " U R                   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  rv  r   r   r   __getattr__r  r  )rO   hidden_stater~  s      r#   rT   Upsample.forwardE  s    JJ$**q.)a/3tyy456#//,qc0BCLQ#//-s0CD\R 7 	 ZZ1_++L9L,,\:Lr"   )r  r  r  r   r`   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$ )UpsampleOneStepiR  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   )rM   rN   r   r   ry  r  pixel_shuffle)rO   r  in_channelsout_channelsrP   s       r#   rN   UpsampleOneStep.__init__`  s>    IIk1H+DaAN	__U3r"   c                 J    U R                  U5      nU R                  U5      nU$ rL   ry  r  )rO   r  s     r#   rT   UpsampleOneStep.forwardf  s$    IIaLq!r"   r  r   r`   s   @r#   r  r  R  s    4 r"   r  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )PixelShuffleUpsamplerim  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   )rM   rN   r   r   rk   conv_before_upsamplerz  
activationr  upscaleupsampler  final_convolutionrO   rp   r  rP   s      r#   rN   PixelShuffleUpsampler.__init__n  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$ rL   )r  r  r  r  )rO   r  r  s      r#   rT   PixelShuffleUpsampler.forwardu  sC    %%o6OOAMM!""1%r"   )r  r  r  r  r   r   r   r   rN   rT   r!   r_   r`   s   @r#   r  r  m  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   rr  rs  )rM   rN   r  r   r   r   rk   r  rz  r  conv_up1conv_up2conv_hrr  r  lrelur  s      r#   rN   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  )rO   r  reconstructions      r#   rT   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   r`   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  )rM   rN   r  r   r   r3   conv_bicubicrk   r  rz  r  conv_auxr   conv_after_auxr  r  r  r  r  s      r#   rN   !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$ rL   )r  r  r  r  r  r  r  r  )rO   r  bicubicr1   r2   auxr  s          r#   rT    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   r`   s   @r#   r  r    s    
[# #r"   r  zm
    Swin2SR Model transformer with an upsampler head on top for image super resolution and restoration.
    c                      ^  \ rS rSrU 4S jr\     SS\R                  S-  S\R                  S-  S\	S-  S\	S-  S\	S-  S	\
\-  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   )rM   rN   r  r  	upsamplerr  r  r  r  r  rk   r  r  r   r   r  r  r  s      r#   rN   'Swin2SRForImageSuperResolution.__init__  s     #F+))~~ >>^+1&GDM^^114VJDM^^33+FNNF<L<LfNeNefDM^^~-0FDM &(YYv/?/?AXAXZ[]^`a%bD" 	r"   Nrr   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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 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   )rp   r  NotImplementedErrorr*   r"  r   r   r  r  r  r  r  r  r  r
   r   r   )rO   rr   r$  r   r  r  r  r'  r1   r2   r  r   r  r  r  rF   s                   r#   rT   &Swin2SRForImageSuperResolution.forward  s   N &1%<k$++BYBY%&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  r"  r  )NNNNN)r   r   r   r   rN   r   r   r   
LongTensorr
  r    r
   rT   r!   r_   r`   s   @r#   r  r    s    4  26*.)-,0#'S
''$.S
   4'S
  $;	S

 #TkS
 D[S
 
+	+S
 S
r"   r  )r  r  r  )r=   F);r[   collections.abcr   r   dataclassesr   r   r    r   r  activationsr   modeling_layersr   modeling_outputsr	   r
   modeling_utilsr   utilsr   r   r   configuration_swin2srr   
get_loggerr   loggerr   r5   r7   r]   r\   r
  rG   r   rI   rb   re   r   r   r   r  r  r"  r,  r2  rn  r  r  r  r  r  r  r  r  r  __all__r   r"   r#   <module>r7     s>   )   !   & ! 9 K - 9 9 0 
		H	% 
 7; 7 7	U\\ e T V[VbVb  %bii %-		 -<-RYY -6ryy 3")) 3nE>299 E>R
		 
ryy 6"))  	BII 	w299 wtA- AH<
RYY <
~ *_ * *< X
) X
 X
v#ryy #Lbii 6BII "299 6#ryy #8 
o
%; o

o
d Wr"   