
    3j                          S SK r S SKJr  S SKJrJrJr  SSKJrJ	r	J
r
Jr  SSKJr  S\S	\S
\4S jrS\S\S
\4S jr " S S\\   5      rSS/rg)    N)override)KeyConditionget_pixelshuffle_paramsget_seq_len   )ArchitectureImageModelDescriptorSizeRequirements	StateDict   )HATwindow_sizewith_overlapreturnc                 `    / SQnU H  n[        X U-  -   5      U:X  d  M  Us  $    X-
  U -  S-   $ )N)r   r         ?g      ?g      ?皙?g?g333333?g?g333333?gffffff?g?g?{Gz?)int)r   r   nice_numbersratios       ]/home/wildlama/miniconda3/lib/python3.13/site-packages/spandrel/architectures/HAT/__init__.py_get_overlap_ratior      sC     SL{5001\AL 
 &+5<<    acc                    X-  nUR                  5       (       a  [        U5      $ X[        R                  " U5      -  :X  a  [        R                  " U5      $ X[        R                  " U5      -  :X  a  [        R                  " U5      $ XU-  :X  a  U$ XUS-
  -  :X  a  US-
  $ XUS-   -  :X  a  US-   $ [        SU  SU 35      e)z/
Returns a number `b` such that `a // b == c`.
r   z3Could not find a number b such that a // b == c. a=z, c=)
is_integerr   mathceilfloor
ValueError)r   r   b_floats      r   _inv_int_divr$   "   s     eG7|7###yy!!G$$$zz'"" 	L'D.!!~'D.!!~
J1#TRSQTU
VVr   c                   N   ^  \ rS rSrSU 4S jjr\S\S\\   4S j5       r	Sr
U =r$ )HATArch:   r   c                 f   > [         TU ]  S[        R                  " SSSSSSSS	S
SSSSSS5      S9  g )Nr   relative_position_index_SAconv_first.weightz-layers.0.residual_group.blocks.0.norm1.weight8layers.0.residual_group.blocks.0.conv_block.cab.0.weightz8layers.0.residual_group.blocks.0.conv_block.cab.2.weightDlayers.0.residual_group.blocks.0.conv_block.cab.3.attention.1.weightzDlayers.0.residual_group.blocks.0.conv_block.cab.3.attention.3.weightz-layers.0.residual_group.blocks.0.mlp.fc1.biasz/layers.0.residual_group.blocks.0.mlp.fc2.weightzAlayers.0.residual_group.overlap_attn.relative_position_bias_tablez/layers.0.residual_group.overlap_attn.qkv.weightz0layers.0.residual_group.overlap_attn.proj.weightz3layers.0.residual_group.overlap_attn.mlp.fc1.weightz3layers.0.residual_group.overlap_attn.mlp.fc2.weightconv_last.weight)iddetect)super__init__r   has_all)self	__class__s    r   r1   HATArch.__init__;   sS    '',#?JJVV?ASABEE" 	 	
r   
state_dictc                 6   SnSnSnSnSnSnSnSn	Sn
SnS	nS
nSnS nSnSnSnSnSnSnSnSnSnSnUS   R                   S   nUS   R                   S   nUS   R                   S   n[        USU5      u  nn[        [        R                  " US   R                   S   5      5      n[        U[        [        R                  " US   R                   S   5      5      S9n[        US5      n[        U5       Vs/ s H  n[        USU S35      PM     nn[        U5       Vs/ s H  nUSU S3   R                   S   PM     nnSU;   a  SnOSn[        UUS    R                   S   5      n	[        UUS!   R                   S   5      n
S"U;   nS#U;   nS$U;   n[        US%   R                   S   5      nUU-  nS$U;   a5  US$   R                   S   n[        [        R                  " U5      5      nSnUn[        SL0 S&U_S'U_S(U_S)U_S*U_S+U_S,U_S-U	_S.U
_S/U_S0U_S1U_S2U_S3U_S4U_S5U_S6U_S7U_S8U_S9U_S:U_S;U_S<U_S=U_6n [        U5      S>:  a  U	S?:  a  S@OSAn!OSBn!U!SCU SDU 3U SE3U SF3U /n"[        U UU US:X  a  SGOSHU"SSUUU[        SISJ9SK9$ s  snf s  snf )MN@   r   r   `   )   r:   r:   r:         r   r   g      @Tg        r   F   g      ?pixelshuffle1convr*   r   r-   upsampler)   relative_position_index_OCA)r   layerszlayers.z.residual_group.blocksz9.residual_group.overlap_attn.relative_position_bias_tablezconv_after_body.weightidentityr+   r,   z.layers.0.residual_group.blocks.0.attn.qkv.biaszpatch_embed.norm.weightabsolute_pos_embedz/layers.0.residual_group.blocks.0.mlp.fc1.weightimg_size
patch_sizein_chans	embed_dimdepths	num_headsr   compress_ratiosqueeze_factor
conv_scaleoverlap_ratio	mlp_ratioqkv_biasqk_scale	drop_rateattn_drop_ratedrop_path_rateape
patch_normupscale	img_range	upsamplerresi_connectionnum_feat	      smallmediumlargeswnfdimRestorationSR   )minimum)	architecturepurposetagssupports_halfsupports_bfloat16scaleinput_channelsoutput_channelssize_requirements )shaper   r   r   sqrtr   r   ranger$   r   lenr	   r
   )#r3   r6   rE   rF   rG   rH   rI   rJ   r   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   _
num_layersimlp_hidden_dimnum_patchespatches_resolutionmodelsize_tagrk   s#                                      r   loadHATArch.loadQ   s3   
	 	
		
	"	!1288;2399!<	0177:,ZXN
$))J/K$L$R$RST$UVW*		*%BCII!LM
 !X6
 :&
& 
gaS0F$GH& 	 
 :&	
 ' !UVeA '	 	 
 $z1%O )O%JeA
 &VeA
 DzQ.*<
"j0 HIOOPQR
 #Y.	  :- %%9:@@CK!$TYY{%;!<J)H 

!
 
  	

 
  
 $
 *
 *
 "
 (
  
 
 
  
  *!
" *#
$ %
& "'
( )
*  +
,  -
. ,/
0 1
6 v;?"01"4w(HHz;-(jOk
 $%,\Mt"#$.r:
 	
w

s   6J Jrr   )r   N)__name__
__module____qualname____firstlineno__r1   r   r   r	   r   r   __static_attributes____classcell__)r4   s   @r   r&   r&   :   s4    
, Q
y Q
-A#-F Q
 Q
r   r&   r   )r   typing_extensionsr   spandrel.utilr   r   r   __helpers.model_descriptorr   r	   r
   r   
__arch.HATr   r   floatr   r$   r&   __all__rr   r   r   <module>r      sx     & L L  =C =s =u =$WC WC WE W0i
l3 i
X e
r   