Ë
    éÓ^jœ?  ã            	       ó*  — d Z ddlmZmZmZmZ ddlZddlmZ ddl	mc m
Z ddlmZ ddlmZ d%defd„Zd%defd	„Zd%defd
„Zd&deeee   f   defd„Zd'dededefd„Zd(dedededefd„Zd)dedefd„Z G d„ dej4                  «      Z G d„ dej4                  «      Z G d„ dej4                  «      Z G d„ dej4                  «      Z G d„ de«      Z G d„ dej4                  «      Z  G d„ d e «      Z! G d!„ d"ej4                  «      Z" G d#„ d$e"«      Z#y)*a7   EvoNorm in PyTorch

Based on `Evolving Normalization-Activation Layers` - https://arxiv.org/abs/2004.02967
@inproceedings{NEURIPS2020,
 author = {Liu, Hanxiao and Brock, Andy and Simonyan, Karen and Le, Quoc},
 booktitle = {Advances in Neural Information Processing Systems},
 editor = {H. Larochelle and M. Ranzato and R. Hadsell and M. F. Balcan and H. Lin},
 pages = {13539--13550},
 publisher = {Curran Associates, Inc.},
 title = {Evolving Normalization-Activation Layers},
 url = {https://proceedings.neurips.cc/paper/2020/file/9d4c03631b8b0c85ae08bf05eda37d0f-Paper.pdf},
 volume = {33},
 year = {2020}
}

An attempt at getting decent performing EvoNorms running in PyTorch.
While faster than other PyTorch impl, still quite a ways off the built-in BatchNorm
in terms of memory usage and throughput on GPUs.

I'm testing these modules on TPU w/ PyTorch XLA. Promising start but
currently working around some issues with builtin torch/tensor.var/std. Unlike
GPU, similar train speeds for EvoNormS variants and BatchNorm.

Hacked together by / Copyright 2020 Ross Wightman
é    )ÚOptionalÚSequenceÚTypeÚUnionNé   )Úcreate_act_layer)Ú_assertÚepsc                 óè   — | j                  «       j                  ddd¬«      j                  |«      j                  «       j	                  | j
                  «      }|j                  | j                  «      S )N©é   é   FT©ÚdimÚunbiasedÚkeepdim)ÚfloatÚvarÚaddÚsqrtÚtoÚdtypeÚexpandÚshape©Úxr
   Ústds      ú_/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/layers/evo_norm.pyÚinstance_stdr   $   sU   € Ø
�'‰'‹)�-‰-˜F¨U¸Dˆ-Ó
A×
EÑ
EÀcÓ
J×
OÑ
OÓ
Q×
TÑ
TÐUV×U\ÑU\Ó
]€CØ�:‰:�a—g‘gÓÐó    c                 óŒ   — t        | d¬«      j                  |«      j                  «       }|j                  | j                  «      S )Nr   )r   )Ú
manual_varr   r   r   r   r   s      r   Úinstance_std_tpur#   )   s5   € Ü
�Q˜FÔ
#×
'Ñ
'¨Ó
,×
1Ñ
1Ó
3€CØ�:‰:�a—g‘gÓÐr    c                 ó  — | j                  «       j                  «       j                  dd¬«      j                  |«      j	                  «       j                  | j                  «      }|j                  | j                  «      S )Nr   T©r   r   )	r   ÚsquareÚmeanr   r   r   r   r   r   )r   r
   Úrmss      r   Úinstance_rmsr)   /   s\   € Ø
�'‰'‹)×
Ñ
Ó
×
!Ñ
! f°dÐ
!Ó
;×
?Ñ
?ÀÓ
D×
IÑ
IÓ
K×
NÑ
NÈqÏwÉwÓ
W€CØ�:‰:�a—g‘gÓÐr    r   Údiff_sqmc                 óÂ   — | j                  |d¬«      }|r-| | z  j                  |d¬«      ||z  z
  j                  d«      }|S | |z
  | |z
  z  j                  |d¬«      }|S )NTr%   r   )r'   Úclamp)r   r   r*   Úxmr   s        r   r"   r"   4   sq   € Ø	
�‰�C ˆÓ	&€BÙà�A‘�|‰| ¨Tˆ|Ó2°b¸2±gÑ>×EÑEÀaÓHˆð €Jð �B‘˜1˜r™6Ñ"×(Ñ(¨S¸$Ð(Ó?ˆØ€Jr    ÚgroupsÚflattenc                 óN  — | j                   \  }}}}| j                  }t        ||z  dk(  d«       |rb| j                  ||d«      } | j	                  «       j                  ddd¬«      j                  |«      j                  «       j                  |«      }	nf| j                  ||||z  ||«      } | j	                  «       j                  ddd¬«      j                  |«      j                  «       j                  |«      }	|	j                  | j                   «      j                  ||||«      S )	Nr   Ú éÿÿÿÿr   FTr   ©r   r   é   )
r   r   r	   Úreshaper   r   r   r   r   r   )
r   r.   r
   r/   ÚBÚCÚHÚWÚx_dtyper   s
             r   Ú	group_stdr;   >   sõ   € Ø—‘�J€A€qˆ!ˆQØ�g‰g€GÜˆA�‰J˜!‰O˜RÔ ÙØ�I‰I�a˜ Ó$ˆØ�g‰g‹i�m‰m ¨E¸4ˆmÓ@×DÑDÀSÓI×NÑNÓP×SÑSÐT[Ó\‰à�I‰I�a˜  f¡¨a°Ó3ˆØ�g‰g‹i�m‰m 	°EÀ4ˆmÓH×LÑLÈSÓQ×VÑVÓX×[Ñ[Ð\cÓdˆØ�:‰:�a—g‘gÓ×&Ñ& q¨!¨Q°Ó2Ð2r    c                 óp  — | j                   \  }}}}t        ||z  dk(  d«       |r"| j                  ||d«      } t        | d|¬«      }	n&| j                  ||||z  ||«      } t        | d|¬«      }	|	j	                  |«      j                  «       j                  | j                   «      j                  ||||«      S )Nr   r1   r2   )r   r*   r3   )r   r	   r5   r"   r   r   r   )
r   r.   r
   r*   r/   r6   r7   r8   r9   r   s
             r   Úgroup_std_tpur=   K   s©   € ð —‘�J€A€qˆ!ˆQÜˆA�‰J˜!‰O˜RÔ ÙØ�I‰I�a˜ Ó$ˆÜ˜ ¨XÔ6‰à�I‰I�a˜  f¡¨a°Ó3ˆÜ˜ 	°HÔ=ˆØ�7‰7�3‹<×ÑÓ×%Ñ% a§g¡gÓ.×6Ñ6°q¸!¸QÀÓBÐBr    c                 ó   — | j                   \  }}}}t        ||z  dk(  d«       | j                  }| j                  ||||z  ||«      } | j	                  «       j                  «       j                  dd¬«      j                  |«      j                  «       j                  |«      }|j                  | j                   «      j                  ||||«      S )Nr   r1   r3   Tr%   )r   r	   r   r5   r   r&   r'   r   Úsqrt_r   r   )	r   r.   r
   r6   r7   r8   r9   r:   r(   s	            r   Ú	group_rmsr@   Z   s°   € Ø—‘�J€A€qˆ!ˆQÜˆA�‰J˜!‰O˜RÔ Ø�g‰g€GØ	�	‰	�!�V˜Q &™[¨!¨QÓ/€AØ
�'‰'‹)×
Ñ
Ó
×
!Ñ
! i¸Ð
!Ó
>×
BÑ
BÀ3Ó
G×
MÑ
MÓ
O×
RÑ
RÐSZÓ
[€CØ�:‰:�a—g‘gÓ×&Ñ& q¨!¨Q°Ó2Ð2r    c            	       óH   ‡ — e Zd Z	 	 	 	 	 ddedededefˆ fd„Zd„ Zd„ Zˆ xZ	S )	ÚEvoNorm2dB0Únum_featuresÚ	apply_actÚmomentumr
   c                 óÞ  •— ||dœ}t         ‰	| �  «        || _        || _        || _        t        j                  t        j                  |fi |¤Ž«      | _	        t        j                  t        j                  |fi |¤Ž«      | _
        |r)t        j                  t        j                  |fi |¤Ž«      nd | _        | j                  dt        j                  |fi |¤Ž«       | j                  «        y ©N©Údevicer   Úrunning_var)ÚsuperÚ__init__rD   rE   r
   ÚnnÚ	ParameterÚtorchÚemptyÚweightÚbiasÚvÚregister_bufferÚonesÚreset_parameters©
ÚselfrC   rD   rE   r
   rI   r   Ú_ÚddÚ	__class__s
            €r   rL   zEvoNorm2dB0.__init__d   s¸   ø€ ð ¨Ñ/ˆÜ‰ÑÔØ"ˆŒØ ˆŒØˆŒÜ—l‘l¤5§;¡;¨|Ñ#B¸rÑ#BÓCˆŒÜ—L‘L¤§¡¨\Ñ!@¸RÑ!@ÓAˆŒ	ÙBK”—‘œeŸk™k¨,Ñ=¸"Ñ=Ô>ÐQUˆŒØ×Ñ˜]¬E¯J©J°|Ñ,JÀrÑ,JÔKà×ÑÕr    c                 ó  — t         j                  j                  | j                  «       t         j                  j	                  | j
                  «       | j                  �*t         j                  j                  | j                  «       y y ©N©rM   ÚinitÚones_rQ   Úzeros_rR   rS   ©rX   s    r   rV   zEvoNorm2dB0.reset_parametersz   óM   € Ü
�‰�‰�d—k‘kÔ"Ü
�‰�‰�t—y‘yÔ!Ø�6‰6ÐÜ�G‰G�M‰M˜$Ÿ&™&Õ!ð r    c                 óî  — t        |j                  «       dk(  d«       |j                  }d}| j                  ��f| j                  rž|j                  «       j                  dd¬«      }|j                  «       |j                  d   z  }| j                  j                  | j                  d| j                  z
  z  |j                  «       | j                  z  ||dz
  z  z  z   «       n| j                  }|j                  | j                  «      j                  «       j!                  |«      j#                  |«      j%                  |«      }| j                  j!                  |«      j#                  |«      }||z  t'        || j                  «      z   }||j)                  |«      z  }|| j*                  j!                  |«      j#                  |«      z  | j,                  j!                  |«      j#                  |«      z   S ©Nr4   úexpected 4D input©r   r2   r   r   )r   r   r   F)r   r   r   )r	   r   r   rS   Útrainingr   r   Únumelr   rJ   Úcopy_rE   Údetachr   r
   r?   r   ÚviewÚ	expand_asr   ÚmaxrQ   rR   )	rX   r   r:   Úv_shaper   ÚnÚleftrS   Úrights	            r   ÚforwardzEvoNorm2dB0.forward€   sŠ  € Ü�—‘“˜1‘Ð1Ô2Ø—'‘'ˆØˆØ�6‰6ÑØ�}Š}Ø—g‘g“i—m‘m¨	¸E�mÓB�à—G‘G“I §¡¨¡
Ñ*�Ø× Ñ ×&Ñ&Ø×$Ñ$¨¨D¯M©MÑ(9Ñ:Ø—J‘J“L 4§=¡=Ñ0°A¸¸Q¹±KÑ@ñAõBð ×&Ñ&�Ø—7‘7˜4Ÿ8™8Ó$×*Ñ*Ó,×/Ñ/°Ó8×=Ñ=¸gÓF×PÑPÐQRÓSˆDØ—‘—	‘	˜'Ó"×'Ñ'¨Ó0ˆAØ˜‘EœL¨¨D¯H©HÓ5Ñ5ˆEØ�D—H‘H˜U“OÑ#ˆAØ�4—;‘;—>‘> 'Ó*×/Ñ/°Ó8Ñ8¸4¿9¹9¿<¹<ÈÓ;P×;UÑ;UÐV]Ó;^Ñ^Ð^r    )Tçš™™™™™¹?çü©ñÒMbP?NN©
Ú__name__Ú
__module__Ú__qualname__ÚintÚboolr   rL   rV   rs   Ú__classcell__©r[   s   @r   rB   rB   c   sJ   ø„ ð #Ø!ØØØñ àð ð ð ð ð	 ð
 õ ò,"ö_r    rB   c            	       óH   ‡ — e Zd Z	 	 	 	 	 ddedededefˆ fd„Zd„ Zd„ Zˆ xZ	S )	ÚEvoNorm2dB1rC   rD   rE   r
   c                 óz  •— ||dœ}t         ‰	| �  «        || _        || _        || _        t        j                  t        j                  |fi |¤Ž«      | _	        t        j                  t        j                  |fi |¤Ž«      | _
        | j                  dt        j                  |fi |¤Ž«       | j                  «        y rG   ©rK   rL   rD   rE   r
   rM   rN   rO   rP   rQ   rR   rT   rU   rV   rW   s
            €r   rL   zEvoNorm2dB1.__init__–   ó•   ø€ ð ¨Ñ/ˆÜ‰ÑÔØ"ˆŒØ ˆŒØˆŒÜ—l‘l¤5§;¡;¨|Ñ#B¸rÑ#BÓCˆŒÜ—L‘L¤§¡¨\Ñ!@¸RÑ!@ÓAˆŒ	Ø×Ñ˜]¬E¯J©J°|Ñ,JÀrÑ,JÔKà×ÑÕr    c                 ó¨   — t         j                  j                  | j                  «       t         j                  j	                  | j
                  «       y r]   ©rM   r_   r`   rQ   ra   rR   rb   s    r   rV   zEvoNorm2dB1.reset_parameters«   ó*   € Ü
�‰�‰�d—k‘kÔ"Ü
�‰�‰�t—y‘yÕ!r    c                 óÆ  — t        |j                  «       dk(  d«       |j                  }d}| j                  �rR| j                  rÁ|j                  «       j                  dd¬«      }|j                  «       |j                  d   z  }| j                  j                  | j                  d| j                  z
  z  |j                  «       j                  | j                  j                  «      | j                  z  ||dz
  z  z  z   «       n| j                  }|j                  |«      j                  |«      }|j                  | j                   «      j#                  «       }|dz   t%        || j                   «      z  }||j'                  |«      z  }|| j(                  j                  |«      j                  |«      z  | j*                  j                  |«      j                  |«      z   S re   ©r	   r   r   rD   rh   r   r   ri   r   rJ   rj   rE   rk   r   rl   r   r
   r?   r)   rn   rQ   rR   ©rX   r   r:   ro   r   rp   rq   rr   s           r   rs   zEvoNorm2dB1.forward¯   sz  € Ü�—‘“˜1‘Ð1Ô2Ø—'‘'ˆØˆØ�>‹>Ø�}Š}Ø—g‘g“i—m‘m¨	¸E�mÓB�Ø—G‘G“I §¡¨¡
Ñ*�Ø× Ñ ×&Ñ&Ø×$Ñ$¨¨D¯M©MÑ(9Ñ:Ø—J‘J“L—O‘O D×$4Ñ$4×$:Ñ$:Ó;¸d¿m¹mÑKÈqÐTUÐXYÑTYÉ{Ñ[ñ\õ]ð ×&Ñ&�Ø—&‘&˜“/×&Ñ& wÓ/ˆCØ—7‘7˜4Ÿ8™8Ó$×*Ñ*Ó,ˆDØ˜‘Uœl¨1¨d¯h©hÓ7Ñ7ˆEØ�D—H‘H˜U“OÑ#ˆAØ�4—;‘;×#Ñ# GÓ,×/Ñ/°Ó8Ñ8¸4¿9¹9¿>¹>È'Ó;R×;UÑ;UÐV]Ó;^Ñ^Ð^r    ©Trt   çñhãˆµøä>NNrv   r}   s   @r   r   r   •   óJ   ø„ ð #Ø!ØØØñ àð ð ð ð ð	 ð
 õ ò*"ö_r    r   c            	       óH   ‡ — e Zd Z	 	 	 	 	 ddedededefˆ fd„Zd„ Zd„ Zˆ xZ	S )	ÚEvoNorm2dB2rC   rD   rE   r
   c                 óz  •— ||dœ}t         ‰	| �  «        || _        || _        || _        t        j                  t        j                  |fi |¤Ž«      | _	        t        j                  t        j                  |fi |¤Ž«      | _
        | j                  dt        j                  |fi |¤Ž«       | j                  «        y rG   r�   rW   s
            €r   rL   zEvoNorm2dB2.__init__Ä   r‚   r    c                 ó¨   — t         j                  j                  | j                  «       t         j                  j	                  | j
                  «       y r]   r„   rb   s    r   rV   zEvoNorm2dB2.reset_parametersÙ   r…   r    c                 óÀ  — t        |j                  «       dk(  d«       |j                  }d}| j                  �rO| j                  rÁ|j                  «       j                  dd¬«      }|j                  «       |j                  d   z  }| j                  j                  | j                  d| j                  z
  z  |j                  «       j                  | j                  j                  «      | j                  z  ||dz
  z  z  z   «       n| j                  }|j                  |«      j                  |«      }|j                  | j                   «      j#                  «       }t%        || j                   «      |z
  }||j'                  |«      z  }|| j(                  j                  |«      j                  |«      z  | j*                  j                  |«      j                  |«      z   S re   r‡   rˆ   s           r   rs   zEvoNorm2dB2.forwardÝ   sv  € Ü�—‘“˜1‘Ð1Ô2Ø—'‘'ˆØˆØ�>‹>Ø�}Š}Ø—g‘g“i—m‘m¨	¸E�mÓB�Ø—G‘G“I §¡¨¡
Ñ*�Ø× Ñ ×&Ñ&Ø×$Ñ$¨¨D¯M©MÑ(9Ñ:Ø—J‘J“L—O‘O D×$4Ñ$4×$:Ñ$:Ó;¸d¿m¹mÑKÈqÐTUÐXYÑTYÉ{Ñ[ñ\õ]ð ×&Ñ&�Ø—&‘&˜“/×&Ñ& wÓ/ˆCØ—7‘7˜4Ÿ8™8Ó$×*Ñ*Ó,ˆDÜ   D§H¡HÓ-°Ñ1ˆEØ�D—H‘H˜U“OÑ#ˆAØ�4—;‘;×#Ñ# GÓ,×/Ñ/°Ó8Ñ8¸4¿9¹9¿>¹>È'Ó;R×;UÑ;UÐV]Ó;^Ñ^Ð^r    r‰   rv   r}   s   @r   r�   r�   Ã   r‹   r    r�   c                   óT   ‡ — e Zd Z	 	 	 	 	 	 d	dededee   dedef
ˆ fd„Zd„ Zd„ Z	ˆ xZ
S )
ÚEvoNorm2dS0rC   r.   Ú
group_sizerD   r
   c                 óÀ  •— ||dœ}	t         ‰
| �  «        || _        |r||z  dk(  sJ ‚||z  | _        n|| _        || _        t        j                  t        j                  |fi |	¤Ž«      | _	        t        j                  t        j                  |fi |	¤Ž«      | _
        |r)t        j                  t        j                  |fi |	¤Ž«      nd | _        | j                  «        y ©NrH   r   )rK   rL   rD   r.   r
   rM   rN   rO   rP   rQ   rR   rS   rV   )rX   rC   r.   r“   rD   r
   rI   r   rY   rZ   r[   s             €r   rL   zEvoNorm2dS0.__init__ò   s¼   ø€ ð ¨Ñ/ˆÜ‰ÑÔØ"ˆŒÙØ *Ñ,°Ò1Ð1Ð1Ø&¨*Ñ4ˆD�Kà ˆDŒKØˆŒÜ—l‘l¤5§;¡;¨|Ñ#B¸rÑ#BÓCˆŒÜ—L‘L¤§¡¨\Ñ!@¸RÑ!@ÓAˆŒ	ÙBK”—‘œeŸk™k¨,Ñ=¸"Ñ=Ô>ÐQUˆŒà×ÑÕr    c                 ó  — t         j                  j                  | j                  «       t         j                  j	                  | j
                  «       | j                  �*t         j                  j                  | j                  «       y y r]   r^   rb   s    r   rV   zEvoNorm2dS0.reset_parameters  rc   r    c                 óä  — t        |j                  «       dk(  d«       |j                  }d}| j                  �b| j                  j	                  |«      j                  |«      }|||z  j                  «       z  t        || j                  | j                  «      z  }|| j                  j	                  |«      j                  |«      z  | j                  j	                  |«      j                  |«      z   S ©Nr4   rf   rg   )r	   r   r   rS   rl   r   Úsigmoidr;   r.   r
   rQ   rR   )rX   r   r:   ro   rS   s        r   rs   zEvoNorm2dS0.forward  sº   € Ü�—‘“˜1‘Ð1Ô2Ø—'‘'ˆØˆØ�6‰6ÐØ—‘—‘˜GÓ$×'Ñ'¨Ó0ˆAØ�Q˜‘U—O‘OÓ%Ñ%¬	°!°T·[±[À$Ç(Á(Ó(KÑKˆAØ�4—;‘;×#Ñ# GÓ,×/Ñ/°Ó8Ñ8¸4¿9¹9¿>¹>È'Ó;R×;UÑ;UÐV]Ó;^Ñ^Ð^r    )é    NTrŠ   NN)rw   rx   ry   rz   r   r{   r   rL   rV   rs   r|   r}   s   @r   r’   r’   ñ   s[   ø„ ð Ø(,Ø"ØØØñ àð ð ð ð ! ™ð	 ð
 ð ð õ ò4"ö_r    r’   c                   óN   ‡ — e Zd Z	 	 	 	 	 	 ddededee   dedef
ˆ fd„Zd„ Zˆ xZ	S )	ÚEvoNorm2dS0arC   r.   r“   rD   r
   c           	      ó2   •— t         ‰	| �  |||||||¬«       y )N)r.   r“   rD   r
   rI   r   ©rK   rL   )
rX   rC   r.   r“   rD   r
   rI   r   rY   r[   s
            €r   rL   zEvoNorm2dS0a.__init__  s,   ø€ ô 	‰ÑØØØ!ØØØØð 	õ 	
r    c                 óì  — t        |j                  «       dk(  d«       |j                  }d}t        || j                  | j
                  «      }| j                  �@| j                  j                  |«      j                  |«      }|||z  j                  «       z  }||z  }|| j                  j                  |«      j                  |«      z  | j                  j                  |«      j                  |«      z   S r˜   )r	   r   r   r;   r.   r
   rS   rl   r   r™   rQ   rR   )rX   r   r:   ro   ÚdrS   s         r   rs   zEvoNorm2dS0a.forward2  sÃ   € Ü�—‘“˜1‘Ð1Ô2Ø—'‘'ˆØˆÜ�a˜Ÿ™ d§h¡hÓ/ˆØ�6‰6ÐØ—‘—‘˜GÓ$×'Ñ'¨Ó0ˆAØ�Q˜‘U—O‘OÓ%Ñ%ˆAØ�‰EˆØ�4—;‘;×#Ñ# GÓ,×/Ñ/°Ó8Ñ8¸4¿9¹9¿>¹>È'Ó;R×;UÑ;UÐV]Ó;^Ñ^Ð^r    )rš   NTru   NN)
rw   rx   ry   rz   r   r{   r   rL   rs   r|   r}   s   @r   rœ   rœ     sV   ø„ ð Ø(,Ø"ØØØñ
àð
ð ð
ð ! ™ð	
ð
 ð
ð õ
ö*	_r    rœ   c                   óz   ‡ — e Zd Z	 	 	 	 	 	 	 d
dededee   dedeeej                        de	fˆ fd„Z
d„ Zd	„ Zˆ xZS )ÚEvoNorm2dS1rC   r.   r“   rD   Ú	act_layerr
   c	                 óî  •— ||dœ}
t         ‰| �  «        |xs t        j                  }|| _        |�|rt        |«      | _        nt        j                  «       | _        |r||z  dk(  sJ ‚||z  | _        n|| _        || _	        d| _
        t        j                  t        j                  |fi |
¤Ž«      | _        t        j                  t        j                  |fi |
¤Ž«      | _        | j!                  «        y )NrH   r   F)rK   rL   rM   ÚSiLUrD   r   ÚactÚIdentityr.   r
   Úpre_act_normrN   rO   rP   rQ   rR   rV   ©rX   rC   r.   r“   rD   r£   r
   rI   r   rY   rZ   r[   s              €r   rL   zEvoNorm2dS1.__init__?  sÐ   ø€ ð ¨Ñ/ˆÜ‰ÑÔØÒ(¤§¡ˆ	Ø"ˆŒØÐ ¡YÜ'¨	Ó2ˆD�Hä—{‘{“}ˆDŒHÙØ *Ñ,°Ò1Ð1Ð1Ø&¨*Ñ4ˆD�Kà ˆDŒKØˆŒØ!ˆÔÜ—l‘l¤5§;¡;¨|Ñ#B¸rÑ#BÓCˆŒÜ—L‘L¤§¡¨\Ñ!@¸RÑ!@ÓAˆŒ	à×ÑÕr    c                 ó¨   — t         j                  j                  | j                  «       t         j                  j	                  | j
                  «       y r]   r„   rb   s    r   rV   zEvoNorm2dS1.reset_parameters_  r…   r    c                 ó†  — t        |j                  «       dk(  d«       |j                  }d}| j                  r3| j	                  |«      t        || j                  | j                  «      z  }|| j                  j                  |«      j                  |«      z  | j                  j                  |«      j                  |«      z   S r˜   )r	   r   r   rD   r¦   r;   r.   r
   rQ   rl   r   rR   ©rX   r   r:   ro   s       r   rs   zEvoNorm2dS1.forwardc  ó’   € Ü�—‘“˜1‘Ð1Ô2Ø—'‘'ˆØˆØ�>Š>Ø—‘˜“œi¨¨4¯;©;¸¿¹ÓAÑAˆAØ�4—;‘;×#Ñ# GÓ,×/Ñ/°Ó8Ñ8¸4¿9¹9¿>¹>È'Ó;R×;UÑ;UÐV]Ó;^Ñ^Ð^r    ©rš   NTNrŠ   NN©rw   rx   ry   rz   r   r{   r   rM   ÚModuler   rL   rV   rs   r|   r}   s   @r   r¢   r¢   >  sv   ø„ ð Ø(,Ø"Ø37ØØØñ àð ð ð ð ! ™ð	 ð
 ð ð    R§Y¡Y¡Ñ0ð ð õ ò@"ö_r    r¢   c                   ót   ‡ — e Zd Z	 	 	 	 	 	 	 d	dededee   dedeeej                        de	fˆ fd„Z
d„ Zˆ xZS )
ÚEvoNorm2dS1arC   r.   r“   rD   r£   r
   c	           
      ó4   •— t         ‰
| �  ||||||||¬«       y ©N)r.   r“   rD   r£   r
   rI   r   rž   ©rX   rC   r.   r“   rD   r£   r
   rI   r   rY   r[   s             €r   rL   zEvoNorm2dS1a.__init__m  ó/   ø€ ô 	‰ÑØØØ!ØØØØØð 	õ 		
r    c                 ón  — t        |j                  «       dk(  d«       |j                  }d}| j                  |«      t	        || j
                  | j                  «      z  }|| j                  j                  |«      j                  |«      z  | j                  j                  |«      j                  |«      z   S r˜   )r	   r   r   r¦   r;   r.   r
   rQ   rl   r   rR   r¬   s       r   rs   zEvoNorm2dS1a.forward„  ó‹   € Ü�—‘“˜1‘Ð1Ô2Ø—'‘'ˆØˆØ�H‰H�Q‹Kœ) A t§{¡{°D·H±HÓ=Ñ=ˆØ�4—;‘;×#Ñ# GÓ,×/Ñ/°Ó8Ñ8¸4¿9¹9¿>¹>È'Ó;R×;UÑ;UÐV]Ó;^Ñ^Ð^r    ©rš   NTNru   NN©rw   rx   ry   rz   r   r{   r   rM   r°   r   rL   rs   r|   r}   s   @r   r²   r²   l  óp   ø„ ð Ø(,Ø"Ø37ØØØñ
àð
ð ð
ð ! ™ð	
ð
 ð
ð    R§Y¡Y¡Ñ0ð
ð õ
ö._r    r²   c                   óz   ‡ — e Zd Z	 	 	 	 	 	 	 d
dededee   dedeeej                        de	fˆ fd„Z
d„ Zd	„ Zˆ xZS )ÚEvoNorm2dS2rC   r.   r“   rD   r£   r
   c	                 óà  •— ||dœ}
t         ‰| �  «        |xs t        j                  }|| _        |�|rt        |«      | _        nt        j                  «       | _        |r||z  dk(  sJ ‚||z  | _        n|| _        || _	        t        j                  t        j                  |fi |
¤Ž«      | _        t        j                  t        j                  |fi |
¤Ž«      | _        | j                  «        y r•   )rK   rL   rM   r¥   rD   r   r¦   r§   r.   r
   rN   rO   rP   rQ   rR   rV   r©   s              €r   rL   zEvoNorm2dS2.__init__�  sÈ   ø€ ð ¨Ñ/ˆÜ‰ÑÔØÒ(¤§¡ˆ	Ø"ˆŒØÐ ¡YÜ'¨	Ó2ˆD�Hä—{‘{“}ˆDŒHÙØ *Ñ,°Ò1Ð1Ð1Ø&¨*Ñ4ˆD�Kà ˆDŒKØˆŒÜ—l‘l¤5§;¡;¨|Ñ#B¸rÑ#BÓCˆŒÜ—L‘L¤§¡¨\Ñ!@¸RÑ!@ÓAˆŒ	à×ÑÕr    c                 ó¨   — t         j                  j                  | j                  «       t         j                  j	                  | j
                  «       y r]   r„   rb   s    r   rV   zEvoNorm2dS2.reset_parameters¬  r…   r    c                 ó†  — t        |j                  «       dk(  d«       |j                  }d}| j                  r3| j	                  |«      t        || j                  | j                  «      z  }|| j                  j                  |«      j                  |«      z  | j                  j                  |«      j                  |«      z   S r˜   )r	   r   r   rD   r¦   r@   r.   r
   rQ   rl   r   rR   r¬   s       r   rs   zEvoNorm2dS2.forward°  r­   r    r®   r¯   r}   s   @r   r½   r½   Œ  su   ø„ ð Ø(,Ø"Ø37ØØØñ àð ð ð ð ! ™ð	 ð
 ð ð    R§Y¡Y¡Ñ0ð ð õ ò>"ö_r    r½   c                   ót   ‡ — e Zd Z	 	 	 	 	 	 	 d	dededee   dedeeej                        de	fˆ fd„Z
d„ Zˆ xZS )
ÚEvoNorm2dS2arC   r.   r“   rD   r£   r
   c	           
      ó4   •— t         ‰
| �  ||||||||¬«       y r´   rž   rµ   s             €r   rL   zEvoNorm2dS2a.__init__º  r¶   r    c                 ón  — t        |j                  «       dk(  d«       |j                  }d}| j                  |«      t	        || j
                  | j                  «      z  }|| j                  j                  |«      j                  |«      z  | j                  j                  |«      j                  |«      z   S r˜   )r	   r   r   r¦   r@   r.   r
   rQ   rl   r   rR   r¬   s       r   rs   zEvoNorm2dS2a.forwardÑ  r¸   r    r¹   rº   r}   s   @r   rÂ   rÂ   ¹  r»   r    rÂ   )rŠ   )F)rš   rŠ   F)rš   rŠ   FF)rš   rŠ   )$Ú__doc__Útypingr   r   r   r   rO   Útorch.nnrM   Útorch.nn.functionalÚ
functionalÚFÚ
create_actr   Útrace_utilsr	   r   r   r#   r)   rz   r{   r"   r;   r=   r@   r°   rB   r   r�   r’   rœ   r¢   r²   r½   rÂ   © r    r   ú<module>rÎ      s[  ðñ÷2 3Ó 2ã Ý ß Ð å (Ý  ñ˜ó ñ
˜Uó ñ˜ó ñ
�u˜S (¨3¡-Ð/Ñ0ð ¸Dó ñ
3˜ð 
3¨ð 
3¸tó 
3ñC˜Sð C¨Eð CÀDð CÐ[_ó Cñ3˜ð 3¨ó 3ô/_�"—)‘)ô /_ôd+_�"—)‘)ô +_ô\+_�"—)‘)ô +_ô\(_�"—)‘)ô (_ôV_�;ô _ôD+_�"—)‘)ô +_ô\_�;ô _ô@*_�"—)‘)ô *_ôZ_�;õ _r    