ó
    !Eñio/  ã                   óŽ   • S SK r S SKJr  S SKJr   " S S\5      r " S S\5      r " S S\ R                  R
                  5      r	g)	é    N)ÚFunctionc                   ó4   • \ rS rSr\S 5       r\S 5       rSrg)ÚSyncBatchNormé   c
           
      ó®  • UR                  [        R                  S9(       d2  UR                  [        R                  S9(       d  UR	                  5       nUb  UR	                  5       n[        UR                  5       UR                  S5      -  5      n
U
S:X  a  U	S:  a  [        SU
 35      eUR                  S   nUR                  5       S:”  a{  [        R                  " X5      u  pÍ[        R                  " SUR                  5       UR                  S5      -  UR                  UR                  S9n[        R                  " XÍU/SS9nO0[        R                  " SU-  S-   UR                  UR                  S9nUR!                  5       S	:w  a‡  UR                  5       n[        R"                  " SUU	-  UR                  UR                  S9n[$        R&                  " UXøS
S9  [        R(                  " UU	U45      n[        R*                  " XûSS9u  nnnOs[-        U	5       Vs/ s H  n[        R.                  " U5      PM     nn[$        R0                  " UXøS
S9  [        R2                  " USS9n[        R*                  " XûSS9u  nnn[        R4                  R7                  5       (       a#  [        R4                  R9                  5       (       d#  UR;                  S5      S:¬  nUU   nUU   nUU   nUR=                  S5      nUb5  UR                  UR                  :w  a  UR?                  UR                  5      n[        R@                  " UUUUUUUU5      u  pÍU RC                  XXÍUR?                  [        RD                  5      5        X€l#        UR                  5       S:”  a  [        RH                  " XX<XÖ5      $ [        R.                  " U5      $ s  snf )N©Úmemory_formaté   é   zEExpected more than 1 value per channel when training, got input size r   )r
   ©ÚdtypeÚdevice©ÚdimÚglooF©Úasync_opéÿÿÿÿ)%Úis_contiguousÚtorchÚchannels_lastÚchannels_last_3dÚ
contiguousÚintÚnumelÚsizeÚ
ValueErrorÚshapeÚbatch_norm_statsÚfullr   r   ÚcatÚzerosÚ_get_backend_nameÚemptyÚdistÚall_gather_into_tensorÚreshapeÚsplitÚrangeÚ
empty_likeÚ
all_gatherÚstackÚcudaÚis_availableÚis_current_stream_capturingÚsqueezeÚviewÚtoÚ#batch_norm_gather_stats_with_countsÚsave_for_backwardÚint32Úprocess_groupÚbatch_norm_elemt)ÚselfÚinputÚweightÚbiasÚrunning_meanÚrunning_varÚepsÚmomentumr6   Ú
world_sizer   Únum_channelsÚmeanÚinvstdÚcountÚcombinedÚcombined_sizeÚcombined_flatÚmean_allÚ
invstd_allÚ	count_allÚ_Úcombined_listÚmaskÚcountss                            ÚX/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/nn/modules/_functions.pyÚforwardÚSyncBatchNorm.forward   sJ  € ð ×Ñ¬e×.AÑ.AÐÖBØ×"Ñ"´×1GÑ1GÐ"ÖHà×$Ñ$Ó&ˆEØÑØ×&Ñ&Ó(ˆFä�5—;‘;“= E§J¡J¨q£MÑ1Ó2ˆØ�1‹9˜ a›ÜØWÐX\ÐW]Ð^óð ð —{‘{ 1‘~ˆØ�;‰;‹=˜1Óä ×1Ò1°%Ó=‰LˆDä—J’JØØ—‘“ §¡¨A£Ñ.Ø—j‘jØ—{‘{ñ	ˆEô —y’y $°Ð!6¸AÑ>‰Hô —{’{Ø�LÑ  1Ñ$¨E¯K©KÀÇÁñˆHð ×*Ñ*Ó,°Ó6à$ŸN™NÓ,ˆMÜ!ŸKšKØØ 
Ñ*Ø—n‘nØ—‘ñ	ˆMô ×'Ò'Ø˜xÀòô —}’} ]°ZÀÐ4OÓPˆHä.3¯kªk¸(ÐVWÑ.XÑ+ˆH�j¡)ô BGÀzÔARÓSÒAR¸AœU×-Ò-¨hÖ7ÑARˆMÐSÜ�OŠO˜M¨8ÈUÒSÜ—{’{ =°aÑ8ˆHä.3¯kªk¸(ÐVWÑ.XÑ+ˆH�j )ä—
‘
×'Ñ'×)Ñ)¬e¯j©j×.TÑ.T×.VÑ.Vð ×$Ñ$ RÓ(¨AÑ-ˆDØ! $™ˆIØ ‘~ˆHØ# DÑ)ˆJð —‘ Ó#ˆØÑ#¨¯©¸×8JÑ8JÓ(JØ—Y‘Y˜|×1Ñ1Ó2ˆFÜ×@Ò@ØØØØØØØØó	
‰ˆð 	×Ñ˜u¨d¸I¿L¹LÌÏÉÓ<UÔVØ*Ôð �;‰;‹=˜1ÓÜ×)Ò)¨%¸ÀVÓQÐQä×#Ò# EÓ*Ð*ùòU Ts   È# Oc                 ó  • UR                  [        R                  S9(       d2  UR                  [        R                  S9(       d  UR	                  5       nU R
                  u  p#pEnS =n=p‰U R                  n
UR                  5       S:”  Gad  [        R                  " UUUUUU R                  S   U R                  S   U R                  S   5      u  nnnn	U R                  S   (       aÔ  UR                  S   n[        R                  " X¼/SS9n[        R                  R                  U[        R                  R                  R                  U
SS9  [        R                   " Xí5      u  p¼Ub5  UR"                  UR"                  :w  a  UR%                  UR"                  5      n[        R&                  " UUUUUUUU5      nUb  U R                  S   (       d  S nUb  U R                  S   (       d  S n	O’UR                  S   nU R                  S   (       ao  [        R(                  " SU-  UR"                  UR*                  S9n[        R                  R                  U[        R                  R                  R                  U
SS9  XxU	S S S S S S 4	$ )	Nr   r   r
   r   r   Fr   r   )r   r   r   r   r   Úsaved_tensorsr6   r   Úbatch_norm_backward_reduceÚneeds_input_gradr   r!   ÚdistributedÚ
all_reduceÚReduceOpÚSUMr(   r   r2   Úbatch_norm_backward_elemtr"   r   )r8   Úgrad_outputÚsaved_inputr:   rB   rC   Úcount_tensorÚ
grad_inputÚgrad_weightÚ	grad_biasr6   Úsum_dyÚ
sum_dy_xmurA   rE   s                  rO   ÚbackwardÚSyncBatchNorm.backward~   sj  € ð ×%Ñ%´E×4GÑ4GÐ%ÖHØ×(Ñ(´u×7MÑ7MÐ(ÖNà%×0Ñ0Ó2ˆKØ:>×:LÑ:LÑ7ˆ˜T¨<Ø/3Ð3ˆ
Ð3�[Ø×*Ñ*ˆà×ÑÓ Ô"ô ×0Ò0ØØØØØØ×%Ñ% aÑ(Ø×%Ñ% aÑ(Ø×%Ñ% aÑ(ó	ñØØØØð ×$Ñ$ Q×'à%Ÿ|™|¨A™�Ü Ÿ9š9 fÐ%9¸qÑA�Ü×!Ñ!×,Ñ,ØÜ×%Ñ%×.Ñ.×2Ñ2Ø!Ø"ð	 -ñ ô &+§[¢[°Ó%HÑ"�ð Ñ%¨&¯,©,¸$¿*¹*Ó*DØ#ŸY™Y t§z¡zÓ2�FÜ"×<Ò<ØØØØØØØØ ó	�
ð ‰~ T×%:Ñ%:¸1×%=Ø"�à‰~ T×%:Ñ%:¸1×%=Ø �	øð '×,Ñ,¨QÑ/ˆLØ×$Ñ$ Q×'ä Ÿ;š;Ø˜Ñ$¨K×,=Ñ,=Àk×FXÑFXñ�ô ×!Ñ!×,Ñ,ØÜ×%Ñ%×.Ñ.×2Ñ2Ø!Ø"ð	 -ñ ð ¨	°4¸¸tÀTÈ4ÐQUÐUÐUó    )r6   N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚstaticmethodrP   rc   Ú__static_attributes__© re   rO   r   r      s/   † Øñr+ó ðr+ðh ñRVó óRVre   r   c                   ó8   • \ rS rSr\SS j5       r\S 5       rSrg)ÚCrossMapLRN2déÔ   c                 óx  • X l         X0l        X@l        XPl        S U l        UR                  5       S:w  a  [        SUR                  5        S35      eU R                  =(       d    UR                  5       U l        UR                  5       nUR                  S5      nUR                  U5        U R                  R                  U5        Un[        R                  " USUS9  [        U R                   S-
  S-  S-   5      n	[        X—5      n
U R                  R                  SS5      nUR                  5         [        U
5       H$  nUR!                  UR                  SU5      5        M&     [        SU5       H¬  nU R                  R                  SUS-
  5      nU R                  R                  SU5      nUR#                  U5        XÇU	-
  S-   :  a'  UR                  SXÉ-   S-
  5      nUR!                  USS9  XÉ:”  d  Mˆ  UR                  SXÉ-
  5      nUR!                  US	S9  M®     U R                  R%                  U R                  U R                   -  5      R!                  U R                  5        [        R                  " U R                  U R                  * US9  UR%                  U5        U R'                  X5        U$ )
Né   z,CrossMapLRN2d: Expected input to be 4D, got z
D instead.r
   r   ©Úoutr   ©Úalphar   )r   rv   ÚbetaÚkÚscaler   r   ÚnewÚ
resize_as_r   Úpowr   ÚminÚselectÚzero_r)   Úadd_Úcopy_Úmul_r4   )Úctxr9   r   rv   rw   rx   ÚoutputÚchannelsÚinput_squareÚpre_padÚpre_pad_cropÚscale_firstÚcÚscale_previousÚscale_currentÚsquare_nextÚsquare_previouss                    rO   rP   ÚCrossMapLRN2d.forwardÕ   sD  € ð ŒØŒ	ØŒØŒØˆŒ	à�9‰9‹;˜!ÓÜØ>¸u¿y¹y»{¸mÈ:ÐVóð ð —I‘I×, §¡£ˆŒ	Ø—‘“ˆØ—:‘:˜a“=ˆà×Ñ˜%Ô Ø�	‰	×Ñ˜UÔ#ð ˆÜ�	Š	�%˜ Ò-ä�s—x‘x !‘| qÑ(¨1Ñ,Ó-ˆÜ˜7Ó-ˆà—i‘i×&Ñ& q¨!Ó,ˆØ×ÑÔä�|Ö$ˆAØ×Ñ˜\×0Ñ0°°AÓ6Ö7ñ %ô
 �q˜(Ö#ˆAØ ŸY™Y×-Ñ-¨a°°Q±Ó7ˆNØŸI™I×,Ñ,¨Q°Ó2ˆMØ×Ñ Ô/Ø˜gÑ%¨Ñ)Ó)Ø*×1Ñ1°!°Q±[À1±_ÓE�Ø×"Ñ" ;°aÐ"Ñ8à�{Ø".×"5Ñ"5°a¸¹Ó"E�Ø×"Ñ" ?¸"Ð"Ó=ñ $ð 	�	‰	�‰�s—y‘y 3§8¡8Ñ+Ó,×1Ñ1°#·%±%Ô8ä�	Š	�#—)‘)˜cŸh™h˜Y¨FÒ3Ø�‰�EÔà×Ñ˜eÔ,Øˆre   c           	      óv  • U R                   u  p#UR                  5       nUR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      nUR                  X`R                  -   S-
  Xx5      n	UR                  Xx5      n
SU R                  -  U R                  -  U R                  -  n[        U R                  U R                  S-
  S-  -
  5      nUR                  U5        [        R                  " U R                  U R                  * US9R                  U5        U	R                  5         U	R                  SXÆ5      n[        U5       HÒ  n[        R                  " X   X>   US9  UR                  U R                  U   5        [        R                   " U	R                  SSU R                  S-
  5      SSU
S9  [        U5       HS  nU
R#                  XŸU R                  -   S-
     5        XN   U   R%                  X.   U   X«* S9  U
R#                  XŸ   S	S
9  MU     MÔ     US S S S 4$ )Nr   r
   r   é   rs   F)Úkeepdimrt   )Úvaluer   ru   )rS   rz   r   rv   rw   r   r{   r   r|   ry   r‚   r   Únarrowr)   ÚmulÚdiv_Úsumr€   Úaddcmul_)rƒ   r[   r9   r„   r^   Ú
batch_sizer…   Úinput_heightÚinput_widthÚpaddded_ratioÚaccum_ratioÚcache_ratio_valueÚinversePrePadÚpadded_ratio_centerÚnrŠ   s                   rO   rc   ÚCrossMapLRN2d.backward  s÷  € ð ×)Ñ)‰ˆØ —_‘_Ó&ˆ
à—Z‘Z “]ˆ
Ø—:‘:˜a“=ˆØ—z‘z !“}ˆØ—j‘j “mˆàŸ	™	 (¯X©XÑ"5¸Ñ"9¸<ÓUˆØ—i‘i Ó:ˆà §	¡	™M¨C¯H©HÑ4°s·x±xÑ?ÐÜ˜CŸH™H¨¯©°1©¸Ñ'9Ñ9Ó:ˆà×Ñ˜eÔ$Ü�	Š	�#—)‘)˜cŸh™h˜Y¨JÑ7×<Ñ<¸[ÔIà×ÑÔØ+×2Ñ2°1°mÓNÐÜ�zÖ"ˆAÜ�IŠI�k‘n f¡iÐ5HÒIØ×$Ñ$ S§Y¡Y¨q¡\Ô2Ü�IŠIØ×$Ñ$ Q¨¨3¯8©8°a©<Ó8ØØØò	ô ˜8–_�Ø× Ñ  °3·8±8©|¸aÑ/?Ñ!@ÔAØ‘˜aÑ ×)Ñ)Ø‘H˜Q‘K Ð4Fð *ñ ð × Ñ  Ñ!1¸Ð Ó<ó %ñ #ð  ˜4  t¨TÐ1Ð1re   rm   N)g-Cëâ6?g      è?r
   rf   rm   re   rO   ro   ro   Ô   s)   † Øó4ó ð4ðl ñ$2ó ó$2re   ro   c                   ó4   • \ rS rSr\S 5       r\S 5       rSrg)ÚBackwardHookFunctioni6  c                 ót   • U R                   " U Vs/ s H  o"R                  (       a  M  UPM     sn6   U$ s  snf ©N)Úmark_non_differentiableÚrequires_grad)rƒ   ÚargsÚargs      rO   rP   ÚBackwardHookFunction.forward7  s2   € ð 	×#Ò#±TÓ%S²T¨c×ARÕAR§c±TÑ%SÑTØˆùò &Ts   ‘5©5c                 ó   • U$ r¦   rm   )rƒ   r©   s     rO   rc   ÚBackwardHookFunction.backward=  s   € àˆre   rm   Nrf   rm   re   rO   r¤   r¤   6  s(   † Øñó ðð ñó óre   r¤   )
r   Útorch.distributedrV   r%   Útorch.autograd.functionr   r   ro   Úautogradr¤   rm   re   rO   Ú<module>r±      sD   ðã Ý  Ý ,ôJV�Hô JVôZ_2�Hô _2ôD	˜5Ÿ>™>×2Ñ2õ 	re   