
    i                         S SK Jr  S SKrS SKrS SKJr   " S S\R                  R                  5      r	S r
 " S S\R                  5      rS rg)    Nc                   4    \ rS rSr\S 5       r\S 5       rSrg)
_AllReduce   c                    [        [        R                  " 5       5       Vs/ s H  n[        R                  " U5      PM     nn[        R
                  " X1SS9  [        R                  " USS9n[        R                  " USS9$ s  snf )NTsync_opr   axis)rangedistget_world_sizepaddle
zeros_like
all_gatherstacksum)ctxinputk
input_listinputss        ]/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddleocr/tools/naive_sync_bn.pyforward_AllReduce.forward   sf    8=d>Q>Q>S8TU8T1f''.8T
U
48jq1zz&q))	 Vs    Bc                 0    [         R                  " USS9  U$ )NTr   )r   
all_reduce)r   grad_outputs     r   backward_AllReduce.backward   s    T2     N)__name__
__module____qualname____firstlineno__staticmethodr   r   __static_attributes__r!   r    r   r   r      s(    * *  r    r   c                     [         R                  " 5       (       a3  [         R                  " 5       (       a  [         R                  " 5       S:X  a  U $ [        R                  U 5      $ )z2
Differentiable counterpart of `dist.all_reduce`.
   )r   is_availableis_initializedr   r   apply)r   s    r   differentiable_all_reducer-   $   sI    
 ""$$ A%E""r    c                   <   ^  \ rS rSrSS.U 4S jjrU 4S jrSrU =r$ )NaiveSyncBatchNorm1    )
stats_modec                B   > [         TU ]  " U0 UD6  US;   d   eXl        g )N)r1   N)super__init___stats_mode)selfr2   argskwargs	__class__s       r   r6   NaiveSyncBatchNorm.__init__3   s)    $)&)Y&&&%r    c           
        > [         R                  " 5       S:X  d  U R                  (       d  [        TU ]  U5      $ UR
                  S   UR
                  S   p2[        R                  " U/ SQS9n[        R                  " X-  / SQS9nU R                  S:X  aq  US:  d   S5       e[        R                  " XE/SS9n[        U5      S[         R                  " 5       -  -  n[        R                  " XcU/5      u  pESU R                  -
  nOUS:X  a9  [        R                  " SU-  S-   /UR                  S	9nXaR                  5       -   nO6[        R                  " UU[        R                   " S/UR                  S	9/SS9n[        Xb-  5      nUS
   R#                  5       nUR%                  SS9SU R                  -
  -  n[        R                  " XhR%                  SS9-  X3['        UR
                  S   SU-  -
  5      /5      u  pEn	XTU-  -
  n
[        R(                  " XR*                  -   5      nU R,                  U-  nU R.                  XL-  -
  nUR1                  / SQ5      nUR1                  / SQ5      nU R2                  XtR#                  5       U R2                  -
  -  -   nU R2                  R5                  U5        U R6                  XzR#                  5       U R6                  -
  -  -   nU R6                  R5                  U5        X-  U-   nU$ )Nr)   r   )r         r	   r1   z>SyncBatchNorm(stats_mode="") does not support zero batch size.g      ?r>   )dtype)max)min)r)   rA   r)   r)   )r   r   trainingr5   r   shaper   meanr7   concatr-   split	_momentumzerosr@   r   onesdetachclipintrsqrt_epsilonweightbiasreshape_mean	set_value	_variance)r8   r   BCrF   meansqrvecmomentumtotal_batch_varinvstdscalerR   tmp_meantmp_varianceretr;   s                    r   r   NaiveSyncBatchNorm.forward8   s    A%T]]7?5)){{1~u{{1~1{{5y1++em)<r!APOP--a8C+C0C$:M:M:O4OPC"LL!f5MDDNN"  AvllAEAI;djjAIIK'mmQCtzz:
  ,CG4Cb'..*K"''A'.DNN"H  &||&&1&--c#))A,Q:N6O/P D1 t#cMM12f$yy4<'m,||M*::KKMDJJ,F GG

X&~~ZZ\DNN5R)ST  .md"
r    )r7   )r"   r#   r$   r%   r6   r   r'   __classcell__)r;   s   @r   r/   r/   1   s    )+ & &
6 6r    r/   c                 P   U R                  5        H  u  p[        U[        R                  R                  R
                  5      (       aO  [        UR                  UR                  UR                  UR                  UR                  5      n[        XU5        M  [        U5        M     g )N)named_children
isinstancennlayernorm_BatchNormBaser/   _num_featuresrI   rP   _weight_attr
_bias_attrsetattrconvert_syncbn)modelnmsyncbns       r   rq   rq   q   so    $$&a5566'ajj!..!,,F Ef%1 'r    )paddle.distributeddistributedr   mathr   	paddle.nnri   autogradPyLayerr   r-   BatchNorm2Dr/   rq   r!   r    r   <module>r}      sD    "   (( 
#= =@r    