o
    Oe                     @   s	  d dl Z d dlZd dlZd dlZd dlZddlmZ ddlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9 d	d
 Z:dd Z;dd Z<dd Z=dd Z>	 e(ddd Z?e(ddd Z@e(ddd ZAe(ddd ZBe(dd d! ZCe(d"d#d$ ZDe(d%d&d' ZEe(d(d)d* ZFe(d+d,d- ZGe(d.d/d0 ZHe(d1d2d3 ZIe(d4d5d6 ZJe(d7d8d9 ZKe(d:d;d< ZLe(d=d>d? ZMe(d@dAdB ZNe(dCdDdE ZOe(dFdGdH ZPe(dIdJdK ZQe(dLdMdN ZRe(dOdPdQ ZSe(dRdSdT ZTe(dUdVdW ZUe(dXdYdZ ZVe(d[d\d] ZWe(d^d_d` ZXe(dadbdc ZYe(dddedf ZZe(dgdhdi Z[e(djdkdl Z\e(dmdndo Z]e(dpdqdr Z^e(dsdtdu Z_e(dvdwdx Z`e(dydzd{ Zae(d|d}d~ Zbe(ddd Zce)ddd Zde)ddd Zee)ddd Zfe)ddd Zge)ddd Zhe)ddd Zie)ddd Zje)ddd Zke)ddd Zle)ddd Zme)ddd Zne)ddd Zoe)ddd Zpe)ddd Zqe)ddd Zre)ddd Zse)ddd Zte)ddd Zue)ddd Zve)ddd Zwe)ddd Zxe)dddÄ Zye)dăddƄ Zze)dǃddɄ Z{e)dʃdd̄ Z|e)d̓ddτ Z}e)dЃdd҄ Z~e)dӃddՄ Ze)dփdd؄ Ze)dكddۄ Ze)d܃ddބ Ze)d߃dd Ze'ddd Ze'ddd Ze'ddd Ze'ddd Ze'ddd Ze'ddd Ze'ddd Ze'ddd Ze'ddd Ze'ddd Ze'ddd Ze'ddd Ze'ddd Ze'ddd Ze'ddd Ze'dd d Ze'ddd Ze'ddd Ze'ddd Ze'ddd	 Ze'dd
d Ze'ddd Ze'dădd Ze'dʃdd Ze'd̓dd Ze'dЃdd Ze'dӃdd Ze'dփdd Ze'dكdd Ze'd܃dd Ze'd߃dd Ze*dd d! Ze*dd"d# Ze*dd$d% Ze*dd&d' Ze*dd(d) Ze*dd*d+ Ze*dd,d- Ze*dd.d/ Ze*dd0d1 Ze*dd2d3 Ze*dd4d5 Ze*dd6d7 Ze*dd8d9 Ze*dd:d; Ze*dăd<d= Ze*dʃd>d? Ze*d߃d@dA ZdS (B      N   )primops)add	broadcastconcatcosdiveqerfexp
fill_constgathergegtlogmatmulmaxmulneneg
reduce_sumreshapescatter_addselect	set_valuesinslice_assignslice_selectsplitsqrtsubtanh	transpose)REGISTER_JVPREGISTER_ORIG2PRIMREGISTER_PRIM2ORIGREGISTER_TRANSPOSE	lookup_fn
lookup_jvplookup_orig2primlookup_prim2origlookup_transposeop_position_inputsop_position_output)INT_DTYPE_2_STRINGget_input_var_listget_output_var_list)convert_dtype)convert_np_dtype_to_dtype_c                 G      t | j}|| g|R  S N)r)   typeopargsZ
_lowerrule r9   RD:\Projects\ConvertPro\env\Lib\site-packages\paddle/incubate/autograd/primrules.py
_orig2prim$      
r;   c                 G   r3   r4   )r*   r5   r6   r9   r9   r:   
_prim2orig)   r<   r=   c                 G   r3   r4   )r(   r5   )r7   r8   Z_jvpruler9   r9   r:   _jvp.   r<   r>   c                 G   s   t | j}|| |g|R  S r4   )r+   r5   )r7   Zdot_checkerr8   Z_transposeruler9   r9   r:   
_transpose3   s   
r?   c                 O   s   t | j}||i |}|S r4   )r'   r5   )r7   r8   kwargsfnZout_dotr9   r9   r:   
linear_jvp8   s   
rB   Zelementwise_addc                 C      |j |j krt||j d}| dd dkr't|j |j| dd}t||}| dd dkrAt|j |j| dd}t||}t||}| dd dkr`t|j |j| dd}t||}|S NshapeZScale_x      ?h㈵>rF   dtypevalueZScale_yZ	Scale_out)rF   r   attrr   rJ   r   r   r7   xyZscale_xZscale_yzZ	scale_outr9   r9   r:   elementwise_add_orig2prim\   ,   



rQ   Zelementwise_subc                 C   rC   rD   )rF   r   rL   r   rJ   r   r    rM   r9   r9   r:   elementwise_sub_orig2prims   rR   rS   Zelementwise_mulc                 C   s   |j |j krt||j d}| dd dkr't|j |j| dd}t||}| dd dkrAt|j |j| dd}t||}t||}| dd dkr`t|j |j| dd}t||}|S rD   )rF   r   rL   r   rJ   r   rM   r9   r9   r:   elementwise_mul_orig2prim   rR   rT   Zelementwise_divc                 C   &   |j |j krt||j d}t||S NrE   )rF   r   r   r   r7   rN   rO   r9   r9   r:   elementwise_div_orig2prim      rX   r!   c                 C      t |S r4   )r!   r7   rN   r9   r9   r:   tanh_orig2prim      r\   r   c                 C   rZ   r4   )r   r[   r9   r9   r:   sin_orig2prim   r]   r^   r   c                 C   rZ   r4   )r   r[   r9   r9   r:   cos_orig2prim   r]   r_   r   c                 C   rZ   r4   )r   r[   r9   r9   r:   exp_orig2prim   r]   r`   r
   c                 C   rZ   r4   )r
   r[   r9   r9   r:   erf_orig2prim   r]   ra   absc                 C   
   t |S r4   )r   rb   r[   r9   r9   r:   abs_orig2prim      
rd   r   c                 C   rZ   r4   )r   r[   r9   r9   r:   log_orig2prim   r]   rf   Zfill_zeros_likec                 C   s   t d|j|jdS N        rK   rF   rJ   )r   rF   rJ   r[   r9   r9   r:   fill_zeros_like_orig2prim   s   rj   Zfill_any_likec              	   C   sN   |  ddkrt|  d|j|jdS t|  d|jttt|  d dS )NrJ   rK   ri   )rL   r   rF   rJ   r2   r1   r.   r[   r9   r9   r:   fill_any_like_orig2prim   s   
rl   sumc                 C   s(   |d }|dd  D ]}t ||}q
|S )Nr   r   )r   )r7   xsZx0rN   r9   r9   r:   sum_orig2prim   s   ro   Zindex_selectc                 C   s   t ||| ddS )Ndim)indextensoraxis)r   rL   r7   index_trN   r9   r9   r:   index_select_orig2prim      ru   scalec                 C   sb   |d u rt |j|j| dd}t |j|j| dd}| dr)tt|||S tt|||S )Nrw   rI   ZbiasZbias_after_scale)r   rF   rJ   rL   r   r   )r7   Zscale_trN   Zbias_tr9   r9   r:   scale_orig2prim   s   
rx   assignc                 C   s   t |j|jdd}t||S )Nrh   rI   )r   rF   rJ   r   )r7   rN   Zzero_tr9   r9   r:   assign_orig2prim   s   
rz   r   c                 C   rZ   r4   )r   r[   r9   r9   r:   sqrt_orig2prim   r]   r{   Z	matmul_v2c                 C   s   dd }t |jdk rt |jdk sJ dt |jdkr(t|d|jd gd}t |jdkr:t||jd dgd}| drHt|||jd	}| d
rVt|||jd	}t||S )Nc                 S   s4   dd t t| D }|d |d |d< |d< |S )Nc                 S   s   g | ]}|qS r9   r9   ).0ir9   r9   r:   
<listcomp>      z6matmul_v2_orig2prim.<locals>.trans.<locals>.<listcomp>rk   )rangelen)rF   retr9   r9   r:   trans  s   z"matmul_v2_orig2prim.<locals>.trans   z4Do not support multi batchsize dimensions currently.r   r   rE   Ztrans_xrr   Ztrans_y)r   rF   r   rL   r"   r   )r7   rN   rO   r   r9   r9   r:   matmul_v2_orig2prim   s"   


r   Zreshape2c                 C   sL   |d u sJ d|d u sJ dt | \}}t||jdt|j|jddfS )Nz6Can not lower reshape2 into prim ops with shapetensor.z:Can not lower reshape2 into prim ops with shapetensorlist.rE   rh   rI   )r0   r   rF   r   rJ   )r7   Zshape_tZshape_tlrN   rO   Zxshaper9   r9   r:   reshape2_orig2prim  s   r   r   c                 C   s"   |d u sJ dt || ddS )Nz3Can not lower concat into prim ops with axistensor.rr   r   )r   rL   )r7   Zaxis_trn   r9   r9   r:   concat_orig2prim   s   r   slicec                 C   s   |d u sJ d|d u sJ d|d u sJ d|d u s J d|  d}|  d}dd |D }|  d	}	t|||||	d
}
|  drOt|
t| d jd}
|
S )Nz5Can not lower concat into prim ops with startstensor.z3Can not lower concat into prim ops with endstensor.z9Can not lower concat into prim ops with startstensorlist.z7Can not lower concat into prim ops with endstensorlist.startsendsc                 S   s   g | ]}d qS r   r9   )r|   _r9   r9   r:   r~   .  r   z#slice_orig2prim.<locals>.<listcomp>axes)r   r   stridesrr   Zdecrease_axisr   rE   )rL   r   r   r0   rF   )r7   Zends_tZends_tlrN   Zstarts_tZ	starts_tlr   r   r   rr   rO   r9   r9   r:   slice_orig2prim&  s   



r   Zp_normc                 C   s   dd }|  dsJ dt|jdkrt|||jgd}t|  dd d	k r5ttt||d
gdS t|  dd d	k rLttt||d
gdS td)Nc                 S   s   d}| D ]}|| }q|S )Nr   r9   )rF   nsr9   r9   r:   num_el9  s   
z p_norm_orig2prim.<locals>.num_elZasvectorz5Only support lower pnorm when asvector=True currentlyr   rE   Zporder       @rH   r   r   rG   z'Only support lower l2/l1 norm currently)	rL   r   rF   r   rb   r   r   r   RuntimeError)r7   rN   r   r9   r9   r:   p_norm_orig2prim6  s   r   castc                 C   s   t |t| dS )NZ	out_dtype)r   r   paddlerJ   rL   r[   r9   r9   r:   cast_orig2primL     r   wherec                 C   s   t |||S r4   )r   r7   	conditionrN   rO   r9   r9   r:   select_orig2primR     r   equalc                 C   $   |j |j krt||j d}t||S rV   )rF   r   r	   rW   r9   r9   r:   equal_orig2primW     
r   	not_equalc                 C   r   rV   )rF   r   r   rW   r9   r9   r:   ne_orig2prim^  r   r   greater_thanc                 C   r   rV   )rF   r   r   rW   r9   r9   r:   gt_orig2prime  r   r   greater_equalc                 C   r   rV   )rF   r   r   rW   r9   r9   r:   ge_orig2priml  r   r   Zelementwise_powc                 C   s*   |j |j krt||j d}t||}|S rV   )rF   r   r   pow)r7   rN   rO   rP   r9   r9   r:   elementwise_pow_orig2primt  s   r   r   c                 C   s   t |t| d|j|jS )Nfactor)r   r   r   rL   rF   rJ   rW   r9   r9   r:   pow_orig2prim}  s   r   Zsquarec                 C   s   t |td|j|jS Nr   )r   r   r   rF   rJ   r[   r9   r9   r:   square_orig2prim  r   r   Zelementwise_maxc                 C   rU   rV   )rF   r   r   r   rW   r9   r9   r:   elementwise_max_orig2prim  rY   r   Zgeluc                 C   s   |  drEttd|j|jttd|j|jttttdtj	 |j|jt|ttd|j|jt
|td|j|j}t||S tttd|j|j|ttd|j|jtt|tdtd |j|jS )	NZapproximateg      ?rG      gHm?g      @r   r   )rL   r   r   rF   rJ   r   r!   mathr   pir   r   r
   )r7   rN   Zcdfr9   r9   r:   gelu_orig2prim  s8   

"r   r   c                 C   s<   |  drttdt|jn|  d}t|||  ddS )N
reduce_allr   rp   keep_dimrr   keepdim)rL   tupler   r   rF   r   )r7   rN   r   r9   r9   r:   reduce_sum_orig2prim  s   
r   Zreduce_meanc                    sp   |  drttdt jn|  d}t ||  dd}t|jtt	j
 fdd|D |jd}t||S )	Nr   r   rp   r   r   c                    s   g | ]} j | qS r9   rE   )r|   rr   rN   r9   r:   r~         z)reduce_mean_orig2prim.<locals>.<listcomp>)rF   rK   rJ   )rL   r   r   r   rF   r   r   	functoolsreduceoperatorr   rJ   r   )r7   rN   r   rm   Znormr9   r   r:   reduce_mean_orig2prim  s   

r   sizec                 C   s   t ttj|jdtjS )Nr   )r   r   r   r   r   rF   r   Zint64r[   r9   r9   r:   size_orig2prim  s   r   Zadd_pc                 C      t ||S r4   )r   r   rW   r9   r9   r:   add_prim2orig  r   r   Zsub_pc                 C   r   r4   )r   subtractrW   r9   r9   r:   sub_prim2orig  r   r   Zmul_pc                 C   r   r4   )r   multiplyrW   r9   r9   r:   mul_prim2orig  r   r   Zdiv_pc                 C   r   r4   )r   dividerW   r9   r9   r:   div_prim2orig  r   r   Zsqrt_pc                 C   rc   r4   )r   r   r[   r9   r9   r:   sqrt_prim2orig  re   r   Ztanh_pc                 C   rc   r4   )r   r!   r[   r9   r9   r:   tanh_prim2orig  re   r   Zsin_pc                 C   rc   r4   )r   r   r[   r9   r9   r:   sin_prim2orig  re   r   Zcos_pc                 C   rc   r4   )r   r   r[   r9   r9   r:   cos_prim2orig  re   r   Zexp_pc                 C   rc   r4   )r   r   r[   r9   r9   r:   exp_prim2orig  re   r   Zerf_pc                 C   rc   r4   )r   r
   r[   r9   r9   r:   erf_prim2orig  re   r   Zabs_pc                 C   rc   r4   )r   rb   r[   r9   r9   r:   abs_prim2orig  re   r   Zlog_pc                 C   rc   r4   )r   r   r[   r9   r9   r:   log_prim2orig  re   r   Z	reshape_pc                 C      t j|| ddS NrF   rE   )r   r   rL   r[   r9   r9   r:   reshape_prim2orig  rv   r   Zbroadcast_pc                 C   r   r   )r   Zbroadcast_torL   r[   r9   r9   r:   broadcast_prim2orig  rv   r   Ztranspose_pc                 C   r   )Nrr   )perm)r   r"   rL   r[   r9   r9   r:   transpose_prim2orig  rv   r   Zsplit_pc                 C   s4   |  d}t|dkr|d }tj|||  ddS )Nnum_or_sectionsr   r   rr   r   rr   )rL   r   r   r   )r7   rN   r   r9   r9   r:   split_prim2orig  s   
r   Zconcat_pc                 C   r   Nrr   r   )r   r   rL   )r7   rn   r9   r9   r:   concat_prim2orig  rv   r   Zreduce_sum_pc                 C   s   t j|| d| ddS Nrr   r   r   )r   rm   rL   r[   r9   r9   r:   reduce_prim2orig  s   r   Zmatmul_pc                 C   r   r4   )r   r   rW   r9   r9   r:   matmul_prim2orig   r   r   Zslice_select_pc                 C   s,   t j|| d| d| d| ddS )Nrr   r   r   r   )r   r   r   r   )r   Zstrided_slicerL   r[   r9   r9   r:   slice_select_prim2orig%  s   r   Zslice_assign_pc              	   C   s8   t |}t||| d| d| d| d|dS )Nrr   r   r   r   )rr   r   r   r   out)r   ry   r   rL   )r7   rN   rO   Zx_copyr9   r9   r:   slice_assign_prim2orig.  s   
r   Zgather_pc                 C   s   t j||| ddS r   )r   r   rL   rs   r9   r9   r:   gather_prim2orig:  s   r   Zscatter_add_pc                 C   sD   |  ddksJ dtj||jd}tj|||dd}t||S )Nrr   r   zOnly support axis==0 currently)rN   rJ   F)rN   indexZupdates	overwrite)rL   r   Z
zeros_likerJ   Zscatterr   )r7   rt   rN   rO   zerostmpr9   r9   r:   scatter_add_prim2orig?  s   r   Zfill_constant_pc                 C   s&   t j| d| dt| d dS )NrF   rK   rJ   )rF   Z
fill_valuerJ   )r   fullrL   r.   )r7   r9   r9   r:   fill_constant_prim2origG  s   r   Zselect_pc                 C   s   t |||S r4   )r   r   r   r9   r9   r:   select_prim2origN  s   r   Zeq_pc                 C   r   r4   )r   r   rW   r9   r9   r:   eq_prim2origS  r   r   Zgt_pc                 C   r   r4   )r   r   rW   r9   r9   r:   gt_prim2origX  r   r   Zge_pc                 C   r   r4   )r   r   rW   r9   r9   r:   ge_prim2orig]  r   r   Zne_pc                 C   r   r4   )r   r   rW   r9   r9   r:   ne_prim2origb  r   r   Zpow_pc                 C   r   r4   )r   r   rW   r9   r9   r:   pow_prim2origg  r   r   Zmax_pc                 C   r   r4   )r   maximumrW   r9   r9   r:   max_prim2origl  r   r   Zcast_pc                 C   s   t |t | dS )NrJ   )r   r   rJ   rL   r[   r9   r9   r:   cast_prim2origq  r   r   c                 C   s$   |d u r|S |d u r|S t | ||S r4   )rB   r7   x_doty_dotr9   r9   r:   add_jvpw  s
   r   c                 C   s(   |d u rt |S |d u r|S t| ||S r4   )r   rB   r   r9   r9   r:   sub_jvp  s
   r   c                 C   sh   |d u r
|d u r
d S t | \}}|d u rt||S |d u r"t||S t||t||}}t||}|S r4   )r,   r   r   )r7   r   r   rN   rO   t1t2z_dotr9   r9   r:   mul_jvp  s   


r   c                 C   s~   |d u r
|d u r
d S t | \}}|d u rt||S |d u r*ttt||t||S t||}tt||t||}t||S r4   )r,   r   r   r   r    r7   r   r   rN   rO   r   r   r9   r9   r:   div_jvp  s   


r   c                 C   s:   |d u rd S t | }td|j|jd}t|t||}|S )Nr   ri   )r-   r   rF   rJ   r   r   )r7   r   rO   c2r   r9   r9   r:   sqrt_jvp  s   r  c                 C   s@   |d u rd S t | }td|j|jd}t|t|t||}|S )NrG   ri   )r-   r   rF   rJ   r   r    )r7   r   rO   c1r   r9   r9   r:   tanh_jvp  s   r  c                 C   s$   |d u rd S t | \}t|t|S r4   )r,   r   r   r7   r   rN   r9   r9   r:   sin_jvp     
r  c                 C   s(   |d u rd S t | \}t|tt|S r4   )r,   r   r   r   r  r9   r9   r:   cos_jvp  s   
r  c                 C   s   |d u rd S t | }t||S r4   )r-   r   r7   r   rO   r9   r9   r:   exp_jvp  s   
r
  c                 C   sZ   |d u rd S t | \}ttdttj |j|jt|tt	t
|td|j|jS r   )r,   r   r   r   r   r   rF   rJ   r   r   r   r   r  r9   r9   r:   erf_jvp  s   
$r  c                 C   s8   |d u rd S t | \}tt|td|j|j|t|S )Nrh   )r,   r   r   r   rF   rJ   r   r  r9   r9   r:   abs_jvp  s   
"r  c                 C   s    |d u rd S t | \}t||S r4   r,   r   r  r9   r9   r:   log_jvp  s   

r  c                 C   $   |d u rd S |  d}t| ||dS r   rL   rB   r7   r   rF   r9   r9   r:   reshape_jvp  r  r  c                 C   r  r   r  r  r9   r9   r:   broadcast_jvp  r  r  c                 C   r  r   r  )r7   r   rr   r9   r9   r:   transpose_jvp  r  r  c                 C   0   |d u rd S |  d}|  d}t| |||dS )Nr   rr   r   r  )r7   r   r   rr   r9   r9   r:   	split_jvp  
   

r  c                 C   r  r   r  )r7   Zxs_dotrr   r9   r9   r:   
concat_jvp  r  r  c                 C   r  r   r  )r7   r   rr   r   r9   r9   r:   reduce_sum_jvp  r  r  c                 C   sb   |d u r
|d u r
d S t | \}}|d u rt||S |d u r"t||S t||}t||}t||S r4   )r,   r   r   r   r9   r9   r:   
matmul_jvp!  s   




r  c                 C   sH   |d u r|S |  d}|  d}|  d}|  d}t| |||||dS )Nrr   r   r   r   rr   r   r   r   r  )r7   r   rr   r   r   r   r9   r9   r:   slice_select_jvp0  s   



r  c              	   C   sj   |d u r|d u sJ dd S |d usJ d|  d}|  d}|  d}|  d}t| ||||||dS )Nzy_dot must be None.zy_dot should not be None.rr   r   r   r   r  r  )r7   r   r   rr   r   r   r   r9   r9   r:   slice_assign_jvp@  s    



r  c                 C   s2   |d u rd S t | \}}| d}t| |||dS r   r,   rL   rB   )r7   r   rq   r   rr   r9   r9   r:   
gather_jvpT  s
   
r  c                 C   s6   |d u rd S t | \}}}| d}t| ||||dS r   r  )r7   r   r   r   rq   rr   r9   r9   r:   scatter_add_jvp]  s
   
r   c                 C   sb   |d u r
|d u r
d S t | \}}}|d u rtd|j|jd}|d u r+td|j|jd}t|||S rg   r,   r   rF   rJ   r   )r7   Zcond_dotr   r   condrN   rO   r9   r9   r:   
select_jvpf  s   r#  c                 C   6   |d u r
|d u r
d S t | \}}td|j|jd}|S rg   r,   r   rF   rJ   r7   r   r   rN   r   r   r9   r9   r:   eq_jvps  
   r'  c                 C   r$  rg   r%  r&  r9   r9   r:   gt_jvp|  r(  r)  c                 C   r$  rg   r%  r&  r9   r9   r:   ge_jvp  r(  r*  c                 C   r$  rg   r%  r&  r9   r9   r:   ne_jvp  r(  r+  c           
         s    fdd} d u r|d u rd S t | \}}t| }|d u r#|||S  d u r1t|tt||S |||t|tt||}}t||}	|	S )Nc                    s\   t d|j|jd}t d|j|jd}t||}t||t||}t t|t| |}|S )Nrh   ri   rG   )	r   rF   rJ   r	   r   r    r   r   r   )rN   rO   Zzero_yZone_yr"  Znew_yr   r   r9   r:   _compute_t1  s   
zpow_jvp.<locals>._compute_t1)r,   r-   r   r   r   )
r7   r   r   r-  rN   rO   rP   r   r   r   r9   r,  r:   pow_jvp  s   	
 
r.  c                 C   s   |d u r
|d u r
d S t | \}}t| }td|j|jd}|d u r*tt||||S |d u r7tt||||S tt||||S rg   )r,   r-   r   rF   rJ   r   r	   )r7   r   r   rN   rO   rP   Zz_zerosr9   r9   r:   max_jvp  s   r/  c                 C   s   t | }t||jS r4   )r-   r   r   rJ   r	  r9   r9   r:   cast_jvp  s   r0  c                 C   sb   t | \}}||s||sJ d|| d|| d||r#|nd }||r+|nd }||fS Nz>(check_dot(x) or check_dot(y)) must be True, but check_dot(x)= and check_dot(y)=.)r,   r7   	check_dotz_barrN   rO   x_bary_barr9   r9   r:   add_transpose  s   r9  c                 C   sf   t | \}}||s||sJ d|| d|| d||r#|nd }||r-t|nd }||fS r1  )r,   r   r4  r9   r9   r:   sub_transpose  s   r:  c                 C   s^   t | \}}||||A sJ d|| d|| d||r(t||d fS d t||fS )N=(check_dot(x) ^ check_dot(y)) must be True, but check_dot(x)=r2  r3  )r,   r   )r7   r5  r6  rN   rO   r9   r9   r:   mul_transpose  s   r<  c                 C   s:   t | \}}||rJ d||rt||nd }|d fS )Nzcheck_dot(y) must be Falser  )r7   r5  r6  rN   rO   r7  r9   r9   r:   div_transpose  s   r=  c                 C   s(   t | \}||sJ dt||jdS )Ncheck_dot(x) must be TruerE   )r,   r   rF   r7   r5  r8  rN   r9   r9   r:   reshape_transpose  s   
r@  c                    st   t | \}||sJ dt|jt|j  tt } fddt|jD }||7 }t||dd}t||jS )Nr>  c                    s    g | ]\}}|d kr | qS r   r9   )r|   r}   r   batr9   r:   r~     s     z'broadcast_transpose.<locals>.<listcomp>Fr   )r,   r   rF   listr   	enumerater   r   )r7   r5  r8  rN   rr   r   r   r9   rA  r:   broadcast_transpose   s   
rE  c                 C   sT   t | \}||sJ d| d}tdd t|D }dd |D }t||dS )Nr>  rr   c                 s   s    | ]	\}}||fV  qd S r4   r9   )r|   r}   kr9   r9   r:   	<genexpr>  s    z&transpose_transpose.<locals>.<genexpr>c                 S   s   g | ]\}}|qS r9   r9   )r|   rF  r}   r9   r9   r:   r~     s    z'transpose_transpose.<locals>.<listcomp>r   )r,   rL   sortedrD  r"   )r7   r5  r8  rN   rr   	reorderedr9   r9   r:   transpose_transpose  s   

rJ  c                 C   s,   t | \}||sJ dt|| ddS )Nr>  rr   r   )r,   r   rL   )r7   r5  Zys_barrN   r9   r9   r:   split_transpose  s   
rK  c                    sp   t | \}t|tjs|g}|D ]
}||sJ dq| d  fdd|D }t|dkr1|S t|| dS )Nr>  rr   c                    s   g | ]}|j   qS r9   rE   )r|   rN   r   r9   r:   r~   &  r   z$concat_transpose.<locals>.<listcomp>r   r   )r,   
isinstancetypingSequencerL   r   r   )r7   r5  r8  rn   rN   sectionsr9   r   r:   concat_transpose  s   

rP  c                    sZ   t | \}||sJ d| d t fddt|jD }t||d}t||jdS )Nr>  rr   c                 3   s$    | ]\}}| v rd n|V  qdS )r   Nr9   )r|   r}   r   r   r9   r:   rG  1  s   " z'reduce_sum_transpose.<locals>.<genexpr>rE   )r,   rL   r   rD  rF   r   r   )r7   r5  r8  rN   rF   tr9   rQ  r:   reduce_sum_transpose,  s   

rS  c                 C   s   t | \}}||||A sJ d|| d|| dt|jdkr(ddgng d}||r;t|t||dd fS d tt||d|fS )	Nr;  r2  r3  r   r   r   )r   r   r   r   )r,   r   rF   r   r"   )r7   r5  r6  rN   rO   rr   r9   r9   r:   matmul_transpose6  s   rT  c           	      C   sh   t | \}||sJ dtd|j|jd}| d}| d}| d}| d}t||||||dS )	Nr>  rh   ri   rr   r   r   r   r  )r,   r   rF   rJ   rL   r   )	r7   r5  r8  rN   r   rr   r   r   r   r9   r9   r:   slice_select_transposeD  s   




rU  c                 C   s   t | \}}||r||sJ d|| d|| dtd|j|jd}| d}| d}| d}| d	}	t||||||	d
}
t|||||	d
}|
|fS )N?(check_dot(x) and check_dot(y)) must be True, but check_dot(x)=r2  r3  rh   ri   rr   r   r   r   r  )r,   r   rF   rJ   rL   r   r   )r7   r5  r6  rN   rO   r   rr   r   r   r   r7  r8  r9   r9   r:   slice_assign_transposeU  s6   



rW  c           	      C   sR   t | \}}||sJ d| d}td|j|j}t||||d}d }||fS )Nr>  rr   rh   r   )r,   rL   r   rF   rJ   r   )	r7   r5  r8  rN   rq   rr   r   r7  indextensor_barr9   r9   r:   gather_transposen  s   
rY  c                 C   s   t | \}}}||r||sJ d|| d|| d| d}td|j|jd}t||||d}t|||d}	d }
||	|
fS )NrV  r2  r3  rr   rh   ri   r   )r,   rL   r   rF   rJ   r   r   )r7   r5  r6  rN   rO   rq   rr   r   r7  r8  rX  r9   r9   r:   scatter_add_transposey  s   

rZ  c                 C   s   t | \}}}||s'||s'||s'J d|| d|| d|| dtd|j|jd}td|j|jd}||rFtd|j|jdnd }||rRt|||nd }	||r^t|||nd }
||	|
fS )NzRcheck_dot(cond) ^ (check_dot(x) ^ check_dot(y)) must be True, but check_dot(cond)=z, check_dot(x)=r2  r3  rh   ri   r!  )r7   r5  r6  r"  rN   rO   Zzeros_xZzeros_yZcond_barr7  r8  r9   r9   r:   select_transpose  s*   

r[  c                 C   s   t | \}t||jS r4   )r,   r   r   rJ   r?  r9   r9   r:   cast_transpose  s   
r\  )r   r   r   rM  r    r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   Zprimregr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   utilsr.   r/   r0   Zpaddle.fluid.data_feederr1   Zpaddle.fluid.frameworkr2   r;   r=   r>   r?   rB   rQ   rS   rT   rX   r\   r^   r_   r`   ra   rd   rf   rj   rl   ro   ru   rx   rz   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r#  r'  r)  r*  r+  r.  r/  r0  r9  r:  r<  r=  r@  rE  rJ  rK  rP  rS  rT  rU  rW  rY  rZ  r[  r\  r9   r9   r9   r:   <module>   s  4












	






	
































	
















	
	


	
	



	






		
