§
    �Åj×g  ã                  ó°  — d dl mZ d dlZd dlmZ d dlZd dlZd dlm	c m
Z d dlmZ d dlmZm	Z	 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ ed         Zeedddf         Z G d„ de	j        ¦  «        Z G d„ de	j        ¦  «        Z G d„ de	j        ¦  «        Z G d„ de	j        ¦  «        Z G d„ de	j         ¦  «        Z! G d„ de	j        ¦  «        Z" G d„ de	j        ¦  «        Z# G d„ de	j        ¦  «        Z$ G d„ d e	j        ¦  «        Z% G d!„ d"e	j        ¦  «        Z& G d#„ d$e	j        ¦  «        Z' e¦   «          G d%„ d&e	j        ¦  «        ¦   «         Z(dS )'é    )ÚannotationsN)ÚLiteral)Ú	rearrange)ÚTensorÚnn)Útrunc_normal_)Ú_IncompatibleKeys)Ú	StateDict)Ústore_hyperparameters)ÚDropPath)ÚconvÚpixelshuffledirectÚpixelshuffleúnearest+convÚdysampleútranspose+convÚldaÚpa_upc                  óB   ‡ — e Zd ZdZ	 	 	 	 	 	 ddˆ fd„Zdd„Zdd„Zˆ xZS )ÚDySamplez�Adapted from 'Learning to Upsample by Learning to Sample':
    https://arxiv.org/abs/2308.15085
    https://github.com/tiny-smart/dysample
    é@   é   é   é   Té   Úin_channelsÚintÚout_chÚscaleÚgroupsÚend_convolutionÚboolÚreturnÚNonec                ó†  •— t          ¦   «                              ¦   «          ||k    s	||z  dk    rd}t          |¦  «        ‚d|z  |dz  z  }|| _        || _        || _        |r t          j        |||d|dz  ¦  «        | _        t          j        ||d¦  «        | _	        t          j        ||dd¬¦  «        | _
        | j        rVt          j                             | j	        j        d¬¦  «         t          j                             | j
        j        d¬	¦  «         |                      d
|                      ¦   «         ¦  «         d S )Nr   z(Incorrect in_channels and groups values.r   r   F©Úbiasç{®Gáz”?©Ústd)ÚvalÚinit_pos)ÚsuperÚ__init__Ú
ValueErrorr   r    r!   r   ÚConv2dÚend_convÚoffsetÚscopeÚtrainingÚinitr   ÚweightÚ	constant_Úregister_bufferÚ	_init_pos)
Úselfr   r   r   r    r!   Ú
end_kernelÚmsgÚout_channelsÚ	__class__s
            €úXC:\Projects\Historical\venv\Lib\site-packages\spandrel/architectures/FDAT/__arch/fdat.pyr.   zDySample.__init__$   s9  ø€ õ 	‰Œ×ÒÑÔÐà˜&Ò Ð  K°&Ñ$8¸AÒ$=Ð$=Ø<ˆCÝ˜S‘/”/Ð!à˜6‘z E¨1¡HÑ,ˆØˆŒ
ØˆŒØ.ˆÔØð 	ÝœIØ˜V Z°°JÀ!±Oñô ˆDŒMõ ”i ¨\¸1Ñ=Ô=ˆŒÝ”Y˜{¨L¸!À%ÐHÑHÔHˆŒ
ØŒ=ð 	8ÝŒG×!Ò! $¤+Ô"4¸$Ð!Ñ?Ô?Ð?ÝŒG×Ò˜dœjÔ/°QÐÑ7Ô7Ð7à×Ò˜Z¨¯ªÑ)9Ô)9Ñ:Ô:Ð:Ð:Ð:ó    r   c                óL  — t          j        | j         dz   dz  | j        dz
  dz  dz   ¦  «        | j        z  }t          j        t          j        ||gd¬¦  «        ¦  «                             dd¦  «                             d| j        d¦  «                             dddd¦  «        S )Nr   r   Úij©Úindexingéÿÿÿÿ)	ÚtorchÚaranger   ÚstackÚmeshgridÚ	transposeÚrepeatr    Úreshape)r:   Úhs     r?   r9   zDySample._init_posC   s�   € ÝŒL˜4œ:˜+¨™/¨QÑ.°´¸a±À1Ñ0DÀqÑ0HÑIÔIÈDÌJÑVˆåŒK�œ¨¨1 v¸Ð=Ñ=Ô=Ñ>Ô>ßŠY�q˜!‰_Œ_ßŠV�A�t”{ AÑ&Ô&ßŠW�Q˜˜A˜qÑ!Ô!ð		
r@   Úxc                ó  — |                       |¦  «        |                      |¦  «                             ¦   «         z  dz  | j        z   }|j        \  }}}}|                     |dd||¦  «        }t          j        |¦  «        dz   }t          j        |¦  «        dz   }t          j        t          j	        ||gd¬¦  «        ¦  «         
                    dd¦  «                             d¦  «                             d¦  «                             |j        ¦  «                             |j        d¬	¦  «        }	t          j        ||g|j        |j        d¬
¦  «                             ddddd¦  «        }
d|	|z   z  |
z  dz
  }	t#          j        |	                     |d||¦  «        | j        ¦  «                             |dd| j        |z  | j        |z  ¦  «                             ddddd¦  «                             ¦   «                              dd¦  «        }	t#          j        |                     || j        z  d||¦  «        |	ddd¬¦  «                             |d| j        |z  | j        |z  ¦  «        }| j        r|                      |¦  «        }|S )Ng      à?r   rE   rB   rC   r   r   T)Únon_blocking)ÚdtypeÚdeviceÚ
pin_memoryr   r   ÚbilinearFÚborder)ÚmodeÚalign_cornersÚpadding_mode)r2   r3   Úsigmoidr,   ÚshapeÚviewrF   rG   rH   rI   rJ   Ú	unsqueezeÚtyperQ   ÚtorR   ÚtensorÚFÚpixel_shufflerL   r   ÚpermuteÚ
contiguousÚflattenÚgrid_sampler    r!   r1   )r:   rN   r2   ÚBÚ_ÚHÚWÚcoords_hÚcoords_wÚcoordsÚ
normalizerÚoutputs               r?   ÚforwardzDySample.forwardL   sF  € Ø—’˜Q‘” $§*¢*¨Q¡-¤-×"7Ò"7Ñ"9Ô"9Ñ9¸CÑ?À$Ä-ÑOˆØ”\‰
ˆˆ1ˆa�Ø—’˜Q  2 q¨!Ñ,Ô,ˆÝ”< ‘?”? SÑ(ˆÝ”< ‘?”? SÑ(ˆõ ŒK�œ¨°(Ð';ÀdÐKÑKÔKÑLÔLßŠY�q˜!‰_Œ_ßŠY�q‰\Œ\ßŠY�q‰\Œ\ßŠT�!”'‰]Œ]ßŠR�” tˆRÑ,Ô,ð 	õ ”\Ø�ˆF˜!œ'¨!¬(¸tð
ñ 
ô 
ç
Š$ˆq�!�Q˜˜1Ñ
Ô
ð 	ð �f˜v‘oÑ&¨Ñ3°aÑ7ˆõ ŒO˜FŸNšN¨1¨b°!°QÑ7Ô7¸¼ÑDÔDßŠT�!�Q˜˜DœJ¨™N¨D¬J¸©NÑ;Ô;ßŠW�Q˜˜1˜a Ñ#Ô#ßŠZ‰\Œ\ßŠW�Q˜‰]Œ]ð 	õ ”Ø�IŠI�a˜$œ+‘o r¨1¨aÑ0Ô0ØØØØ!ð
ñ 
ô 
÷ Š$ˆq�"�d”j 1‘n d¤j°1¡nÑ
5Ô
5ð 	ð Ôð 	+Ø—]’] 6Ñ*Ô*ˆFàˆr@   )r   r   r   r   Tr   )r   r   r   r   r   r   r    r   r!   r"   r#   r$   )r#   r   ©rN   r   r#   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r.   r9   ro   Ú__classcell__©r>   s   @r?   r   r      sˆ   ø€ € € € € ðð ð ØØØØ $Øð;ð ;ð ;ð ;ð ;ð ;ð ;ð>
ð 
ð 
ð 
ð&ð &ð &ð &ð &ð &ð &ð &r@   r   c                  ó(   ‡ — e Zd Zddˆ fd	„Zd
„ Zˆ xZS )Ú	LayerNormr   ç�íµ ÷Æ°>Údimr   ÚepsÚfloatr#   r$   c                ó  •— t          ¦   «                              ¦   «          t          j        t	          j        |¦  «        ¦  «        | _        t          j        t	          j        |¦  «        ¦  «        | _        || _	        |f| _
        d S ©N)r-   r.   r   Ú	ParameterrF   Úonesr6   Úzerosr'   r{   rz   )r:   rz   r{   r>   s      €r?   r.   zLayerNorm.__init__v   sa   ø€ Ý‰Œ×ÒÑÔÐÝ”l¥5¤:¨c¡?¤?Ñ3Ô3ˆŒÝ”L¥¤¨SÑ!1Ô!1Ñ2Ô2ˆŒ	ØˆŒØ�6ˆŒˆˆr@   c                ó  — |                      t          j        ¬¦  «        rXt          j        |                     dddd¦  «        | j        | j        | j        | j	        ¦  «                             dddd¦  «        S | 
                    dd¬¦  «        }||z
                       d¦  «         
                    dd¬¦  «        }||z
  t          j        || j	        z   ¦  «        z  }| j        d d …d d f         |z  | j        d d …d d f         z   S )N)Úmemory_formatr   r   r   r   T)Úkeepdim)Úis_contiguousrF   Úchannels_lastr`   Ú
layer_normrb   rz   r6   r'   r{   ÚmeanÚpowÚsqrt)r:   rN   ÚuÚss       r?   ro   zLayerNorm.forward}   sô   € Ø�?Š?­Ô)<ˆ?Ñ=Ô=ð 	"Ý”<Ø—	’	˜!˜Q  1Ñ%Ô% t¤x°´¸d¼iÈÌñô çŠg�a˜˜A˜qÑ!Ô!ð"ð �FŠF�1˜dˆFÑ#Ô#ˆØ�‰U�KŠK˜‰NŒN×Ò ¨4ÐÑ0Ô0ˆØ�‰U•e”j  T¤X¡Ñ.Ô.Ñ.ˆØŒ{˜1˜1˜1˜d D˜=Ô)¨AÑ-°´	¸!¸!¸!¸TÀ4¸-Ô0HÑHÐHr@   )r   ry   )rz   r   r{   r|   r#   r$   ©rq   rr   rs   r.   ro   ru   rv   s   @r?   rx   rx   u   sX   ø€ € € € € ðð ð ð ð ð ð ðIð Ið Ið Ið Ið Ið Ir@   rx   c                  óP   ‡ — e Zd Z	 	 	 	 	 	 	 	 	 ddˆ fd„Zdd„Zd„ Zdd„Zd„ Zˆ xZS )ÚLDA_AQUé0   r   r   ç       @r   r   é   Tr#   r$   c
                óÒ  •— t          ¦   «                              ¦   «          || _        || _        || _        || _        || _        ||| j        z  z  | _        | j        dz  | _        |	| _	        ||z  | _
        t          j        || j
        dddd¬¦  «        | _        t          j        || j
        dddd¬¦  «        | _        ||| j        z  z  | _        t          j        t          j        | j        | j        ddd| j        d¬¦  «        t#          | j        ¦  «        t          j        ¦   «         t          j        | j        d|dz  z  |d|dz  ¦  «        ¦  «        | _        t#          |¦  «        | _        t+          | j        dz
  dz  ¦  «        | _        t/          j        | j         | j        dz   ¦  «                             t.          j        ¦  «        }
t/          j        |
| j        ¦  «        }t/          j        |
| j        ¦  «        }t/          j        ||gd¬	¦  «                             ¦   «         }t?          j         |¦  «         !                    dd
dd¦  «        }|  "                    d|d¬¦  «         | j	        rqt          j#        t?          j$        d| j        d| j        dz  | j
        | j        z  ¦  «        ¦  «        | _%        t          j&         '                    | j%        d¬¦  «         d S d S )Nç      à¿r   r   F)Úkernel_sizeÚstrideÚpaddingr'   r   ©r    r'   r   )ÚaxisrE   Úbase_offset)Ú
persistentr(   r)   )(r-   r.   Úk_uÚnum_headÚscale_factorÚn_groupsÚoffset_range_factorÚattn_dimr   ÚrpbÚ
hidden_dimr   r0   Úproj_qÚproj_kÚgroup_channelÚ
Sequentialrx   ÚSiLUÚconv_offsetr‡   r   ÚpadÚnprG   ÚastypeÚfloat32rK   ÚtilerH   rd   rF   r_   r[   r8   r   r�   Úrelative_position_bias_tabler5   r   )r:   r   Úreduction_factorÚnhrž   Úk_erœ   rŸ   Úrange_factorr¢   ÚbaseÚbase_yÚbase_xrš   r>   s                 €r?   r.   zLDA_AQU.__init__‰   s½  ø€ õ 	‰Œ×ÒÑÔÐØˆŒØˆŒØ(ˆÔØ ˆŒØ#/ˆÔ à#Ð(8¸4¼=Ñ(HÑIˆŒØ”] DÑ(ˆŒ
ØˆŒØ%Ð)9Ñ9ˆŒÝ”iØ˜œ°aÀÈ1ÐSXð
ñ 
ô 
ˆŒõ ”iØ˜œ°aÀÈ1ÐSXð
ñ 
ô 
ˆŒð )Ð-=ÀÄÑ-MÑNˆÔÝœ=ÝŒIØÔ"ØÔ"ØØØØÔ)Øðñ ô õ �dÔ(Ñ)Ô)ÝŒG‰IŒIÝŒI�dÔ(¨!¨c°1©f©*°c¸1¸cÀQ¹hÑGÔGñ
ô 
ˆÔõ $ KÑ0Ô0ˆŒå˜œ 1™¨Ñ)Ñ*Ô*ˆŒÝŒy˜$œ(˜ D¤H¨q¡LÑ1Ô1×8Ò8½¼ÑDÔDˆÝ”˜4 ¤Ñ*Ô*ˆÝ”˜˜tœxÑ(Ô(ˆÝ”h ¨Ð/°aÐ8Ñ8Ô8×@Ò@ÑBÔBˆÝ”l ;Ñ/Ô/×4Ò4°Q¸¸A¸qÑAÔAˆØ×Ò˜]¨KÀEÐÑJÔJÐJàŒ8ð 	OÝ02´Ý”Ø�t”} a¨¬°1©°d´oÈÌÑ6Vñô ñ1ô 1ˆDÔ-õ
 ŒG×!Ò! $Ô"CÈÐ!ÑNÔNÐNÐNÐNð	Oð 	Or@   c                ó0  — |                       ¦   «         D ] }t          |t          j        ¦  «        r t          j                             |¦  «         Œ<t          |t          j        ¦  «        rJt          j                             |j        d¦  «         t          j                             |j	        d¦  «         Œ¡t          j                             | j
        d         j	        d¦  «         t          j                             | j
        d         j        d¦  «         d S )Nr   ç      ð?rE   )ÚmodulesÚ
isinstancer   r0   r5   Úxavier_uniformrx   r7   r'   r6   r©   ©r:   Úms     r?   Úinit_weightszLDA_AQU.init_weightsÉ   sÛ   € Ø—’‘”ð 	1ð 	1ˆAÝ˜!�RœYÑ'Ô'ð 1Ý”×&Ò& qÑ)Ô)Ð)Ð)Ý˜A�rœ|Ñ,Ô,ð 1Ý”×!Ò! !¤&¨!Ñ,Ô,Ð,Ý”×!Ò! !¤(¨CÑ0Ô0Ð0øÝ
Œ×Ò˜$Ô*¨2Ô.Ô5°qÑ9Ô9Ð9Ý
Œ×Ò˜$Ô*¨2Ô.Ô3°QÑ7Ô7Ð7Ð7Ð7r@   c           	     ó~  — |j         \  }}}}|j        }t          j        ||¬¦  «        }t          j        ||¬¦  «        }t          j        ||¦  «        \  }}t          j        ||fd¬¦  «                             d||d¦  «        }	t          |d| j        | j        ¬¦  «        }||	                     dd|d|d¦  «        z   }| 	                    ¦   «                              || j        |z  | j        |z  d¦  «        }d|d         z  |dz
  z  dz
  |d<   d|d	         z  |dz
  z  dz
  |d	<   | 
                    d¦  «        }|S )
N)rR   rE   ©rz   r   r   z b (kh kw d) h w -> b kh h kw w d)ÚkhÚkw).r   ).r   )rZ   rR   rF   rG   rI   rH   r[   r   rœ   rc   Úflip)
r:   r2   ÚHoutÚWoutrf   rg   rR   Úrow_indicesÚcol_indicesÚindex_tensors
             r?   Ú
get_offsetzLDA_AQU.get_offsetÓ   sU  € Ø”\‰
ˆˆ1ˆa�Ø”ˆÝ”l 4°Ð7Ñ7Ô7ˆÝ”l 4°Ð7Ñ7Ô7ˆÝ#(¤>°+¸{Ñ#KÔ#KÑ ˆ�[Ý”{ K°Ð#=À2ÐFÑFÔF×KÒKØˆt�T˜1ñ
ô 
ˆõ ØÐ6¸4¼8ÈÌð
ñ 
ô 
ˆð ˜,×+Ò+¨A¨q°$¸¸4ÀÑCÔCÑCˆØ×"Ò"Ñ$Ô$×)Ò)¨!¨T¬X¸©_¸d¼hÈ¹oÈqÑQÔQˆà˜V Fœ^Ñ+¨t°a©xÑ8¸1Ñ<ˆˆv‰Ø˜V Fœ^Ñ+¨t°a©xÑ8¸1Ñ<ˆˆv‰Ø—’˜R‘”ˆØˆr@   c                ót   — t           j                             ||ddd¬¦  «        }t          |d||¬¦  «        }|S )NrT   r�   T)rV   rX   rW   z(b c (ksh h) (ksw w) -> b (ksh ksw) c h w)ÚkshÚksw)r   Ú
functionalre   r   )r:   rN   r2   ÚksÚouts        r?   Úextract_featszLDA_AQU.extract_featsç   sL   € ÝŒm×'Ò'ØØØØ Øð (ñ 
ô 
ˆõ ˜ÐGÈRÐUWÐXÑXÔXˆØˆ
r@   c                ó.  — |j         \  }}}}t          || j        z  ¦  «        t          || j        z  ¦  «        }}|}|                      |¦  «        }|                      |¦  «        }	|                      |¦  «        }
t          j        j         	                    |	||fdd¬¦  «        }	|	 
                    || j        z  d||¦  «        }|                      |¦  «        }|                     ¦   «                              | j        ¦  «        | j                             |j        ¦  «        z   }|
 
                    || j        z  | j        | j        z  ||¦  «        }
| 
                    || j        z  || j        z  ||¦  «        }|                      |||¦  «        }|                      |
|¬¦  «        }
|                      ||¬¦  «        }t-          |	d| j        ¬¦  «        }	t-          |
d| j        ¬	¦  «        }
t-          |d| j        ¬	¦  «        }t-          |
d
| j        ¬¦  «        }
t-          |d
| j        ¬¦  «        }| j        r
|
| j        z   }
|	| j        z  }	|	|
                     dd¦  «        z  }|                     d¬¦  «        }||z  }t-          |d|¬¦  «        }|S )NrT   T)rV   rW   rE   )r2   zb (nh c) h w -> b nh (h w) () c)r±   z (b g) n c h w -> b (h w) n (g c))Úgzb n1 n (nh c) -> b nh n1 n céþÿÿÿrÀ   z"b nh (h w) t c -> b (nh c) (t h) w)rM   )rZ   r   rž   r‡   r¤   r¥   rF   r   rÍ   Úinterpolater[   rŸ   r©   ÚtanhÚmulr    rš   r^   rQ   r£   rÉ   rÐ   r   r�   r¢   r¯   r   rJ   Úsoftmax)r:   rN   rf   ÚCrh   ri   Úout_HÚout_WÚvÚqÚkÚq_offÚpred_offsetr2   ÚattnrÏ   s                   r?   ro   zLDA_AQU.forwardò   s†  € Ø”W‰
ˆˆ1ˆa�Ý˜1˜tÔ0Ñ0Ñ1Ô1µ3°q¸4Ô;LÑ7LÑ3MÔ3MˆuˆØˆØ�OŠO˜AÑÔˆØ�KŠK˜‰NŒNˆØ�KŠK˜‰NŒNˆåŒHÔ×+Ò+Ø��uˆ~ J¸dð ,ñ 
ô 
ˆð —’�q˜4œ=Ñ(¨"¨e°UÑ;Ô;ˆØ×&Ò& uÑ-Ô-ˆØ×!Ò!Ñ#Ô#×'Ò'¨Ô(@ÑAÔAÀDÔDT×DWÒDWØŒGñE
ô E
ñ 
ˆð �FŠF�1�t”}Ñ$ d¤o¸¼Ñ&FÈÈ1ÑMÔMˆØ�FŠF�1�t”}Ñ$ a¨4¬=Ñ&8¸!¸QÑ?Ô?ˆØ—’ ¨°Ñ6Ô6ˆØ×Ò˜q¨ÐÑ0Ô0ˆØ×Ò˜q¨ÐÑ0Ô0ˆå�aÐ:¸t¼}ÐMÑMÔMˆÝ�aÐ;¸t¼}ÐMÑMÔMˆÝ�aÐ;¸t¼}ÐMÑMÔMˆÝ�aÐ7¸D¼MÐJÑJÔJˆÝ�aÐ7¸D¼MÐJÑJÔJˆàŒ8ð 	6Ø�DÔ5Ñ5ˆAà�”
‰NˆØ�1—;’;˜r 2Ñ&Ô&Ñ&ˆØ�|Š| ˆ|Ñ#Ô#ˆØ�Q‰hˆå˜ÐAÀUÐKÑKÔKˆØˆ
r@   )	r�   r   r   r‘   r   r   r   r’   T©r#   r$   )r   )	rq   rr   rs   r.   r¾   rÉ   rÐ   ro   ru   rv   s   @r?   r�   r�   ˆ   s­   ø€ € € € € ð ØØØØØØØØð>Oð >Oð >Oð >Oð >Oð >Oð >Oð@8ð 8ð 8ð 8ðð ð ð(	ð 	ð 	ð 	ð&ð &ð &ð &ð &ð &ð &r@   r�   c                  ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚPAr#   r$   c                óÆ   •— t          ¦   «                              ¦   «          t          j        t          j        ||d¦  «        t          j        ¦   «         ¦  «        | _        d S )Nr   )r-   r.   r   r§   r0   ÚSigmoidr   )r:   rz   r>   s     €r?   r.   zPA.__init__  sD   ø€ Ý‰Œ×ÒÑÔÐÝ”M¥"¤)¨C°°aÑ"8Ô"8½"¼*¹,¼,ÑGÔGˆŒ	ˆ	ˆ	r@   c                óR   — |                      |                      |¦  «        ¦  «        S r~   )rÖ   r   )r:   rN   s     r?   ro   z
PA.forward   s   € Ø�uŠu�T—Y’Y˜q‘\”\Ñ"Ô"Ð"r@   rá   r�   rv   s   @r?   rã   rã     sR   ø€ € € € € ðHð Hð Hð Hð Hð Hð#ð #ð #ð #ð #ð #ð #r@   rã   c                  ó0   ‡ — e Zd Z	 	 	 	 	 	 	 ddˆ fd„Zˆ xZS )ÚUniUpsampleV3r   r   r�   r   r   r   ÚupsampleÚSampleMods3r   r   Úin_dimÚout_dimÚmid_dimÚgroupr#   r$   c                óª  •— g }|dk    s|dk    r-|                      t          j        ||ddd¦  «        ¦  «         �n|dk    rG|                     t          j        |||dz  z  ddd¦  «        t          j        |¦  «        g¦  «         �nÎ|dk    �rI|                     t          j        ||ddd¦  «        t          j        d¬¦  «        g¦  «         ||dz
  z  d	k    rtt          t          t          j	        |¦  «        ¦  «        ¦  «        D ]D}	|                     t          j        |d
|z  ddd¦  «        t          j        d¦  «        g¦  «         ŒEn\|dk    rC|                     t          j        |d|z  ddd¦  «        t          j        d¦  «        g¦  «         nt          d|› d�¦  «        ‚|                      t          j        ||ddd¦  «        ¦  «         �n~|dk    �rœ||dz
  z  d	k    rÈt          t          t          j	        |¦  «        ¦  «        ¦  «        D ]W}	|                     t          j        ||ddd¦  «        t          j        d¬¦  «        t          j        dd¬¦  «        f¦  «         ŒX|                     t          j        ||ddd¦  «        t          j        dd¬¦  «        f¦  «         n›|dk    r‚|                     t          j        ||ddd¦  «        t          j        |¬¦  «        t          j        dd¬¦  «        t          j        ||ddd¦  «        t          j        dd¬¦  «        f¦  «         nt          d|› d�¦  «        ‚|                      t          j        ||ddd¦  «        ¦  «         �nÛ|dk    ro||k    r@|                     t          j        ||ddd¦  «        t          j        d¬¦  «        g¦  «         |                      t          |||||¬¦  «        ¦  «         �nf|dk    �r |dk    r,|                      t          j        ||d
dd¦  «        ¦  «         n¡|dk    r,|                      t          j        ||ddd	¦  «        ¦  «         no|d
k    rV|                     t          j        ||d
dd¦  «        t          j        ¦   «         t          j        ||d
dd¦  «        g¦  «         nt          d|› d�¦  «        ‚|                      t          j        ||ddd¦  «        ¦  «         �n_|dk    r—||k    r@|                     t          j        ||ddd¦  «        t          j        d¬¦  «        g¦  «         |                      t          ||¬¦  «        ¦  «         |                      t          j        ||ddd¦  «        ¦  «         �nÂ|dk    �r¤||dz
  z  d	k    rÃt          t          t          j	        |¦  «        ¦  «        ¦  «        D ]“}	|                     t          j        d¬¦  «        t          j        ||ddd¦  «        t!          |¦  «        t          j        dd¬¦  «        t          j        ||ddd¦  «        t          j        dd¬¦  «        g¦  «         |}Œ”n©|dk    r�|                     t          j        d¬¦  «        t          j        ||ddd¦  «        t!          |¦  «        t          j        dd¬¦  «        t          j        ||ddd¦  «        t          j        dd¬¦  «        g¦  «         nt          d|› d�¦  «        ‚|                      t          j        ||ddd¦  «        ¦  «         nt          dt"          › �¦  «        ‚ t%          ¦   «         j        |Ž  |                      dt+          j        dt/          t0          j        ¦  «                             |¦  «        |||||gt*          j        ¬¦  «        ¦  «         d S )Nr   r   r   r   r   r   T)Úinplacer   r   é	   zscale z/ is not supported. Supported scales: 2^n and 3.r   )rž   gš™™™™™É?)Únegative_sloperð   r   )r;   r   z, is not supported. Supported scales: 2, 3, 4r   r   z7An invalid Upsample was selected. Please choose one of ÚMetaUpsample)rQ   )Úappendr   r0   ÚextendÚPixelShuffleÚ	LeakyReLUÚranger   ÚmathÚlog2r/   ÚUpsampler   ÚConvTranspose2dÚGELUr�   rã   Ú
SampleModsr-   r.   r8   rF   r_   Úlistrê   Ú__args__ÚindexÚuint8)r:   ré   r   rë   rì   rí   rî   Údysample_end_kernelr½   rg   r>   s             €r?   r.   zUniUpsampleV3.__init__%  sD  ø€ ð ˆà�AŠ:ˆ:˜ VÒ+Ð+Ø�HŠH•R”Y˜v w°°1°aÑ8Ô8Ñ9Ô9Ð9Ñ9ØÐ-Ò-Ð-Ø�HŠHÝ”˜6 7¨U°A©XÑ#5°q¸!¸QÑ?Ô?ÅÄÐQVÑAWÔAWÐXñô ð ñ ð ˜Ò'Ñ'Ø�HŠH•b”i ¨°°A°qÑ9Ô9½2¼<ÐPTÐ;UÑ;UÔ;UÐVÑWÔWÐWØ˜ ™Ñ#¨Ò)Ð)Ý�s¥4¤9¨UÑ#3Ô#3Ñ4Ô4Ñ5Ô5ð ð �AØ—H’HÝœ 7¨A°©K¸¸A¸qÑAÔAÅ2Ä?ÐSTÑCUÔCUÐVñô ð ð ðð ˜!’�Ø—’�"œ) G¨Q°©[¸!¸QÀÑBÔBÅBÄOÐTUÑDVÔDVÐWÑXÔXÐXÐXå ØS˜UÐSÐSÐSñô ð ð �HŠH•R”Y˜w¨°°A°qÑ9Ô9Ñ:Ô:Ð:Ñ:Ø˜Ò'Ñ'Ø˜ ™Ñ#¨Ò)Ð)Ý�s¥4¤9¨UÑ#3Ô#3Ñ4Ô4Ñ5Ô5ð ð �AØ—H’HåœI f¨f°a¸¸AÑ>Ô>ÝœK°QÐ7Ñ7Ô7ÝœL¸ÀTÐJÑJÔJðñô ð ð ð —’åœ	 &¨&°!°Q¸Ñ:Ô:Ýœ°CÀÐFÑFÔFðñô ð ð ð ˜!’�Ø—’åœ	 &¨&°!°Q¸Ñ:Ô:Ýœ°Ð7Ñ7Ô7Ýœ°CÀÐFÑFÔFÝœ	 &¨&°!°Q¸Ñ:Ô:Ýœ°CÀÐFÑFÔFðñô ð ð õ !ØS˜UÐSÐSÐSñô ð ð �HŠH•R”Y˜v w°°1°aÑ8Ô8Ñ9Ô9Ð9Ñ9Ø˜Ò#Ð#Ø˜&Ò Ð Ø—’Ý”Y˜v w°°1°aÑ8Ô8½"¼,ÈtÐ:TÑ:TÔ:TÐUñô ð ð �HŠHÝ˜ '¨5°%ÐDWÐXÑXÔXñô ð ñ ð Ð)Ò)Ñ)Ø˜ŠzˆzØ—’�Ô+¨F°G¸QÀÀ1ÑEÔEÑFÔFÐFÐFØ˜!’�Ø—’�Ô+¨F°G¸QÀÀ1ÑEÔEÑFÔFÐFÐFØ˜!’�Ø—’åÔ*¨6°6¸1¸aÀÑCÔCÝœ™	œ	ÝÔ*¨6°7¸A¸qÀ!ÑDÔDðñô ð ð õ !ØP˜UÐPÐPÐPñô ð ð �HŠH•R”Y˜w¨°°A°qÑ9Ô9Ñ:Ô:Ð:Ñ:Ø˜ÒÐØ˜&Ò Ð Ø—’Ý”Y˜v w°°1°aÑ8Ô8½"¼,ÈtÐ:TÑ:TÔ:TÐUñô ð ð �HŠH•W˜W°5Ð9Ñ9Ô9Ñ:Ô:Ð:Ø�HŠH•R”Y˜w¨°°A°qÑ9Ô9Ñ:Ô:Ð:Ñ:Ø˜Ò Ñ Ø˜ ™Ñ#¨Ò)Ð)Ý�s¥4¤9¨UÑ#3Ô#3Ñ4Ô4Ñ5Ô5ð %ð %�AØ—H’HåœK°QÐ7Ñ7Ô7ÝœI f¨g°q¸!¸QÑ?Ô?Ý˜w™KœKÝœL¸ÀTÐJÑJÔJÝœI g¨w¸¸1¸aÑ@Ô@ÝœL¸ÀTÐJÑJÔJðñ	ô 	ð 	ð %�F�Fð%ð ˜!’�Ø—’åœ°Ð3Ñ3Ô3Ýœ	 &¨'°1°a¸Ñ;Ô;Ý˜7™œÝœ°CÀÐFÑFÔFÝœ	 '¨7°A°q¸!Ñ<Ô<Ýœ°CÀÐFÑFÔFðñ	ô 	ð 	ð 	õ !ØS˜UÐSÐSÐSñô ð ð �HŠH•R”Y˜w¨°°A°qÑ9Ô9Ñ:Ô:Ð:Ð:åØVÍ*ÐVÐVñô ð ð 	�‰ŒÔ˜!ÐÐà×ÒØÝŒLàÝ�Ô-Ñ.Ô.×4Ò4°XÑ>Ô>ØØØØØðõ ”kðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r@   )r   r   r�   r   r�   r   r   )ré   rê   r   r   rë   r   rì   r   rí   r   rî   r   r#   r$   )rq   rr   rs   r.   ru   rv   s   @r?   rè   rè   $  sd   ø€ € € € € ð !(ØØØØØØðS
ð S
ð S
ð S
ð S
ð S
ð S
ð S
ð S
ð S
ð S
r@   rè   c                  ó(   ‡ — e Zd Zdd	ˆ fd„Zd„ Zˆ xZS )
ÚFastSpatialWindowAttentioné   r   Fr#   r$   c                ó”  •— t          ¦   «                              ¦   «          |||c| _        | _        | _        ||z  dz  | _        t          j        ||dz  |¬¦  «        t          j        ||¦  «        c| _        | _	        t          j
        t          j        |||z  ||z  ¦  «        ¦  «        | _        t          | j        d¬¦  «         d S )Nr”   r   r&   r(   r)   )r-   r.   rz   Úwsr±   r   r   ÚLinearÚqkvÚprojr   rF   r�   r'   r   )r:   rz   Úwindow_sizeÚ	num_headsÚqkv_biasr>   s        €r?   r.   z#FastSpatialWindowAttention.__init__½  sÁ   ø€ Ý‰Œ×ÒÑÔÐØ%(¨+°yÐ"ˆŒ�$”'˜4œ7Ø˜YÑ&¨4Ñ/ˆŒ
åŒI�c˜3 ™7¨Ð2Ñ2Ô2ÝŒI�c˜3ÑÔð 	ˆŒ�$”)õ ”LÝŒK˜	 ;°Ñ#<¸kÈKÑ>WÑXÔXñ
ô 
ˆŒ	õ 	�d”i TÐ*Ñ*Ô*Ð*Ð*Ð*r@   c           	     ó´  — |j         \  }}}| j        || j        z  z
  | j        z  | j        || j        z  z
  | j        z  }}|dk    s|dk    rFt          j        |                     ||||¦  «        ddd|d|f¦  «                             |d|¦  «        }||z   ||z   }
}	|                     ||	| j        z  | j        |
| j        z  | j        |¦  «                             dddddd¦  «                             ¦   «                              d| j        | j        z  |¦  «        }|                      |¦  «                             d| j        | j        z  d| j        || j        z  ¦  «                             ddddd¦  «        }| 	                    d¦  «        \  }}}|| j
        z  |                     dd¦  «        z  | j        z   }t          j        |d¬	¦  «        |z                       dd¦  «                             d| j        | j        z  |¦  «        }|                      |¦  «                             ||	| j        z  |
| j        z  | j        | j        |¦  «                             dddddd¦  «                             ¦   «                              ||	|
|¦  «        }|dk    s|dk    r&|d d …d |…d |…d d …f                              ¦   «         }|                     |||¦  «        S )
Nr   rE   r   r   r   r   é   rÓ   rÀ   )rZ   r  r`   rª   r[   rb   rc   r
  r±   Úunbindr   rJ   r'   r×   rL   r  )r:   rN   rh   ri   rf   ÚLrØ   Úpad_rÚpad_bÚH_padÚW_padr
  rÜ   rÝ   rÛ   rà   s                   r?   ro   z"FastSpatialWindowAttention.forwardÊ  s§  € Ø”'‰ˆˆ1ˆaàŒW�q˜4œ7‘{Ñ" d¤gÑ-ØŒW�q˜4œ7‘{Ñ" d¤gÑ-ð ˆð �1Š9ˆ9˜ š	˜	Ý”�a—f’f˜Q  1 aÑ(Ô(¨1¨a°°E¸1¸eÐ*DÑEÔE×JÒJÈ1ÈbÐRSÑTÔTˆAà˜5‘y ! e¡)ˆuˆà�FŠF�1�e˜tœwÑ&¨¬°¸$¼'Ñ1AÀ4Ä7ÈAÑNÔNßŠW�Q˜˜1˜a  AÑ&Ô&ßŠZ‰\Œ\ßŠT�"�d”g ¤Ñ'¨Ñ+Ô+ð	 	
ð �HŠH�Q‰KŒKßŠT�"�d”g ¤Ñ'¨¨D¬G°Q¸$¼'±\ÑBÔBßŠW�Q˜˜1˜a Ñ#Ô#ð 	ð
 —*’*˜Q‘-”-‰ˆˆ1ˆaØ�D”J‘ §¢¨R°Ñ!4Ô!4Ñ4¸¼	ÑAˆåŒY�t Ð$Ñ$Ô$ qÑ(ßŠY�q˜!‰_Œ_ßŠW�R˜œ 4¤7Ñ*¨AÑ.Ô.ð 	
ð �IŠI�a‰LŒLßŠT�!�U˜dœgÑ% u°´Ñ'7¸¼À$Ä'È1ÑMÔMßŠW�Q˜˜1˜a  AÑ&Ô&ßŠZ‰\Œ\ßŠT�!�U˜E 1Ñ%Ô%ð 	
ð �1Š9ˆ9˜ š	˜	Ø�!�!�!�R�a�R˜˜!˜˜Q˜Q˜Q�,”×*Ò*Ñ,Ô,ˆAØ�vŠv�a˜˜A‰ŒÐr@   )r  r   Frá   r�   rv   s   @r?   r  r  ¼  sQ   ø€ € € € € ð+ð +ð +ð +ð +ð +ð +ð%ð %ð %ð %ð %ð %ð %r@   r  c                  ó(   ‡ — e Zd Zddˆ fd„Zd„ Zˆ xZS )	ÚFastChannelAttentionr   Fr#   r$   c                ó$  •— t          ¦   «                              ¦   «          || _        t          j        t          j        |dd¦  «        ¦  «        | _        t          j        ||dz  |¬¦  «        t          j        ||¦  «        c| _	        | _
        d S )Nr   r   r&   )r-   r.   r±   r   r   rF   r€   Útempr	  r
  r  )r:   rz   r  r  r>   s       €r?   r.   zFastChannelAttention.__init__ó  sw   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”L¥¤¨I°q¸!Ñ!<Ô!<Ñ=Ô=ˆŒ	åŒI�c˜3 ™7¨Ð2Ñ2Ô2ÝŒI�c˜3ÑÔð 	ˆŒ�$”)�)�)r@   c                óª  — |j         \  }}}|                      |¦  «                             ||d| j        || j        z  ¦  «                             ddddd¦  «        }|                     d¦  «        \  }}	}
t          j        |                     dd¦  «        d¬¦  «        t          j        |	                     dd¦  «        d¬¦  «        }	}t          j	        ||	                     dd¦  «        z  | j
        z  d¬¦  «        }|                      ||
                     dd¦  «        z                       dddd¦  «                             |||¦  «        ¦  «        S )	Nr   r   r   r   r   rÓ   rE   rÀ   )rZ   r
  r[   r±   rb   r  r`   Ú	normalizerJ   r×   r  r  rL   )r:   rN   rh   ri   rf   ÚNrØ   r
  rÜ   rÝ   rÛ   rà   s               r?   ro   zFastChannelAttention.forwardü  s2  € Ø”'‰ˆˆ1ˆaØ�hŠh�q‰kŒk×Ò˜q ! Q¨¬°°d´g±Ñ>Ô>×FÒFÀqÈ!ÈQÐPQÐSTÑUÔUˆØ—*’*˜Q‘-”-‰ˆˆ1ˆaåŒK˜Ÿš B¨Ñ+Ô+°Ð4Ñ4Ô4ÝŒK˜Ÿš B¨Ñ+Ô+°Ð4Ñ4Ô4ð ˆõ Œy˜!˜aŸkšk¨"¨bÑ1Ô1Ñ1°T´YÑ>ÀBÐGÑGÔGˆØ�yŠyØ�A—K’K  BÑ'Ô'Ñ'×0Ò0°°A°q¸!Ñ<Ô<×DÒDÀQÈÈ1ÑMÔMñ
ô 
ð 	
r@   )r   Frá   r�   rv   s   @r?   r  r  ò  sQ   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð 
ð 
ð 
r@   r  c                  ó(   ‡ — e Zd Zddˆ fd„Zd„ Zˆ xZS )ÚSimplifiedAIMr  r#   r$   c                óÐ  •— t          ¦   «                              ¦   «          t          j        t          j        |ddd¬¦  «        t          j        ¦   «         ¦  «        | _        t          j        t          j        d¦  «        t          j        |||z  dd¬¦  «        t          j        ¦   «         t          j        ||z  |dd¬¦  «        t          j        ¦   «         ¦  «        | _	        d S )Nr   Fr&   )
r-   r.   r   r§   r0   rå   ÚsgÚAdaptiveAvgPool2drý   Úcg)r:   rz   Úreduction_ratior>   s      €r?   r.   zSimplifiedAIM.__init__  s²   ø€ Ý‰Œ×ÒÑÔÐÝ”-¥¤	¨#¨q°!¸%Ð @Ñ @Ô @Å"Ä*Á,Ä,ÑOÔOˆŒÝ”-ÝÔ  Ñ#Ô#ÝŒI�c˜3 /Ñ1°1¸5ÐAÑAÔAÝŒG‰IŒIÝŒI�c˜_Ñ,¨c°1¸5ÐAÑAÔAÝŒJ‰LŒLñ
ô 
ˆŒˆˆr@   c                óä  — |j         \  }}}|dk    rp|                      |                     dd¦  «                             ||||¦  «        ¦  «                             |d|¦  «                             dd¦  «        }	|||	z  z   S |                      |                     dd¦  «                             ||||¦  «        ¦  «                             ||d¦  «                             dd¦  «        }
||
z  |z   S )NÚspatial_modulates_channelr   r   )rZ   r!  rJ   r[   r#  )r:   Ú	attn_featÚ	conv_featÚinteraction_typerh   ri   rf   r  rØ   ÚsmÚcms              r?   ro   zSimplifiedAIM.forward  sç   € Ø”/‰ˆˆ1ˆaØÐ:Ò:Ð:à—’˜	×+Ò+¨A¨qÑ1Ô1×6Ò6°q¸!¸QÀÑBÔBÑCÔCß’�a˜˜A‘”ß’˜1˜a‘”ð ð
  	¨B¡Ñ/Ð/ð —’˜	×+Ò+¨A¨qÑ1Ô1×6Ò6°q¸!¸QÀÑBÔBÑCÔCß’�a˜˜A‘”ß’˜1˜a‘”ð ð
  ‘N iÑ/Ð/r@   )r  rá   r�   rv   s   @r?   r  r  
  sQ   ø€ € € € € ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð0ð 0ð 0ð 0ð 0ð 0ð 0r@   r  c                  ó(   ‡ — e Zd Zddˆ fd„Zd„ Zˆ xZS )	ÚSimplifiedFFNr‘   ç        r#   r$   c           	     ó|  •— t          ¦   «                              ¦   «          t          ||z  ¦  «        }t          j        ||d¦  «        t          j        ¦   «         t          j        ||d¦  «        c| _        | _        | _        t          j	        |¦  «        | _
        t          j        ||ddd|d¬¦  «        | _        d S )NFr   r   r˜   )r-   r.   r   r   r	  rý   Úfc1ÚactÚfc2ÚDropoutÚdropr0   Úsmix)r:   rz   Úexpansion_ratior4  Úhdr>   s        €r?   r.   zSimplifiedFFN.__init__)  sž   ø€ Ý‰Œ×ÒÑÔÐÝ��Ñ&Ñ'Ô'ˆåŒI�c˜2˜uÑ%Ô%ÝŒG‰IŒIÝŒI�b˜#˜uÑ%Ô%ð 	%ˆŒ�$”(˜DœHõ
 ”J˜tÑ$Ô$ˆŒ	Ý”I˜b " a¨¨A°b¸uÐEÑEÔEˆŒ	ˆ	ˆ	r@   c                óÚ  — |j         \  }}}|                      |                      |                      |¦  «        ¦  «        ¦  «        }|                      |                     dd¦  «                             ||j         d         ||¦  «        ¦  «                             ||j         d         |¦  «                             dd¦  «        }|                      |                      |¦  «        ¦  «        S )Nr   r   rE   )rZ   r4  r1  r0  r5  rJ   r[   r2  )r:   rN   rh   ri   rf   r  Ú_CÚx_ss           r?   ro   zSimplifiedFFN.forward4  s´   € Ø”7‰ˆˆ1ˆbØ�IŠI�d—h’h˜tŸxšx¨™{œ{Ñ+Ô+Ñ,Ô,ˆà�IŠI�a—k’k ! QÑ'Ô'×,Ò,¨Q°´¸´¸QÀÑBÔBÑCÔCßŠT�!�Q”W˜R”[ !Ñ$Ô$ßŠY�q˜!‰_Œ_ð 	ð
 �yŠy˜Ÿš #™œÑ'Ô'Ð'r@   )r‘   r.  rá   r�   rv   s   @r?   r-  r-  (  sX   ø€ € € € € ð	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð(ð (ð (ð (ð (ð (ð (r@   r-  c                  ó.   ‡ — e Zd Zddˆ fd„Zd„ Zd„ Zˆ xZS )	ÚSimplifiedDATBlockFr#   r$   c	                óN  •— t          ¦   «                              ¦   «          || _        t          j        |¦  «        t          j        |¦  «        c| _        | _        |dk    rt          ||||¦  «        nt          |||¦  «        | _	        t          j
        t          j        ||ddd|d¬¦  «        t          j        ¦   «         ¦  «        | _        t          ||¦  «        | _        |dk    rt!          |¦  «        nt          j        ¦   «         | _        t'          ||¦  «        | _        d S )NÚspatialr   r   Fr˜   r.  )r-   r.   Úbtyper   rx   Ún1Ún2r  r  rà   r§   r0   rý   r   r  Úinterr   ÚIdentityÚdpr-  Úffn)
r:   rz   r±   r  Úffn_expÚaim_rer?  rD  Úqkv_br>   s
            €r?   r.   zSimplifiedDATBlock.__init__@  sý   ø€ Ý‰Œ×ÒÑÔÐØˆŒ
Ýœ<¨Ñ,Ô,­b¬l¸3Ñ.?Ô.?ÐˆŒ�”ð ˜	Ò!Ð!õ ' s¨B°°EÑ:Ô:Ð:å% c¨2¨uÑ5Ô5ð 	Œ	õ
 ”MÝŒI�c˜3  1 a°¸%Ð@Ñ@Ô@Å"Ä'Á)Ä)ñ
ô 
ˆŒ	õ # 3¨Ñ/Ô/ˆŒ
Ø"$ s¢( (•(˜2‘,”,�,µ´±´ˆŒÝ   gÑ.Ô.ˆŒˆˆr@   c                óè   — |j         \  }}}|                      |                     dd¦  «                             ||||¦  «        ¦  «                             |||¦  «                             dd¦  «        S ©Nr   r   )rZ   r   rJ   r[   )r:   rN   rh   ri   rf   r  rØ   s          r?   Ú	_conv_fwdzSimplifiedDATBlock._conv_fwdP  si   € Ø”'‰ˆˆ1ˆaà�IŠI�a—k’k ! QÑ'Ô'×,Ò,¨Q°°1°aÑ8Ô8Ñ9Ô9×>Ò>¸qÀ!ÀQÑGÔG×QÒQÐRSÐUVÑWÔWð	
r@   c                ó„  — |                       |¦  «        }| j        dk    rdnd}|                      |                      |||¦  «        |                      |||¦  «        |||¦  «        }||                      |¦  «        z   }||                      |                      |                      |¦  «        ||¦  «        ¦  «        z   }|S )Nr>  Úchannel_modulates_spatialr&  )r@  r?  rB  rà   rK  rD  rE  rA  )r:   rN   rh   ri   r@  ÚitypeÚfuseds          r?   ro   zSimplifiedDATBlock.forwardV  s¶   € Ø�WŠW�Q‰ZŒZˆð Œz˜YÒ&Ð&ð (Ð'à,ð 	ð
 —
’
˜4Ÿ9š9 R¨¨AÑ.Ô.°·²¸rÀ1ÀaÑ0HÔ0HÈ%ÐQRÐTUÑVÔVˆØ�—’˜‘”ÑˆØ�—’˜Ÿš §¢¨¡¤¨Q°Ñ2Ô2Ñ3Ô3Ñ3ˆØˆr@   )Frá   )rq   rr   rs   r.   rK  ro   ru   rv   s   @r?   r<  r<  ?  s`   ø€ € € € € ð/ð /ð /ð /ð /ð /ð /ð 
ð 
ð 
ð
ð 
ð 
ð 
ð 
ð 
ð 
r@   r<  c                  ó(   ‡ — e Zd Zdˆ fd„Zdd„Zˆ xZS )	ÚSimplifiedResidualGroupr#   r$   c	           	     ó  •‡‡‡‡‡‡‡— t          ¦   «                              ¦   «          t          j        ˆˆˆˆˆˆˆfd„t	          |¦  «        D ¦   «         ¦  «        | _        t          j        ‰‰dddd¬¦  «        | _        d S )Nc                ór   •— g | ]3}t          ‰‰‰‰‰‰|t          ‰¦  «        z           ‰|         ¦  «        ‘Œ4S © )r<  Úlen)	Ú.0ÚirG  rz   Údp_ratesrF  r±   Úpatternr  s	     €€€€€€€r?   ú
<listcomp>z4SimplifiedResidualGroup.__init__.<locals>.<listcomp>g  sY   ø€ ð ð ð ð õ #Ø˜˜R ¨&°'¸!½cÀ'¹l¼lÑ:JÔ2KÈXÐVWÌ[ñô ðð ð r@   r   r   Fr&   )r-   r.   r   Ú
ModuleListrø   Úblocksr0   r   )
r:   rz   Údepthr±   r  rF  rG  rY  rX  r>   s
    ` ``````€r?   r.   z SimplifiedResidualGroup.__init__d  s£   øøøøøøøø€ Ý‰Œ×ÒÑÔÐÝ”mðð ð ð ð ð ð ð ð ð õ ˜u™œð	ñ ô ñ
ô 
ˆŒõ ”I˜c 3¨¨1¨a°eÐ<Ñ<Ô<ˆŒ	ˆ	ˆ	r@   rN   r   c                óL  — |j         \  }}}}|                     ||||z  ¦  «                             dd¦  «                             ¦   «         }| j        D ]} ||||¦  «        }Œ|                      |                     dd¦  «                             ||||¦  «        ¦  «        |z   S rJ  )rZ   r[   rJ   rc   r\  r   )r:   rN   rf   rØ   rh   ri   Úx_seqÚblocks           r?   ro   zSimplifiedResidualGroup.forwardp  s¥   € Ø”W‰
ˆˆ1ˆa�Ø—’�q˜!˜Q ™UÑ#Ô#×-Ò-¨a°Ñ3Ô3×>Ò>Ñ@Ô@ˆØ”[ð 	'ð 	'ˆEØ�E˜%  AÑ&Ô&ˆEˆEØ�yŠy˜Ÿš¨¨AÑ.Ô.×3Ò3°A°q¸!¸QÑ?Ô?Ñ@Ô@À1ÑDÐDr@   rá   rp   r�   rv   s   @r?   rQ  rQ  c  sY   ø€ € € € € ð
=ð 
=ð 
=ð 
=ð 
=ð 
=ðEð Eð Eð Eð Eð Eð Eð Er@   rQ  c                  ól   ‡ — e Zd Zi Zdddddddddddddd	d
ddœd2ˆ fd$„Zd3ˆ fd(„Zd4d+„Zd5d0„Zd6d1„Zˆ xZ	S )7ÚFDATr   r   éx   r  r‘   Ngš™™™™™¹?r   r   r¸   F)Ú	num_in_chÚ
num_out_chr   Ú	embed_dimÚ
num_groupsÚdepth_per_groupr  r  Úffn_expansion_ratioÚaim_reduction_ratioÚgroup_block_patternÚdrop_path_raterí   Úupsampler_typeÚ	img_rangeÚunshuffle_modrd  r   re  r   rf  rg  rh  r  r  ri  r|   rj  rk  úlist[str] | Nonerl  rí   rm  rê   rn  ro  r"   r#   r$   c               ó@  •‡‡‡‡	‡
‡‡‡— ‰€ddgŠt          ¦   «                              ¦   «          ||c| _        | _        t	          j        dddd¦  «        | _        d| _        |r_|dk     rYd|z  }d}t          j	        t          j
        |¦  «        t          j        ||dz  z  ‰dddd¬	¦  «        ¦  «        | _        || _        nt          j        |‰dddd¬	¦  «        | _        |t          ‰¦  «        z  Š|‰z  }d
„ t	          j        d||¦  «        D ¦   «         Št          j	        ˆˆ
ˆˆˆ	ˆˆˆfd„t          |¦  «        D ¦   «         Ž | _        t          j        ‰‰dddd¬	¦  «        | _        t%          ||‰||d¦  «        | _        |                      | j        ¦  «         d S )Nr>  Úchannelr   r   r   r   r   Tr&   c                ó6   — g | ]}|                      ¦   «         ‘ŒS rT  )Úitem)rV  rN   s     r?   rZ  z!FDAT.__init__.<locals>.<listcomp>¢  s    € ÐGÐGÐG˜Aˆq�vŠv‰xŒxÐGÐGÐGr@   c                ó^   •— g | ])}t          ‰‰‰‰	‰‰‰‰|‰z  |d z   ‰z  …         ¦  «        ‘Œ*S )r   )rQ  )
rV  rW  Úadrj  Údprrf  ri  rk  r  r  s
     €€€€€€€€r?   rZ  z!FDAT.__init__.<locals>.<listcomp>¥  sc   ø€ ð ð ð ð õ (ØØØØØ'Ø'Ø'Ø˜˜B™ ! a¡%¨2¡Ð-Ô.ñ	ô 	ðð ð r@   F)r-   r.   rn  ÚupscalerF   r�   rˆ   rª   r   r§   ÚPixelUnshuffler0   Ú
conv_firstrU  Úlinspacerø   r    Ú
conv_afterrè   Ú	upsamplerÚapplyÚ_init_weights)r:   rd  re  r   rf  rg  rh  r  r  ri  rj  rk  rl  rí   rm  rn  ro  Ú	unshuffleÚtdrv  rw  r>   s       `  `````       @@€r?   r.   zFDAT.__init__|  sç  øøøøøøøøø€ ð( Ð&Ø#,¨iÐ"8ÐÝ‰Œ×ÒÑÔÐØ'0°%Ð$ˆŒ˜œÝ”K  1 a¨Ñ+Ô+ˆŒ	ØˆŒØð 		R˜U QšY˜YØ˜U™
ˆIØˆEÝ œmÝÔ! )Ñ,Ô,Ý”	˜) i°¡lÑ2°I¸qÀ!ÀQÈTÐRÑRÔRñô ˆDŒOð !ˆDŒHˆHå œi¨	°9¸aÀÀAÈDÐQÑQÔQˆDŒOØ�sÐ#6Ñ7Ô7Ñ7ˆØ˜"‰_ˆØGÐG¥¤°°>À2Ñ!FÔ!FÐGÑGÔGˆå”mðð ð ð ð ð ð ð ð ð ð õ ˜zÑ*Ô*ðñ ô ð
ˆŒõ  œ) I¨y¸!¸QÀÈÐNÑNÔNˆŒÝ&Ø˜E 9¨j¸'À1ñ
ô 
ˆŒð 	�
Š
�4Ô%Ñ&Ô&Ð&Ð&Ð&r@   Ú
state_dictr
   r	   c                ó\   •— | j         j        |d<    t          ¦   «         j        |g|¢R i |¤ŽS )Nzupsampler.MetaUpsample)r}  ró   r-   Úload_state_dict)r:   r‚  ÚargsÚkwargsr>   s       €r?   r„  zFDAT.load_state_dictº  s<   ø€ ð 04¬~Ô/Jˆ
Ð+Ñ,Ø&�u‰wŒwÔ& zÐC°DÐCÐCÐC¸FÐCÐCÐCr@   r½   ú	nn.Modulec                óÐ  — t          |t          j        ¦  «        rFt          |j        d¬¦  «         |j        �'t          j                             |j        d¦  «         d S d S t          |t          j        ¦  «        rFt          |j        d¬¦  «         |j        �'t          j                             |j        d¦  «         d S d S t          |t          j	        t          j
        z  ¦  «        rzt          |d¦  «        r,|j        �%t          j                             |j        d¦  «         t          |d¦  «        r0|j        �+t          j                             |j        d¦  «         d S d S d S d S )Nr(   r)   r   r'   r6   r¸   )rº   r   r	  r   r6   r'   r5   r7   r0   rx   Ú	GroupNormÚhasattrr¼   s     r?   r  zFDAT._init_weightsÃ  sU  € Ý�a�œÑ#Ô#ð 	1Ý˜!œ(¨Ð-Ñ-Ô-Ð-ØŒvÐ!Ý”×!Ò! !¤&¨!Ñ,Ô,Ð,Ð,Ð,ð "Ð!å˜�2œ9Ñ%Ô%ð 	1Ý˜!œ(¨Ð-Ñ-Ô-Ð-ØŒvÐ!Ý”×!Ò! !¤&¨!Ñ,Ô,Ð,Ð,Ð,ð "Ð!å˜�2œ<­"¬,Ñ6Ñ7Ô7ð 	1Ý�q˜&Ñ!Ô!ð - a¤fÐ&8Ý”×!Ò! !¤&¨!Ñ,Ô,Ð,Ý�q˜(Ñ#Ô#ð 1¨¬Ð(<Ý”×!Ò! !¤(¨CÑ0Ô0Ð0Ð0Ð0ð		1ð 	1ð1ð 1Ð(<Ð(<r@   rN   r   rM   Úwc                ó¸   — | j         dk    r|S | j         || j         z  z
  | j         z  }| j         || j         z  z
  | j         z  }t          j         |d|d|fd¦  «        S )Nr   Úreflect)rª   r`   )r:   rN   rM   r‹  Ú	mod_pad_hÚ	mod_pad_ws         r?   Úcheck_img_sizezFDAT.check_img_sizeÒ  sa   € ØŒ8�qŠ=ˆ=ØˆHØ”X  D¤H¡Ñ,°´Ñ8ˆ	Ø”X  D¤H¡Ñ,°´Ñ8ˆ	ÝŒu�Q˜˜I q¨)Ð4°iÑ@Ô@Ð@r@   c                ó>  — |j         \  }}}}|                      |||¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      ||z   ¦  «        }|d d …d d …d || j        z  …d || j        z  …f         S r~   )rZ   r�  rz  r    r|  r}  rx  )	r:   rN   Ú_bÚ_crM   r‹  Ú	x_shallowÚx_deepÚx_outs	            r?   ro   zFDAT.forwardÙ  s§   € Ø”w‰ˆˆB��1Ø×Ò  1 aÑ(Ô(ˆØ—O’O AÑ&Ô&ˆ	Ø—’˜YÑ'Ô'ˆØ—’ Ñ(Ô(ˆØ—’˜v¨	Ñ1Ñ2Ô2ˆØ�Q�Q�Q˜˜˜Ð-˜Q ¤Ñ-Ð-Ð/A°°T´\Ñ1AÐ/AÐAÔBÐBr@   )"rd  r   re  r   r   r   rf  r   rg  r   rh  r   r  r   r  r   ri  r|   rj  r   rk  rp  rl  r|   rí   r   rm  rê   rn  r|   ro  r"   r#   r$   )r‚  r
   r#   r	   )r½   r‡  r#   r$   )rN   r   rM   r   r‹  r   r#   r   rp   )
rq   rr   rs   Úhyperparametersr.   r„  r  r�  ro   ru   rv   s   @r?   rb  rb  x  së   ø€ € € € € à€Oð
 ØØØØØ ØØØ%(Ø#$Ø04Ø #ØØ&6ØØ#ð%<'ð <'ð <'ð <'ð <'ð <'ð <'ð <'ð|Dð Dð Dð Dð Dð Dð1ð 1ð 1ð 1ðAð Að Að AðCð Cð Cð Cð Cð Cð Cð Cr@   rb  ))Ú
__future__r   rù   Útypingr   Únumpyr«   rF   Útorch.nn.functionalr   rÍ   r`   Úeinopsr   r   Útorch.nn.initr   Útorch.nn.modules.moduler	   Ú#spandrel.__helpers.model_descriptorr
   Úspandrel.utilr   Úspandrel.util.timmr   rþ   rê   ÚModuler   rx   r�   rã   r§   rè   r  r  r  r-  r<  rQ  rb  rT  r@   r?   ú<module>r£     s|  ðà "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5à 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø /Ð /Ð /Ð /Ð /Ð /Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'àðô€
ð �jÐ"2°E¸7ÐBÔC€ðTð Tð Tð Tð TˆrŒyñ Tô Tð TðnIð Ið Ið Ið I�”	ñ Iô Ið Ið&Pð Pð Pð Pð PˆbŒiñ Pô Pð Pðf#ð #ð #ð #ð #ˆŒñ #ô #ð #ðT
ð T
ð T
ð T
ð T
�B”Mñ T
ô T
ð T
ðp3ð 3ð 3ð 3ð 3 ¤ñ 3ô 3ð 3ðl
ð 
ð 
ð 
ð 
˜2œ9ñ 
ô 
ð 
ð00ð 0ð 0ð 0ð 0�B”Iñ 0ô 0ð 0ð<(ð (ð (ð (ð (�B”Iñ (ô (ð (ð.!ð !ð !ð !ð !˜œñ !ô !ð !ðHEð Eð Eð Eð E˜bœiñ Eô Eð Eð* ÐÑÔðgCð gCð gCð gCð gCˆ2Œ9ñ gCô gCñ ÔðgCð gCð gCr@   