o
    "juA                     @   s  d dl Z d dlZd dlZd dlmZ ddlmZ dd Zdd Zd	d
 Z	dddZ
dddZdddZdd ZdddZdd Zdd Z				dddZdd Zed d!d"d#dd$d%Zed&d!d"d#dd'd(Zed)d!d"d#dd*d+Zed,d!d"d#dd-d.Zed/d!d"dd0d1Zed2d!d"dd3d4Zed5d!d"dd6d7Zed8d!d"dd9d:Zed;d!d"dd<d=Zed>d!d"dd?d@ZedAd!d"ddBdCZedDd!d"ddEdFZedGd!d"ddHdIZedJd!dKddLdMZ edNdOd"ddPdQZ!edRd!d"ddSdTZ"edUd!d"d#ddVdWZ#edXd!d"ddYdZZ$ed[d!d"d#dd\d]Z%ed^d!d_d"dd`daZ&edbd!d"d_d#ddcddZ'eded!d"ddfdgZ(edhdid!d"d#ddjdkZ)edld!d"d#ddmdnZ*edod!d"d#ddpdqZ+edrd!d"d#ddsdtZ,edud!d"d#ddvdwZ-edxd!d"d#ddydzZ.ed{d!d"d#dd|d}Z/ed~d!d"dddZ0edd!d"dddZ1edd!d"dddZ2edddddZ3dS )    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   a/var/www/html/Deteccion_Ine/venv/lib/python3.10/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>2   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_constB      
r0   c                 C   sH   | ||d}t di t }|d u r||}|j|jd|i|d |S )N)r'   r	   pbernoulli_pr   r-   )r3   r.   )r'   r	   r2   r   r   r   r   r   r   	bernoulliK   r1   r4   c                 C   s   t d| j| j}t|| S )Ng        )r0   r'   r	   sub)r   r   zeror   r   r   negT   s   
r7   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ValueTensorOutr   )r;   )r   r/   r   r   	r   r   r(   r9   r:   stridesr   r   r   r   r   r   r;   Y   s   r;   Fc                    sZ   |pt tdt j}t ||d}t|jttj	 fdd|D |j
d}t||S )Nr   r(   keepdimc                    s   g | ]} j | qS r   )r'   )r#   r(   r   r   r   
<listcomp>k   s    zmean.<locals>.<listcomp>)r'   r+   r	   )r   rangelenr'   
reduce_sumr0   	functoolsreduceoperatormulr	   div)r   r(   r@   r8   sumZnormr   rA   r   meanf   s   
rL   c                 C      t d| |S )Nr   r0   r'   r	   r   r   r   onesq      rP   c                 C   rM   )Nr   rN   rO   r   r   r   zerosu   rQ   rR   h㈵>?c
              	      s  t  fddtt| jD t fddt| jD }
t|j|j}t|j|j}|st| dd}ttt	| t
|| jdd}tt	| t
|| jttt
|| jt|| j|j}t||j|j}tt||tt	t|j|j|t||j}tt||tt	t|j|j|t||j}n!tt	| t
t||
| jttt
t||
| jt|| j| j}ttt
t||
|j|t
t||
|j}|	r||	||||fS |||||fS )a  batch normalizer.

    Args:
        x (Tensor): A tensor to be normalized.
        axis (int): The features axis.
        gamma (Tensor): The scale factor.
        beta (float): The shift factor.
        run_mean (Tensor): Running mean.
        run_var (Tensor): Running variance.
        eps (float, optional): A value added to the denominator for numerical
            stability. Defaults to 1e-5.
        momentum (float, optional): The value used for the running_mean and
            running_var computation. Can be set to None for cumulative moving
            average (i.e. simple average). Defaults to 0.9.
        use_run_stat (bool, optional): Whether or not using runing statistics.
            Defaults to False.
    c                 3   s    | ]	}| kr|V  qd S Nr   r#   i)r(   r   r   	<genexpr>   s    zbatch_norm.<locals>.<genexpr>c                 3   s$    | ]\}}| v rd n|V  qdS )r   Nr   )r#   rW   s)reduce_axesr   r   rX      s    
T)r@   )r   rC   rD   r'   	enumeraterR   r	   rL   squarer5   	broadcastrJ   sqrtaddr0   rI   rP   reshape)r   r(   gammabetaZrun_meanZrun_varepsZmomentumZuse_run_statZreserve_spaceZstats_shapeZ
batch_meanZ	batch_varZx_hatr   r   )r(   rZ   r   
batch_normy   sj    



	rd   c                 C   s   t | td| j| jS )Ng       @)powr0   r'   r	   rA   r   r   r   r\      s   r\   add_pr
   r   r!   c                 C      t tdi t S )Nrf   )rf   r"   r   r/   r   r   r   r   r_         r_   sub_pc                 C   rg   )Nrj   )rj   rh   r   r   r   r   r5      ri   r5   mul_pc                 C   rg   )Nrk   )rk   rh   r   r   r   r   rI      ri   rI   div_pc                 C   rg   )Nrl   )rl   rh   r   r   r   r   rJ      ri   rJ   sqrt_pc                 C   rg   )Nrm   )rm   r   r   r/   r   r   r   r   r^      ri   r^   tanh_pc                 C   rg   )Nro   )ro   rn   r   r   r   r   tanh   ri   rp   sin_pc                 C   rg   )Nrq   )rq   rn   r   r   r   r   sin   ri   rr   cos_pc                 C   rg   )Nrs   )rs   rn   r   r   r   r   cos   ri   rt   exp_pc                 C   rg   )Nru   )ru   rn   r   r   r   r   exp   ri   rv   abs_pc                 C   rg   )Nrw   )rw   rn   r   r   r   r   abs  ri   rx   	reshape_pc                 C   rg   )Nry   )ry   r*   r   r/   r   r'   r   r   r   r   r`   	  ri   r`   broadcast_pc                 C   rg   )Nr|   )r|   rz   r{   r   r   r   r]     ri   r]   transpose_pc                 C   rg   )Nr}   )r}   rz   )r   r(   r   r   r   r   	transpose  ri   r~   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(   r   c                    s   g | ]	} j jd qS )r   )r   r	   rV   r   r   r   r   rB   '  s    zsplit.<locals>.<listcomp>r
   r   r   )r   )
isinstancelistr   rD   int	TypeErrorr   r   r/   rC   r   r   )r   r   r(   Zoutsnr   r   r   r   split  s(   


r   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(   r   r   r   r   r   r   )r   )r   paddlebaseZ	frameworkVariabler   r/   r   r	   r   r   )Zxsr(   r   r   r   r   r   r   concat4  s   r   reduce_sum_pc                 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?   r   r   r
   r   r   )r   )r   rC   rD   r'   r   r   r   r   r   boolr   r/   r   r	   r   r   )r   r(   r@   r   r8   r   r   r   r   r   rE   E  s   

rE   matmul_pc                 C   rg   )Nr   )r   rh   r   r   r   r   matmulY  ri   r   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 r   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(   r9   r:   r>   r   r   r
   r   r   )r   )r   r   r   r   r   rD   r   r/   r   r	   r   r   )r   r(   r9   r:   r>   r   r   r   r   r   r   slice_select^  sJ   2r   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)=r   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)=r   r   r   r   r    r!   r   )r   rD   r'   r   r/   r   r	   r   r   r=   r   r   r   slice_assign  s:   2r   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(   r   r   )r
   r   r   r   )r   )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)=r   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   r   r!   r   )r   r   )r   r   r   r(   r   r   r   r   r   r   scatter_add  s8   
r   log_pc                 C   rg   )Nr   )r   rn   r   r   r   r   log  ri   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   )
rD   r'   
ValueErrorformatr   r/   r   r	   r   r   )Zcondr   r   r   r   r   r   r   select  s*   
r   eq_pc                 C   rg   )Nr   )r   rh   r   r   r   r   eq  ri   r   gt_pc                 C   rg   )Nr   )r   rh   r   r   r   r   gt  ri   r   ge_pc                 C   rg   )Nr   )r   rh   r   r   r   r   ge  ri   r   ne_pc                 C   rg   )Nr   )r   rh   r   r   r   r   ne  ri   r   pow_pc                 C   rg   )Nr   )r   rh   r   r   r   r   re     ri   re   max_pc                 C   rg   )Nr   )r   rh   r   r   r   r   max  ri   r   erf_pc                 C   rg   )Nr   )r   rn   r   r   r   r   erf   ri   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   rsqrt_pc                 C   rg   )Nr   )r   rn   r   r   r   r   rsqrt  ri   r   uniform_random_pr<   c                 C   sL   || |||d}t di t }|d u r|| }|j|jd|i|d |S )N)r'   r	   minr   seedr   r<   r-   )r   r.   )r	   Z	min_valueZ	max_valuer   r'   r   r   r   r   r   r   uniform_random  s   
r   rU   )NF)rS   rT   FN)NN)r   N)NFN)4rF   rH   r   Zpaddle.base.layer_helperr   Zprimregr   r   r"   r*   r0   r4   r7   r;   rL   rP   rR   rd   r\   r_   r5   rI   rJ   r^   rp   rr   rt   rv   rx   r`   r]   r~   r   r   rE   r   r   r   r   r   r   r   r   r   r   r   re   r   r   r   r   r   r   r   r   r   <module>   s   


	
	

Z












 



