o
    ‘eÜ	  ã                   @   s@   d dl Zd dlmZ d dlmZmZ d dlT G dd„ deƒZdS )é    N)ÚFuseBase)ÚPaddleGraphÚPaddleLayer)Ú*c                       s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )ÚDropoutFuserc                    s   t t| ƒ ¡  d S )N)Úsuperr   Ú__init__©Úself©Ú	__class__© úWD:\Projects\ConvertPro\env\Lib\site-packages\x2paddle/optimizer/fusion/dropout_fuser.pyr      s   zDropoutFuser.__init__c                 C   s<   | j jdddiddgd | j jddid ddg| j _d	S )
u±    æè¿°éœ€è¦æ›¿æ¢çš„constantå›¾ç»“æž„ã€‚
        constantå±‚æ¨¡å¼pythonå®žçŽ°ä»£ç ç¤ºä¾‹:
            x3 = 10
            for _x70 in range(x3):
                ...
        zpaddle.nn.DropoutÚinputzdropout-input-0Zdropout0Úx1)ÚinputsÚoutputszinput-0)r   N)ÚpatternZ	add_layerÚbuildr   r	   r   r   r   Úbuild_pattern   s   ýzDropoutFuser.build_patternc           
         s€   ‡ fdd„‰ t | ¡ ƒd }t | ¡ ƒd }|jd }|jd }|j |d¡dkr<|j| D ]}|j| }	ˆ |	||ƒ q.d S d S )Nc                    s’   | j  ¡ D ]\}}||kr|| j |<  nq| jdks| jdkrE| jD ]$}|j ¡ D ]\}}|j |d¡dkrCd|j| v rCˆ |||ƒ q)q"d S d S )Nz	prim.loopzprim.ifr   éÿÿÿÿ)r   ÚitemsZkernelÚblocksÚlayersZedges_inÚget)Úlayer_connectZ
match_nameZmatch_inputÚkÚvÚblockZ
b_layer_idZb_layer©Úreplace_valuer   r   r    (   s    
þ


€ýþz4DropoutFuser.insert_new_layer.<locals>.replace_valuer   é   r   )ÚlistÚkeysÚvaluesr   r   Z	edges_outr   r   )
r
   ÚgraphÚ
parametersÚmatchesZlayer_idÚlayerZlayer_output_nameZlayer_inputZlayer_id_outr   r   r   r   Úinsert_new_layer'   s   


ýzDropoutFuser.insert_new_layer)Ú__name__Ú
__module__Ú__qualname__r   r   r)   Ú__classcell__r   r   r   r   r      s    r   )	ÚnumpyÚnpZ"x2paddle.optimizer.pattern_matcherr   Zx2paddle.core.programr   r   Zx2paddle.core.utilr   r   r   r   r   Ú<module>   s
   