o
    "j                     @   s0   d dl mZ dd Zd	ddZejdd ZdS )
    )irc                 C   s   |  dd |  dd |  d| |  dd |  dd	 | d
jdddd | djdddd | djddd | djddd | djddd | djddd | djddd | djddd d S )NZfuse_addFZact_typereluhas_shortcutdata_formatNHWCZdilation   Zstrideconv2dstridesr   )opnameZelement_indexpaddingZpaddingsgroupgroups)r
   r   Z	op_deviceZop_namescopeZmomentum
batch_normepsilonZuse_global_stats)SetAttrAttrZMappedPattern)resnet_unitr    r   m/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/incubate/passes/fuse_resnet_unit_pass.pyset_resnet_unit_attrs   s*   




r   Nc                 C   s   | j ||||d d S )N)ZRunningMeanXZRunningVarXZRunningMeanZZRunningVarZ)Z
SetOutputs)r   meanXvarXmeanZvarZr   r   r   set_resnet_unit_outputs*   s   
r   c                     s@   dd   fdd} dd } fdd}d	d
 }| |f||ffS )Nc                 S   s   | dd dd | dd dd | dd d | dd d tjjj| |d}|d	d
 tjjj|||||d}|S )Nshaper       r            )ZInputFilterr   r   )XZBiasZMeanZScaleZVariance)	r   ModZEQr   PassDescOPr   r   r   )xfilterscalebiasmeanvarr   bnr   r   r   pattern_conv_bn5   s   
z)fuse_resnet_unit.<locals>.pattern_conv_bnc                    s,    | |||||}t jjj|dd}|S )NYr"   )r   r$   r%   r   Output)r&   r'   r(   r)   r*   r+   r,   r   r-   r   r   pattern_one_inputA   s   z+fuse_resnet_unit.<locals>.pattern_one_inputc                 S   s:   t jjj| |||||d}t|d t||| |dS )N)r"   FilterXScaleXBiasXMeanXVarXFr.   r   r$   r%   r   r   r   r0   )r&   r'   r(   r)   r*   r+   r   r   r   r   replace_one_inputF   s   

z+fuse_resnet_unit.<locals>.replace_one_inputc                    sV    | |||||} ||||	|
|}t jjj|d|dd}t jjj|d}|S )Nr.   )r"   r.   r/   )r   r$   r%   Zelementwise_addr0   r   )r&   filterXscaleXbiasXr   r   zfilterZscaleZbiasZr   r   ZbnXZbnZZewaddr   r1   r   r   pattern_two_inputN   s   z+fuse_resnet_unit.<locals>.pattern_two_inputc                 S   sJ   t jjj| |||||||||	|
|d}t|d t||||
| |dS )N)r"   r3   r4   r5   r6   r7   ZZFilterZZScaleZZBiasZZMeanZZVarZTr.   r8   )r&   r:   r;   r<   r   r   r=   r>   r?   r@   r   r   r   r   r   r   replace_two_inputd   s"   

z+fuse_resnet_unit.<locals>.replace_two_inputr   )r2   r9   rA   rC   r   r1   r   fuse_resnet_unit3   s    rD   )NN)Zpaddle.incubate.passesr   r   r   ZRegisterPassrD   r   r   r   r   <module>   s
   
	