o
    Oe5                     @   s$  d dl Z d dlmZ ddlmZ dd Zdd Zd	d
 ZdvddZdvddZ	dd Z
edddddvddZedddddvddZedddddvddZedddddvddZed dddvd!d"Zed#dddvd$d%Zed&dddvd'd(Zed)dddvd*d+Zed,dddvd-d.Zed/dddvd0d1Zed2dddvd3d4Zed5dddvd6d7Zed8dddwd9d:Zed;dd<dxd=d>Zed?d@ddxdAdBZedCdddydEdFZedGddddvdHdIZedJdddvdKdLZedMddddvdNdOZedPddQddvdRdSZedTdddQddvdUdVZedWdddvdXdYZ edZd[ddddvd\d]Z!ed^ddddvd_d`Z"edaddddvdbdcZ#eddddddvdedfZ$edgddddvdhdiZ%edjddddvdkdlZ&edmddddvdndoZ'edpdddvdqdrZ(edsdddvdtduZ)dS )z    N)LayerHelper   )REGISTER_FNc                 C   sP   | j }tt| jjd\}}|d u r| j|jd}| j|d|id|ii d |S )NxoutdtypeXYtypeinputsoutputsattrs
layer_typetuplemapkwargsget"create_variable_for_type_inferencer	   	append_op)helperoptyper   r    r   PD:\Projects\ConvertPro\env\Lib\site-packages\paddle/incubate/autograd/primops.py_simple_unop   s   r   c                 C   sT   | j }tt| jjd\}}}|d u r| j|jd}| j|||dd|ii d |S )Nr   yr   r   r
   r   Zr   r   )r   r   r   r   r   r   r   r   _simple_binop   s   r"   c                    sb    j }tt jjd\}} fdddD }|d u r" j|jd} j|d|id|i|d |S )	Nr   c                    s"   i | ]}| j v r| j | qS r   )r   ).0kr   r   r   
<dictcomp>3   s    
z&_manipulation_unop.<locals>.<dictcomp>)shapeaxisindexr   r
   r   r   r   )r   r   r   r   r   r   r%   r   _manipulation_unop/   s   
r*   c                 C   sH   | ||d}t di t }|d u r||}|j|jd|i|d |S )N)valuer'   r	   fill_constant_pr   )r   r   r   )r,   r   localsr   r   r   )r+   r'   r	   r   r   r   r   r   r   
fill_constC   s   
r/   c                 C   s   t d| j| j}t|| S )Ng        )r/   r'   r	   sub)r   r   zeror   r   r   negL   s   
r2   c           	      C   sP   | |u sJ d||||d}t di t }|j|j| |dd|i|d |S )Nz0x and out should be the same Tensor in set_value)axesstartsendsZsteps	set_value)ZInputZValueTensorZOutr   )r6   )r   r.   r   r   	r   r   r(   r4   r5   stridesr   r   r   r   r   r   r6   Q   s   r6   add_pr
   r   r!   c                 C      t tdi t S )Nr9   )r9   r"   r   r.   r   r   r   r   add_      r<   sub_pc                 C   r:   )Nr>   )r>   r;   r   r   r   r   r0   d   r=   r0   mul_pc                 C   r:   )Nr?   )r?   r;   r   r   r   r   muli   r=   r@   div_pc                 C   r:   )NrA   )rA   r;   r   r   r   r   divn   r=   rB   sqrt_pc                 C   r:   )NrC   )rC   r   r   r.   r   r   r   r   sqrts   r=   rE   tanh_pc                 C   r:   )NrF   )rF   rD   r   r   r   r   tanhx   r=   rG   sin_pc                 C   r:   )NrH   )rH   rD   r   r   r   r   sin}   r=   rI   cos_pc                 C   r:   )NrJ   )rJ   rD   r   r   r   r   cos   r=   rK   exp_pc                 C   r:   )NrL   )rL   rD   r   r   r   r   exp   r=   rM   abs_pc                 C   r:   )NrN   )rN   rD   r   r   r   r   abs   r=   rO   	reshape_pc                 C   r:   )NrP   )rP   r*   r   r.   r   r'   r   r   r   r   reshape   r=   rS   broadcast_pc                 C   r:   )NrT   )rT   rQ   rR   r   r   r   	broadcast   r=   rU   transpose_pc                 C   r:   )NrV   )rV   rQ   )r   r(   r   r   r   r   	transpose   r=   rW   split_pYSc                    s   t |ttfrt|}nt |tstdt| d|}||d}td
i t  |d u r: fddt	|D } j
 jdid|i|d	 |S )Nz%num_or_sections must be int, but got .)num_or_sectionsr(   rX   c                    s   g | ]	} j jd qS )r   )r   r	   )r#   ir   r   r   r   
<listcomp>   s    zsplit.<locals>.<listcomp>r
   rY   r   )rX   )
isinstancelistr   lenint	TypeErrorr   r   r.   ranger   r   )r   r[   r(   Zoutsnr   r   r]   r   split   s&   


rf   concat_pXSc                 C   sh   t | tjjjr| g} d|i}tdi t }|d u r$|j| d jd}|j	|j
d| id|i|d |S )	Nr(   rg   r   r   rh   r   r   )rg   )r_   paddleZfluidZ	frameworkVariabler   r.   r   r	   r   r   )Zxsr(   r   r   r   r   r   r   concat   s   rk   reduce_sum_pFc                 C   s   |pt tdt| j}t|tr|fn|}t|t tfs&tdt| t|t	s4tdt| ||d}t
d
i t }|d u rL|j| jd}|j|jd| id|i|d	 |S )Nr   z$axis must be tuple or list, but got zkeepdim must be bool, but got )r(   keepdimrl   r   r
   r   r   )rl   )r   rd   ra   r'   r_   rb   r`   rc   r   boolr   r.   r   r	   r   r   )r   r(   rm   r   r3   r   r   r   r   r   
reduce_sum   s    

ro   matmul_pc                 C   r:   )Nrp   )rp   r;   r   r   r   r   matmul   r=   rq   slice_select_pc              
   C   s  t |ttfstdt| dt |ttfs"tdt| dt |ttfs3tdt| dt|t|  krJt|  krJt|kscn J dt| dt| dt| dt| ||||d	}tdi t }|d u r}|j| j	d}|j
|jd| id|i|d |S )NzFArgument type error. `axis` is supposed to be list or tuple but found rZ   zHArgument type error. `starts` is supposed to be list or tuple but found zFArgument type error. `ends` is supposed to be list or tuple but found zRlen(axis), len(starts), len(ends) and len(strides) should be equal, but len(axis)=z, len(starts)=, len(ends)=z and len(strides)=r(   r4   r5   r8   rr   r   r
   r   r   )rr   )r_   r`   r   rc   r   ra   r   r.   r   r	   r   r   )r   r(   r4   r5   r8   r   r   r   r   r   r   slice_select   sF   

2ru   slice_assign_pc           	   
   C   s   t |t |  krt |  krt |ks0n J dt | dt | dt | dt | t |jt | jksKJ dt |j dt | j d||||d}tdi t }|d u re|j| jd
}|j|j| |dd|i|d |S )NzTlen(starts), len(ends), len(strides) and len(axis) should be equal, but len(starts)=rs   z, len(strides)=z and len(axis)=z?len(y.shape) should be equal to len(x.shape), but len(y.shape)=z and len(x.shape)=rZ   rt   rv   r   r    r!   r   )rv   ra   r'   r   r.   r   r	   r   r   r7   r   r   r   slice_assign   s<   2rx   gather_pIndexTensorc                 C   sP   d|i}t di t }|d u r|j| jd}|j|j| |dd|i|d |S )Nr(   ry   r   )r
   rz   r   r   )ry   )r   r.   r   r	   r   r   )r   indextensorr(   r   r   r   r   r   r   gather  s   r|   scatter_add_pc                 C   s   t | jt |jksJ dt | j dt |j dt |jdks-J dt |j d|j| |jd ksHJ d|j|  d|jd  dd	|i}tdi t }|d u r_|j| jd}|j|j| ||dd|i|d |S )Nz?len(x.shape) should be equal to len(y.shape), but len(x.shape)=z and len(y.shape)=rZ   r   z3len(indextensor.shape) must be equal to 1, but got r   zIy.shape[axis] should be equal to indextensor.shape[0], but y.shape[axis]=z and indextensor.shape[0]=r(   r}   r   )r
   r   rz   r!   r   )r}   rw   )r   r   r{   r(   r   r   r   r   r   r   scatter_add'  sD   r~   log_pc                 C   r:   )Nr   )r   rD   r   r   r   r   logB  r=   r   select_p	Conditionc                 C   s   t | jt |jkrtdt | jt |jt |jt |jkr0tdt |jt |jtdi t }|d u rC|j|jd}|j|j	| ||dd|id |S )	Nz\len(cond.shape) should be equal to len(x.shape), but len(cond.shape)={} and len(x.shape)={}.zVlen(x.shape) should be equal to len(y.shape), but len(x.shape)={} and len(y.shape)={}.r   r   )r   r
   r   r!   )r   r   r   )r   )
ra   r'   
ValueErrorformatr   r.   r   r	   r   r   )Zcondr   r   r   r   r   r   r   selectG  s*   r   eq_pc                 C   r:   )Nr   )r   r;   r   r   r   r   eq`  r=   r   gt_pc                 C   r:   )Nr   )r   r;   r   r   r   r   gte  r=   r   ge_pc                 C   r:   )Nr   )r   r;   r   r   r   r   gej  r=   r   ne_pc                 C   r:   )Nr   )r   r;   r   r   r   r   neo  r=   r   pow_pc                 C   r:   )Nr   )r   r;   r   r   r   r   powt  r=   r   max_pc                 C   r:   )Nr   )r   r;   r   r   r   r   maxy  r=   r   erf_pc                 C   r:   )Nr   )r   rD   r   r   r   r   erf~  r=   r   cast_pc                 C   sF   t di t }|d u r||}|j|jd| id|id|id |S )Nr   r
   r   r	   r   )r   r-   )r   r	   r   r   r   r   r   cast  s   
r   )N)NN)r   N)NFN)*ri   Zpaddle.fluid.layer_helperr   Zprimregr   r   r"   r*   r/   r2   r6   r<   r0   r@   rB   rE   rG   rI   rK   rM   rO   rS   rU   rW   rf   rk   ro   rq   ru   rx   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   


	















