Ë
    éÓ^j!  ã                   ó  — d Z ddlmZmZ ddlZddlmZ 	 ddlm	Z	 dZ
	 ddlmZmZ dZ eed	«      Zdadd
efd„Zdd
efd„Zd„ Zdd„Z	 	 	 d dej.                  dedeej.                     deej.                     dedej.                  fd„Z	 	 	 d dej.                  dee   deej.                     deej.                     dedej.                  fd„Z	 	 d!dej.                  dee   deej.                     defd„Z	 	 d!dej.                  dee   deej.                     dedej.                  f
d„Z	 	 d!dej.                  dee   deej.                     defd„Z	 	 d!dej.                  dee   deej.                     dedej.                  f
d„Z	 	 d!dej.                  dee   deej.                     defd„Z 	 	 d!dej.                  dee   deej.                     dedej.                  f
d„Z!y# e$ r dZ
Y �Œ×w xY w# e$ r dZY �ŒÚw xY w)"a   'Fast' Normalization Functions

For GroupNorm and LayerNorm these functions bypass typical AMP upcast to float32.

Additionally, for LayerNorm, the APEX fused LN is used if available (which also does not upcast)

Hacked together by / Copyright 2022 Ross Wightman
é    )ÚListÚOptionalN)Ú
functional)Úfused_layer_norm_affineTF)Úfused_rms_norm_affineÚfused_rms_normÚrms_normÚdevicec                 óÄ   — 	 t        j                  | «      S # t        t        f$ r9 | dk(  rt        j                  «       cY S | dk(  sJ ‚t        j
                  «       cY S w xY w©NÚcpuÚcuda)ÚtorchÚget_autocast_dtypeÚAttributeErrorÚ	TypeErrorÚget_autocast_cpu_dtypeÚget_autocast_gpu_dtype©r
   s    ú`/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/layers/fast_norm.pyr   r   !   s_   € ð2Ü×'Ñ'¨Ó/Ð/øÜœIÐ&ò 2à�UŠ?Ü×/Ñ/Ó1Ò1à˜VÒ#Ð#Ð#Ü×/Ñ/Ó1Ò1ð2ús   ‚ —(AÁAÁAc                 ó¸   — 	 t        j                  | «      S # t        $ r9 | dk(  rt        j                  «       cY S | dk(  sJ ‚t        j                  «       cY S w xY wr   )r   Úis_autocast_enabledr   Úis_autocast_cpu_enabledr   s    r   r   r   -   sZ   € ð/Ü×(Ñ(¨Ó0Ð0øÜò /à�UŠ?Ü×0Ñ0Ó2Ò2à˜VÒ#Ð#Ð#Ü×,Ñ,Ó.Ò.ð/ús   ‚ —"A»AÁAc                  ó   — t         S ©N©Ú_USE_FAST_NORM© ó    r   Úis_fast_normr    9   s   € ÜÐr   c                 ó   — | a y r   r   )Úenables    r   Úset_fast_normr#   =   s   € à�Nr   ÚxÚ
num_groupsÚweightÚbiasÚepsÚreturnc                 ó*  — t         j                  j                  «       rt        j                  | ||||«      S t        | j                  j                  «      rZt        | j                  j                  «      }| j                  |«      |�|j                  |«      nd |�|j                  |«      nd }}} t         j                  j                  | j                  j                  d¬«      5  t        j                  | ||||«      cd d d «       S # 1 sw Y   y xY w©NF©Údevice_typeÚenabled)r   ÚjitÚis_scriptingÚFÚ
group_normr   r
   Útyper   ÚtoÚampÚautocast)r$   r%   r&   r'   r(   Údts         r   Úfast_group_normr8   B   sÑ   € ô ‡y�y×ÑÔä�|‰|˜A˜z¨6°4¸Ó=Ð=ä˜1Ÿ8™8Ÿ=™=Ô)ô   §¡§¡Ó.ˆà�D‰D�‹HØ#Ð/ˆF�I‰I�bŒM°TØÐ+ˆD�G‰G�BŒK°ð ˆ6ˆô 
�‰×	Ñ	¨¯©¯©¸uÐ	Ó	Eñ >Ü�|‰|˜A˜z¨6°4¸Ó=÷>÷ >ò >ús   Ã&D	Ä	DÚnormalized_shapec                 óT  — t         j                  j                  «       rt        j                  | ||||«      S t
        rt        | ||||«      S t        | j                  j                  «      rZt        | j                  j                  «      }| j                  |«      |�|j                  |«      nd |�|j                  |«      nd }}} t         j                  j                  | j                  j                  d¬«      5  t        j                  | ||||«      cd d d «       S # 1 sw Y   y xY wr+   )r   r/   r0   r1   Ú
layer_normÚhas_apexr   r   r
   r3   r   r4   r5   r6   )r$   r9   r&   r'   r(   r7   s         r   Úfast_layer_normr=   [   sî   € ô ‡y�y×ÑÔä�|‰|˜AÐ/°¸¸sÓCÐCåÜ& q¨&°$Ð8HÈ#ÓNÐNä˜1Ÿ8™8Ÿ=™=Ô)ô   §¡§¡Ó.ˆà�D‰D�‹HØ#Ð/ˆF�I‰I�bŒM°TØÐ+ˆD�G‰G�BŒK°ð ˆ6ˆô 
�‰×	Ñ	¨¯©¯©¸uÐ	Ó	Eñ DÜ�|‰|˜AÐ/°¸¸sÓC÷D÷ Dò Dús   Ã;DÄD'c                 ó~  — t        |«      }| j                  d«      }t        j                  j	                  «       r.|dk(  sJ ‚t        j
                  |d¬«      j                  d«      }n2t        t        d| dz
  d«      «      }t        j
                  ||d¬«      }| t        j                  ||z   «      z  } |�| |z  } | S )Né   é   éÿÿÿÿ©ÚdimT©rC   Úkeepdim)
ÚlenÚpowr   r/   r0   ÚmeanÚ	unsqueezeÚtupleÚrangeÚrsqrt©r$   r9   r&   r(   Ú	norm_ndimÚvÚdimss          r   r	   r	   w   s«   € ô Ð$Ó%€IØ	�‰ˆa‹€AÜ‡y�y×ÑÔð ˜AŠ~Ðˆ~Ü�J‰J�q˜bÔ!×+Ñ+¨BÓ/‰ä”U˜2 	˜z¨A™~¨rÓ2Ó3ˆÜ�J‰J�q˜d¨DÔ1ˆØ	ŒE�K‰K˜˜C™Ó Ñ €AØÐØ�‰JˆØ€Hr   c                 ó\  — t         j                  j                  «       rt        | |||«      S t        r|€t        | ||«      S t        | |||«      S t        | j                  j                  «      rEt        | j                  j                  «      }| j                  |«      |�|j                  |«      nd }} t         j                  j                  | j                  j                  d¬«      5  t        rt        j                  | |||«      } nt        | |||«      } d d d «       | S # 1 sw Y   | S xY wr+   )r   r/   r0   r	   Úhas_apex_rmsnormr   r   r   r
   r3   r   r4   r5   r6   Úhas_torch_rms_normr1   ©r$   r9   r&   r(   r7   s        r   Úfast_rms_normrU   Ž   sú   € ô ‡y�y×ÑÔä˜Ð+¨V°SÓ9Ð9åØˆ>Ü! !Ð%5°sÓ;Ð;ä(¨¨FÐ4DÀcÓJÐJä˜1Ÿ8™8Ÿ=™=Ô)ô   §¡§¡Ó.ˆØ—D‘D˜“H¨vÐ/A˜fŸi™i¨œmÀtˆ6ˆä	�‰×	Ñ	¨¯©¯©¸uÐ	Ó	Eñ ;ÝÜ—
‘
˜1Ð.°¸Ó<‰Aä˜Ð,¨f°cÓ:ˆA÷	;ð €H÷;ð €Hús   Ã).D!Ä!D+c                 óà   — t        |«      dk(  sJ ‚| j                  d«      }t        j                  |dd¬«      }| t        j                  ||z   «      z  } |�| |j                  dddd«      z  } | S )Nr@   r?   TrD   rA   )rF   rG   r   rH   rL   Úreshape)r$   r9   r&   r(   rO   s        r   Ú
rms_norm2drX   ­   sr   € ô ÐÓ  AÒ%Ð%Ð%Ø	�‰ˆa‹€AÜ�
‰
�1˜! TÔ*€AØ	ŒE�K‰K˜˜C™Ó Ñ €AØÐØ�—‘˜q " a¨Ó+Ñ+ˆØ€Hr   c                 óp  — t         j                  j                  «       rt        | |||«      S t        rF| j                  dddd«      } |€t        | ||«      } nt        | |||«      } | j                  dddd«      } t        | j                  j                  «      rEt        | j                  j                  «      }| j                  |«      |�|j                  |«      nd }} t         j                  j                  | j                  j                  d¬«      5  t        | |||«      } d d d «       | S # 1 sw Y   | S xY w)Nr   r?   é   r@   Fr,   )r   r/   r0   rX   rR   Úpermuter   r   r   r
   r3   r   r4   r5   r6   rT   s        r   Úfast_rms_norm2dr\   ¼   s  € ô ‡y�y×ÑÔä˜!Ð-¨v°sÓ;Ð;åØ�I‰I�a˜˜A˜qÓ!ˆØˆ>Ü˜qÐ"2°CÓ8‰Aä% a¨Ð1AÀ3ÓGˆAØ�I‰I�a˜˜A˜qÓ!ˆä˜1Ÿ8™8Ÿ=™=Ô)ô   §¡§¡Ó.ˆØ—D‘D˜“H¨vÐ/A˜fŸi™i¨œmÀtˆ6ˆä	�‰×	Ñ	¨¯©¯©¸uÐ	Ó	Eñ 9Ü�qÐ*¨F°CÓ8ˆ÷9ð €H÷9ð €Hús   ÄD+Ä+D5c                 ó\  — t        |«      }t        j                  j                  «       r.|dk(  sJ ‚t        j                  | d¬«      j                  d«      }n2t        t        d| dz
  d«      «      }t        j                  | |d¬«      }| t        j                  ||z   «      z  } |�| |z  } | S )Nr@   rA   rB   TrD   )	rF   r   r/   r0   ÚvarrI   rJ   rK   rL   rM   s          r   Úsimple_normr_   Ú   sž   € ô Ð$Ó%€IÜ‡y�y×ÑÔð ˜AŠ~Ðˆ~Ü�I‰I�a˜RÔ ×*Ñ*¨2Ó.‰ä”U˜2 	˜z¨A™~¨rÓ2Ó3ˆÜ�I‰I�a˜T¨4Ô0ˆØ	ŒE�K‰K˜˜C™Ó Ñ €AØÐØ�‰JˆØ€Hr   c                 óØ  — t         j                  j                  «       rt        | |||«      S t	        | j
                  j                  «      rEt        | j
                  j                  «      }| j                  |«      |�|j                  |«      nd }} t         j                  j                  | j
                  j                  d¬«      5  t        | |||«      } d d d «       | S # 1 sw Y   | S xY wr+   )r   r/   r0   r_   r   r
   r3   r   r4   r5   r6   rT   s        r   Úfast_simple_normra   ð   s´   € ô ‡y�y×ÑÔä˜1Ð.°¸Ó<Ð<ä˜1Ÿ8™8Ÿ=™=Ô)ô   §¡§¡Ó.ˆØ—D‘D˜“H¨vÐ/A˜fŸi™i¨œmÀtˆ6ˆä	�‰×	Ñ	¨¯©¯©¸uÐ	Ó	Eñ :Ü˜Ð+¨V°SÓ9ˆ÷:à€H÷:à€Hús   ÃCÃC))r   )T)NNçñhãˆµøä>)Nrb   )"Ú__doc__Útypingr   r   r   Útorch.nnr   r1   Ú#apex.normalization.fused_layer_normr   r<   ÚImportErrorr   r   rR   ÚhasattrrS   r   Ústrr   r   r    r#   ÚTensorÚintÚfloatr8   r=   r	   rU   rX   r\   r_   ra   r   r   r   ú<module>rm      s  ðñ÷ "ã Ý $ðÝKØ€HðßYØÐñ
 ˜Q 
Ó+Ð ð €ñ	2˜só 	2ñ	/ ó 	/òóð &*Ø#'Øñ>Ø‡|�|ð>àð>ð �U—\‘\Ñ"ð>ð �5—<‘<Ñ
 ð	>ð
 
ð>ð ‡\�\ó>ð8 &*Ø#'ØñDØ‡|�|ðDà˜3‘iðDð �U—\‘\Ñ"ðDð �5—<‘<Ñ
 ð	Dð
 
ðDð ‡\�\óDð> &*Øñ	Ø‡|�|ðà˜3‘iðð �U—\‘\Ñ"ðð 
ó	ð4 &*Øñ	Ø‡|�|ðà˜3‘iðð �U—\‘\Ñ"ðð 
ð	ð
 ‡\�\óðD &*Øñ	Ø‡|�|ðà˜3‘iðð �U—\‘\Ñ"ðð 
ó	ð$ &*Øñ	Ø‡|�|ðà˜3‘iðð �U—\‘\Ñ"ðð 
ð	ð
 ‡\�\óðB &*Øñ	Ø‡|�|ðà˜3‘iðð �U—\‘\Ñ"ðð 
ó	ð2 &*Øñ	Ø‡|�|ðà˜3‘iðð �U—\‘\Ñ"ðð 
ð	ð
 ‡\�\ôøð ò ØƒHðûð ò ØÓðús"   –G+ Ÿ
G9 Ç+G6Ç5G6Ç9HÈH