
    JTh.                         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                  " XU/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XS
S9  [        R(                  " UU	U45      n[        R*                  " XSS9u  nnnOs[-        U	5       Vs/ s H  n[        R.                  " U5      PM     nn[$        R0                  " UXS
S9  [        R2                  " USS9n[        R*                  " XS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  pU RC                  XXUR?                  [        RD                  5      5        Xl#        UR                  5       S:  a  [        RH                  " XX<X5      $ [        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                            S/var/www/auris/envauris/lib/python3.13/site-packages/torch/nn/modules/_functions.pyforwardSyncBatchNorm.forward   sJ    e.A.AB""1G1G"H$$&E&&(F5;;=EJJqM1219aWX\W]^  {{1~;;=1 11%=LDJJA.jj{{	E yy$!6A>H {{L 1$EKKH **,6$NN,M!KK
*nn	M ''x }}]Z4OPH.3kk(VW.X+Hj) BGzARSARAU--h7ARMSOOM8US{{=a8H.3kk(VW.X+Hj)

''))ejj.T.T.V.V $$R(A-D!$I~H#D)J ##8J8J(JYY|112F@@	
 	udILL<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=pU 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                   " X5      u  pU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	OU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    %%E4G4G%H((u7M7M(N%002K:>:L:L7T</33
3[**" 00%%a(%%a(%%a(	 $$Q'%||A 99f%9qA!!,,%%..22!"	 -  &+[[%H" %&,,$***D#YYtzz2F"<< 	
 ~T%:%:1%="~T%:%:1%= 	 ',,Q/L$$Q' ;;$K,=,=kFXFX !!,,%%..22!"	 -  	4tT4QU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	[        X5      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        XU	-
  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   sB   		99;!>uyy{m:V  II,	::a=% 		U# 		%-sxx!|q(1,-7-ii&&q!,|$A\00A67 %
 q(#A YY--aQ7NII,,Q2M/g%))*11!Q[1_E"";a"8{"."5"5a"E""?""= $ 			syy388+,11#%%8		#))chhYF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X5      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#                  XU 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   )) __&
ZZ]
::a=zz!}jjm		(XX"5"9<Uii:		MCHH4sxx?CHH1'99:e$		#))chhYJ7<<[I+221mNz"AIIknfi5HI$$SYYq\2II$$Q388a<8	 8_  388|a/?!@Aa ))HQK4F *    !1 < % #  4tT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)BackwardHookFunctioni3  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.forward4  s0    ##T%STcARARcT%ST &Ts   55c                     U$ r   rm   )r   r   s     rO   rc   BackwardHookFunction.backward9  s    re   rm   Nrf   rm   re   rO   r   r   3  s(       re   r   )
r   torch.distributedrV   r%   torch.autograd.functionr   r   ro   autogradr   rm   re   rO   <module>r      sD       ,IVH IVX]2H ]2@5>>22 re   