
    ϑieV                     
   S SK r S SKrS SKJr  SSK7  SSKJrJr  S r\" S5      S 5       r	\" S	5      S
 5       r
\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       rS:S jr\" S5      S 5       r\" S 5      S! 5       r\" S"5      S# 5       r\" S$5      S% 5       r\" S&5      S' 5       r\" S(5      S;S) j5       r\" S*5      S+ 5       r\" S,5      S- 5       r\" S.5      S/ 5       r\" S05      S1 5       r\" S25      S3 5       r\" S45      S5 5       r \" S65      S7 5       r!\" S85      S9 5       r"g)<    N)core   )*)REGISTER_COMPOSITElookup_compositec                 >    [        U R                  5      nU" U /UQ76 $ N)r   type)opargs
_lowerrules      h/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/incubate/autograd/composite_rules.py
_compositer      s     !"''*Jb 4      softmaxc                 R   SnSSK Jn  U" U R                  5      nUS;   a  Sn[        U S5      n U R                  (       d"  [        X -
  5      nU(       a  [        US5      nU$ [        XSS9nSUl        [        X-
  5      n[        XqSS	9n[        Xx5      nU(       a  [        XT5      nU$ )
z#define composite rule of op softmaxFr   convert_dtypefloat16uint16Tfloat32r   )keepdimaxisr   )
paddle.base.data_feederr   dtypecastshapeexpmaxstop_gradientsumdivide)	xr   is_ampr   r   resmax_temp	moleculardenominators	            r   softmax_compositer+   "   s     F5 !''"E%%I77!%jsI&C
1D)H!HAL!IiD9K

(C3Jr   
batch_normc                 (  ^^ SnSSK Jn  U" U R                  5      nUS;   a8  Sn[        U S5      n U(       a  [        US5      OUnU(       a  [        US5      OUnUS;   a  SO[	        U R
                  5      S-
  mU=(       a    U
(       + =(       d    U	n[        U4S	 j[        [	        U R
                  5      5       5       5      m[        U4S
 j[        U R
                  5       5       5      n[        S/SU R                  5      nU(       dw  [        U T5      n[        X -  T5      nUUU-  -
  n[        UU-   U5      nUS:X  a	  U U-
  U-  nOU [        UU5      -
  [        UU5      -  nXa-  SU-
  U-  -   nXb-  SU-
  U-  -   nO[        UR
                  UR                  5      n[        UR
                  UR                  5      n[        UU-   U5      nUS:X  a  X-
  [        X'-   U5      -  nO'U [        X5      -
  [        [        X/5      U-   U5      -  nUS:X  a	  UU-  U-   nO[        X?5      U-  [        XO5      -   nU(       a  [        UU5      n[        U5      n[        U5      n[        U5      n[        U5      nSnU(       d  UUUUUU4$ UUUSSU4$ )z~
define composite rule of op batch_norm
As the same with op kernel, the position of saved variance indeed return inverse std.
Fr   r   r   Tr   )NCNCLNCHWNCHWDr   c              3   6   >#    U  H  oT:w  d  M
  Uv   M     g 7fr	    ).0ifeature_axiss     r   	<genexpr>&composite_batchnorm.<locals>.<genexpr>_   s     L#6a|:K#6s   		c              3   <   >#    U  H  u  pUT;   a  S OUv   M     g7f)r   Nr3   )r4   r5   sreduce_axess      r   r7   r8   `   s#      1CQ+1$1Cs   g      NHWCN)r   r   r   r   lenr   tuplerange	enumeratefullmeanpowreshapezerosassign)r%   run_meanrun_varscalebiasis_testmomentumepsilondata_layoutuse_global_statstrainable_statisticsr&   r   r   use_run_statstats_shapehalf
batch_meantemp	batch_varinv_stdx_hatybatch_mean_inv_std_	run_mean_run_var_reserve_spacer6   r;   s                               @@r   composite_batchnormr_   =   s   & F5!''"E%%I*/UI&U(,tD)$$ ::AGGq@P  :%9!9O?OLL5QWW#6LLK 1:1771C K T177#D![)
AE;':
22	y7*T2& ^w.E[99W> E &!h,*)DD$H	'AA8>>8>>:
'--7	y7*T2& \S'*;d%CCE773.84< E fEMD E'%/'$2LLEN $KgHx IgH M)X{HmKK)XtT=@@r   
layer_normc                    SnSSK Jn  U" U R                  5      nUS;   a8  Sn[        U S5      n U(       a  [        US5      OUnU(       a  [        US5      OUn[	        [        U[        U R                  5      5      5      n[        XSS9n	X	-
  n
X-  n[        XSS9nX-   n[        U5      nX-  nUb9  U R                  US UR                  :w  a  [        XR                  US 5      nX-  nUb9  U R                  US UR                  :w  a  [        X R                  US 5      nX-   n[        XR                  SU 5      n	[        XR                  SU 5      nU(       a  [        X5      nXU4$ )	zm
define composite rule of op layer_norm
out = (x - mean(x)) / sqrt(var + epsilon))
var = mean((x-mean(x))^2)
Fr   r   r   Tr   r   N)r   r   r   r   r>   r?   r=   r   rB   rsqrtrD   )r%   rI   rJ   rM   begin_norm_axisr&   r   r   r   mean_
differencevar_tmp1variancevar_tmp3	rsqrt_varouts                   r   layernorm_compositerk      si    F5!''"E%%I*/UI&U(,tD)$$AGG56Dt,EJ&HH6H!HhI

 C77?#$3E77?+;#<=Ek77?#$

24)9!:;Dj E77#3O45Ex)9/!:;H3xr   instance_normc           	      x   SnSSK Jn  U" U R                  5      nUS;   a8  Sn[        U S5      n U(       a  [        US5      OUnU(       a  [        US5      OUnU R                  u  pxp[        [        S[        U R                  5      5      5      n[        XSS9nX-
  nX-  n[        XSS9nX-   n[        U[        S	/S
UR                  S95      nUU-  nUb  [        US	US	S	/5      nUU-  nUb  [        US	US	S	/5      nUU-   n[        US/5      nS	U-  n[        US/5      nU(       a  [        UU5      nUUU4$ )zp
define composite rule of op instance_norm
out = (x - mean(x)) / sqrt(var + epsilon))
var = mean((x-mean(x))^2)
Fr   r   r   Tr      r   r         ?r   )r   r   r   r   r   r>   r?   r=   rB   rC   rA   rD   )r%   rI   rJ   rM   r&   r   r   nchwr   rd   re   rf   rg   rh   sqrt_varrj   
scale_tile	bias_tilesaved_variances                         r   instancenorm_compositerz      sV    F5!''"E%%I*/UI&U(,tD)$$JA!q#agg,'(Dt,EJ&HH6H!H8T1#s(..ABH
x
CUQ1aL1
JD1aA,/	IoEB4 E\N^bT2N3~%%r   geluc           
         SnSn[        U R                  5      S:X  a  U R                  OS/n[        X@R                  5      n[	        USU R                  5      nU(       aS  [	        XCU-  U R                  5      n[	        USU R                  5      n[        XpX-  U -  U -  -   -  5      n	X-  XY-   -  n
U
$ Xe[        U [	        U R                  X R                  5      -  5      -   -  nX-  n
U
$ )z define composite rule of op gelug;f?gmBP?r   r   ro   gHm?)r=   r   onesr   rA   tanherf)r%   approximate	M_SQRT1_2
M_2_SQRTPI
full_shapeonerS   kAlphaGELU_CONSTANTtanh_outrj   cdfs               r   gelu_compositer      s     	  (JLA-A3J
z77
#C
C)Djy"8!''BZ177;m&7!&;a&?"?@Ah#.)
 CD)WW$E EFFGg
r   reduce_meanc                    SnSSK Jn  U" U R                  5      nUS;   a  Sn[        U S5      n US/ 4;   a(  [	        [        S[        U R                  5      5      5      n[        U[        5      (       a  U4OUn[        XUS9nU Vs/ s H  oR                  U   PM     nnU/ :X  a  S	n	O%[        R                  " [        R                  U5      n	[        / U	UR                  S
9n
[!        Xz5      nU(       a  [        X5      nU$ s  snf )z define composite rule of op meanFr   r   r   Tr   Nr   r   )r   valuer   )r   r   r   r   r>   r?   r=   r   
isinstanceintr#   	functoolsreduceoperatormulfill_constantr$   )r%   r   r   r&   r   r   axessum_xele_nums_listvalue_to_fillnormr'   s               r   mean_compositer     s     F5!''"E%%IbzU1c!''l+, s++D7Dg.E/34ttWWT]tM4!((}EkkD
 
C3J 5s   D	expand_v2c                    U R                   n[        U5      n[        U5      nXC::  a  US:  d   e/ n[        U5       HZ  nX6-
  nXG-
  nUS:  a  X(   OSn	X   n
U
S:X  d  U	S:X  a  US:  d   eSnOX-  S:X  d   e[        X-  5      nUR	                  U5        M\     XC:  aL  / n[        X4-
  5       H  nUR	                  S5        M     UR                  U5        [        X5      n[        XS9$ [        XS9$ )z
define composite rule of op expand_v2, expand_v2->expand
repeat_times = shape / x.shape
out = tile(x, repeat_times = repeat_times)
r   r   rq   repeat_timesr   r=   r?   r   appendextendrD   tile)r%   r   shape_indim_outdim_inr   r5   offsetdimsize_insize_outrepeatshape_in_expand	x_reshapes                 r   expand_v2_compositer   "  s    wwH%jG]FA--L7^o#&!8(-8r>W\!8O8F%***+,FF#  w'(A""1% )x(A/	I99--r   expand_as_v2c                    U R                   nUb  UR                   nUc   e[        U5      n[        U5      nXT::  a  US:  d   e/ n[        U5       HT  nXG-
  nXX-
  n	U	S:  a  X9   OSn
X'   nUS:X  a  U	S:  d   eSnOX-  S:X  d   e[        X-  5      nUR	                  U5        MV     XT:  aL  / n[        XE-
  5       H  nUR	                  S5        M     UR                  U5        [        X5      n[        XS9$ [        XS9$ )z
define composite rule of op expand_as_v2, expand_as_v2->expand_as
repeat_times = target_shape / x.shape
out = tile(x, repeat_times = repeat_times)
r   r   rq   r   r   )r%   rY   target_shaper   r   r   r   r5   r   r   r   r   r   r   r   s                  r   expand_as_v2_compositer   D  s!    wwH}ww###,G]FA--L7^o#&!8(-?r>!8O8F%***+,FF#  w'(A""1% )x(A/	I99--r   stackc           	          U S   R                   nUS:  a  U[        U5      S-   -  n/ USU QSPX!S Q7n[        U  Vs/ s H  n[        XC5      PM     snU5      nU$ s  snf )zh
define composite rule of op stack
unsqueeze each dimension of the input (use reshape), and then concat
r   r   N)r   r=   concatrD   )r%   r   x_shape	out_shapeitemrj   s         r   stack_compositer   i  ss     djjGaxGq  5'%4.5!5gen5I
q9qt'$*q94
@CJ :s   Aflatten_contiguous_rangec                    U R                   n[        U5      S:w  a  UOSn[        U5      S:w  a  UOSnXE::  d   e[        U5      S:X  a  [        U S/S9S4$ XE:X  a  [        XS9S4$ Sn[        XES-   5       H
  nXcU   -  nM     / n[        U5       H  nUR	                  X7   5        M     UR	                  U5        [        US-   [        U5      5       H  nUR	                  X7   5        M     [        XS9S4$ )at  
define composite rule of op flatten, flatten_contiguous_range -> flatten.

xshape is the dim with 0 added to the front of x, keep the shape information of x to calculate the grad.
CINN doesn't need xshape for backward pass, return none instead of xshape.
shape_out is the parameter of reshape, get from start_axis and stop_axis.
out = reshape(x, shape=shape_out), xshape
r   r   )r   N)r   r=   rD   r?   r   )	r%   
start_axis	stop_axisr   	start_dimend_dimslice_numelr5   	shape_outs	            r   "flatten_contiguous_range_compositer   w  s    wwH!(mq0
aIx=A-i1G
8}q$d**q)4//K9k*{" +I9% [!7Q;H.% /1&,,r   dropoutc                    Uc  SOUnU(       a  UOSnUS:H  n[        U R                  U R                  X%S9nU(       a  U(       d{  US:X  a=  SU -  [        U R                  [        R
                  R                  R                  5      4$ X-  SU-
  -  [        U[        R
                  R                  R                  5      4$ [        U 5      [        U[        R
                  R                  R                  5      4$ U(       d2  X-  [        U[        R
                  R                  R                  5      4$ U SU-
  -  [        U[        R
                  R                  R                  5      4$ )zdefine composite rule of op dropout.
upscale_in_train:
    train: out = input * mask / ( 1.0 - p )
    inference: out = input
downscale_in_infer
    train: out = input * mask
    inference: out = input * (1.0 - p)
Tr   upscale_in_train)r   r   pseed      ?        )
	bernoullir   r   rE   r   VarDescVarTypeUINT8r   rF   )	r%   seed_tensorr   rK   moder   fix_seedr   masks	            r   dropout_compositer     s     'tXH4D11177!''QBDCxQwaggt||/C/C/I/I JJJx37+T$,,..44.   !9d4)=)=)C)CDDD8T$(<(<(B(BCCCa=$tT\\-A-A-G-G"HHHr   c                     SSK Jn  U" U5      S;   a  SOUn[        [        [	        XSSUS9[        [        U 5      S:X  a  U OS/XR5      5      U5      $ )	Nr   r   r   r   r   r   )minr!   r   r   )r   r   r   greater_equaluniformr   r=   )r   r   r   r   r   	new_dtypes         r   r   r     s`    5 #5)-BB	  E#3TB3u:?%YJ	
 	 r   
hard_swishc                 2   SnSnSn[        U R                  5      S:X  a  U R                  OS/n[        [        U [	        XCU R
                  S9-   [	        USU R
                  S95      [	        XAU R
                  S95      U -  [	        XBU R
                  S9-  nU$ )zdefine composite rule of op hard_swish.
offset=3, threshold=6, scale=6
out = minimum(
    maximum(x + offset, 0), threshold
) * x / scale
g      @g      @r   r   rp   r   )r=   r   minimummaximumrA   r   )r%   	thresholdrI   r   r   r'   s         r   hard_swish_compositer     s     IEFLA-A3JD177;;ZAGG4 agg6	
 	 z
0	1  Jr   index_selectc                 V    US:  a  [        U R                  5      U-   n[        XUS9nU$ )z)define composite rule of op index_select.r   )r   )r=   r   gather)r%   indexr   r'   s       r   index_select_compositer     s.     ax177|d"

%CJr   sigmoidc                     SnSSK Jn  U" U R                  5      nUS;   a  Sn[        U S5      n S[	        U * 5      -   nSU-  nU(       d  U$ [        XS5      $ )z=
define composite rule of op sigmoid
res = 1 / (1 + exp(-x))
Fr   r   r   Tr   r   r   r   r   r   r    r%   r&   r   r   sum_tempr'   s         r   sigmoid_compositer     s^     F5!''"E%%I3r7{H
h,C32$s"22r   siluc                     SnSSK Jn  U" U R                  5      nUS;   a  Sn[        U S5      n S[	        U * 5      -   nX-  nU(       d  U$ [        XS5      $ )z:
define composite rule of op silu
res = x / (1 + exp(-x))
Fr   r   r   Tr   r   r   r   s         r   silu_compositer     s\     F5!''"E%%I3r7{H
,C32$s"22r   meshgridc                 d   [        U 5      nS/U-  n[        U5       H>  nX   R                  5       nUS:X  d  US:X  d   eUS:X  d  M+  X   R                  S   X#'   M@     / n[        U5       H@  nS/U-  nX#   Xc'   UR	                  X   R                  U5      R                  U5      5        MB     U$ )a^  
define composite rule of op meshgrid
If the input has N tensors of size S_0, ... S_n-1, then the output will also have N tensors, where
each tensor is of shape (S_0, ..., S_n-1).
E.g. a1 is Tensor [1,2,3]
     b1 is Tensor [4,5]
     r1, r2 = paddle.meshgrid([a1, b1])
     r1 is Tensor [[1,1], [2,2], [3,3]]
     r2 is Tensor [[4,5], [4,5], [4,5]]
r   r   )r=   r?   r   r   r   rD   broadcast_to)inputssizer   r5   r   outputs
view_shapes          r   meshgrid_compositer     s     v;DC$JE4[immoax3!8##!8yq)EH	 
 G4[S4Z

vy((4AA%HI  Nr   fill_any_likec                 6      [        U R                  X5      nU$ )z&define composite rule of op full_like.)rA   r   )r%   
fill_valuer   placevals        r   r   r   +  s     ;H
qww

*CJr   squeeze2c                 h    [        U R                  5      nUS:X  a  [        U 5      S/$ [        U5      S:X  a  [        [	        U5      5      nOU Vs1 s H  oDU-  iM	     nn/ n[        U R                  5       H#  u  pgUS:X  a  Xc;   a  M  UR                  U5        M%     [        X5      nUS/$ s  snf )z define composite rule of squeezer   Nr   )r=   r   rF   setr?   r@   r   rD   )	r%   r   rankdimsax	new_shapedr:   rj   s	            r   squeeze2_compositer   4  s     qww<Dqyq	4  
4yA~5;$()DbT	D)I!''"QAIQ # !
C; *s   B/sqrtc                    SnSSK Jn  U" U R                  5      nUS;   a  Sn[        U S5      n [	        [        U R                  5      S:X  a  U R                  OS/SU R                  5      n[        X5      nU(       d  U$ [        XS5      $ )	z4
define composite rule of op sqrt
res = pow(x, 0.5)
Fr   r   r   Tr   r   ro   )r   r   r   r   rA   r=   r   rC   )r%   r&   r   r   rY   r'   s         r   sqrt_compositer  M  sx     F5!''"E%%IAGG)QWWsCAA
a)C32$s"22r   rC   c                 J   SnSSK Jn  U" U R                  5      nUS;   a  Sn[        U S5      n [	        U[
        [        45      (       a<  [        [        U R                  5      S:X  a  U R                  OS/XR                  5      n[        X5      nU(       a  [        XT5      nU$ )z+
define composite rule of op pow
res = x^y
Fr   r   r   Tr   r   )r   r   r   r   r   r   floatrA   r=   r   rC   )r%   rY   r&   r   r   r'   s         r   pow_compositer  `  s     F5!''"E%%I!c5\""CLA-A377C
a)C3Jr   reluc                     [        U R                  5      S:X  a+  [        U [        U R                  SU R                  5      5      $ [        U [        S/SU R                  5      5      $ )z!define composite rule of op relu.r   r   r   )r=   r   r   rA   r   )r%   s    r   relu_compositer  v  sN     177|qq$qwwQWW566q$sC122r   
unsqueeze2c                      [        U R                  5      n[        U5      nU H'  nUS:  a  U[        U5      S-   -  n/ USU QSPX$S QnM)     [        X5      nUS/$ )z%define composite rule of op unsqueezer   r   N)listr   r=   rD   )r%   r   r   	axis_listr5   rj   s         r   unsqueeze_compositer    su     2177mGT
Iq5W!!A1GBQK11WR[1  !
C;r   
group_normc                 6   US:X  d   eU R                   u  pgpSn
SSKJn  U" U R                  5      nUS;   a&  Sn
[	        U S5      n [	        US5      n[	        US5      n[        XU-  S45      n [        U S	SS
9n[        X -  S	SS
9X-  -
  n[        U[        U5      5      nS	[        X-   5      -  nX-
  U-  n[        UXgX45      nUb  U[        US5      -  nUb  U[        US5      -   n[        XU45      n[        XU45      nU
(       a  [	        UU5      nUUU4$ )z
define composite rule of op group_norm.
x = ((x - mean) / sqrt(var + epsilon)) * scale + bias
mean and var are computed from groups
r0   Fr   r   r   Tr   rq   r   r   )rq   r   r   )
r   r   r   r   r   rD   rB   r   
zeros_liker   )r%   rI   rJ   rM   groupsrN   NCHWr&   r   r   rd   var_var_invrj   	ret_mean_ret_var_s                      r   group_norm_compositer    sC    &   JA!F5!''"E%%IUI&D)$J#$AD)EAt,u}<D4D)*D$t~&&G9
C
#a|
$CGE:..GD*--6{+It[)H3	8##r   r#   c                 $    SnU  H  nX-  nM	     U$ )Nr   r3   )r%   ansxis      r   sum_compositer    s    
C	 Jr   
leaky_reluc                 F    US:  a  [        XU -  5      $ [        XU -  5      $ )z'define composite rule of op leaky_relu.r   )r   r   )r%   negative_slopes     r   leaky_relu_compositer"    s,     q1,--q1,--r   )r   r	   )#r   r   paddle.baser   
primitivesprimregr   r   r   r+   r_   rk   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r"  r3   r   r   <module>r&     s  (     9!
 I 4 L!RA "RAj L!'  "' T O$(& %(&V F 0 M" #< K . !.B N#!. $!.H G
 
 ./- 0-: II IB  L! "2 N# $ I3 3$ F3 3$ J  4 O$ % J  0 F3 3$ E * F3 3 L!
 "
 L!%$ "%$P E  L!. ".r   