
    sgH/                         d dl Z d dlmZ d dlmZ  G d de      Z G d de      Z G d de j                  j
                        Z	y)	    N)Functionc                   ,    e Zd Zed        Zed        Zy)SyncBatchNormc
           
         |j                  t        j                        s0|j                  t        j                        s|j	                         }||j	                         }t        |j                         |j                  d      z        }
|
dk(  r|	dk  rt        d|
       |j                  d   }|j                         dkD  rt        j                  ||      \  }}t        j                  d|j                         |j                  d      z  |j                  |j                        }t        j                  |||gd      }n2t        j                  d|z  dz   |j                  |j                        }|j!                         d	k7  r|j                         }t        j"                  d||	z  |j                  |j                        }t%        j&                  |||d
       t        j(                  ||	|f      }t        j*                  ||d      \  }}}nwt-        |	      D cg c]  }t        j.                  |       }}t%        j0                  |||d
       t        j2                  |d      }t        j*                  ||d      \  }}}t        j4                  j7                         rt        j4                  j9                         s#|j;                  d      dk\  }||   }||   }||   }|j=                  d      }|4|j                  |j                  k7  r|j?                  |j                        }t        j@                  ||||||||      \  }}| jC                  |||||j?                  t        jD                               || _#        |j                         dkD  rt        jH                  ||||||      S t        j.                  |      S c c}w )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momentumr5   
world_sizer   num_channelsmeaninvstdcountcombinedcombined_sizecombined_flatmean_all
invstd_all	count_all_combined_listmaskcountss                            N/var/www/html/venv/lib/python3.12/site-packages/torch/nn/modules/_functions.pyforwardzSyncBatchNorm.forward   s]    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(LVW.X+Hj) BGzARSAU--h7SMSOOM8]US{{=a8H.3kk(LVW.X+Hj)

'')ejj.T.T.V $$R(A-D!$I~H#D)J ##8J8J(JYY|112F@@	
f 	ufdFILL<UV* ;;=1))%tVSQQ##E**U Ts   )Oc                    |j                  t        j                        s0|j                  t        j                        s|j	                         }| j
                  \  }}}}}d x}x}}	| j                  }
|j                         dkD  rVt        j                  |||||| j                  d   | j                  d   | j                  d         \  }}}}	| j                  d   r|j                  d   }t        j                  ||gd      }t        j                  j                  |t        j                  j                  j                  |
d       t        j                   ||      \  }}|4|j"                  |j"                  k7  r|j%                  |j"                        }t        j&                  ||||||||      }|| j                  d   sd }|| j                  d   sd }	n|j                  d   }| j                  d   rtt        j(                  d|z  |j"                  |j*                        }t        j                  j                  |t        j                  j                  j                  |
d       |||	d d d d d d f	S )	Nr   r   r	   r
   r   Fr   r   )r   r   r   r   r   saved_tensorsr5   r   batch_norm_backward_reduceneeds_input_gradr   r    distributed
all_reduceReduceOpSUMr'   r   r1   batch_norm_backward_elemtr!   r   )r7   grad_outputsaved_inputr9   rA   rB   count_tensor
grad_inputgrad_weight	grad_biasr5   sum_dy
sum_dy_xmur@   rD   s                  rN   backwardzSyncBatchNorm.backward}   sw    %%E4G4G%H((u7M7M(N%002K:>:L:L7VT6</33
3[9**" 00%%a(%%a(%%a(	 $$Q'%||A 99fj%9qA!!,,%%..22!"	 -  &+[[<%H"
 %&,,$***D#YYtzz2F"<< 	
 ~T%:%:1%="~T%:%:1%= 	 ',,Q/L$$Q' ;;$K,=,=kFXFX !!,,%%..22!"	 -  ;	4tT4QUUU    N__name__
__module____qualname__staticmethodrO   ra    rb   rN   r   r      s/    r+ r+h RV RVrb   r   c                   .    e Zd Zedd       Zed        Zy)CrossMapLRN2dc                    || _         || _        || _        || _        d | _        |j                         dk7  rt        d|j                          d      | j                  xs |j                         | _        |j                         }|j                  d      }|j                  d      }|j                  d      }	|j                  d      }
|j                  |       | j                  j                  |       |}t        j                  |d|       t        | j                   dz
  dz  dz         }t        ||      }| j                  j                  dd      }|j                          t        |      D ]#  }|j!                  |j                  d|             % t        d|      D ]  }| j                  j                  d|dz
        }| j                  j                  d|      }|j#                  |       |||z
  dz   k  r+|j                  d||z   dz
        }|j!                  |d	       ||kD  s|j                  d||z
        }|j!                  |d
	        | j                  j%                  | j                  | j                   z        j!                  | j                         t        j                  | j                  | j                   |       |j%                  |       | j'                  ||       |S )N   z,CrossMapLRN2d: Expected input to be 4D, got z
D instead.r   r	   r
      outalphar   )r   rq   betakscaler   r   new
resize_as_r   powr   minselectzero_r(   add_copy_mul_r3   )ctxr8   r   rq   rr   rs   output
batch_sizechannelsinput_heightinput_widthinput_squarepre_padpre_pad_cropscale_firstcscale_previousscale_currentsquare_nextsquare_previouss                       rN   rO   zCrossMapLRN2d.forward   s   		99;!>uyy{m:V  II,	ZZ]
::a=zz!}jjm% 		U# 		%-sxx!|q(1,-7H-ii&&q!,|$ 	8A\00A67	8
 q(# 
	>A YY--aQ7NII,,Q2M/8g%))*11!Q[1_E"";a"87{"."5"5aW"E""?""=
	> 			syy388+,11#%%8		#))chhYF3EeV,rb   c           	         | j                   \  }}|j                         }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  || j                  z   dz
  ||      }	|j                  ||      }
d| j                  z  | j                  z  | j                  z  }t        | j                  | j                  dz
  dz  z
        }|j                  |       t        j                  | j                  | j                   |      j                  |       |	j                          |	j                  d||      }t        |      D ]  }t        j                  ||   ||   |       |j                  | j                  |          t        j                   |	j                  dd| j                  dz
        dd|
       t        |      D ]]  }|
j#                  |	|| j                  z   dz
            ||   |   j%                  ||   |   |
|        |
j#                  |	|   d	
       _  |d d d d fS )Nr   r	   r
   rm   rn   F)keepdimro   )valuer   rp   )rQ   ru   r   rq   rr   r   rv   r   rw   rt   r}   rz   narrowr(   muldiv_sumr{   addcmul_)r~   rY   r8   r   r\   r   r   r   r   paddded_ratioaccum_ratiocache_ratio_valueinversePrePadpadded_ratio_centernr   s                   rN   ra   zCrossMapLRN2d.backward  s   ))v __&
ZZ]
::a=zz!}jjm		(SXX"5"9<Uiik:		MCHH4sxx?CHH1'99:e$		#))chhYJ7<<[I+221mXNz" 	=AIIk!nfQi5HI$$SYYq\2II$$Q388a<8	 8_ =  q388|a/?!@A1a ))!HQK5F4F *    q!1 <=	=  4tT11rb   N)g-C6?g      ?r	   rc   rh   rb   rN   rj   rj      s)    8 8t $2 $2rb   rj   c                   ,    e Zd Zed        Zed        Zy)BackwardHookFunctionc                 d     | j                   |D cg c]  }|j                  r| c}  |S c c}w N)mark_non_differentiablerequires_grad)r~   argsargs      rN   rO   zBackwardHookFunction.forward8  s0    ###T%ScARARc%ST &Ts   --c                     |S r   rh   )r~   r   s     rN   ra   zBackwardHookFunction.backward=  s    rb   Nrc   rh   rb   rN   r   r   7  s(       rb   r   )
r   torch.distributedrT   r$   torch.autograd.functionr   r   rj   autogradr   rh   rb   rN   <module>r      sD       ,IVH IVXa2H a2H5>>22 rb   