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                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	ReshapeFuserc                    s   t t|   d S )N)superr   __init__)self	__class__ WD:\Projects\ConvertPro\env\Lib\site-packages\x2paddle/optimizer/fusion/reshape_fuser.pyr      s   zReshapeFuser.__init__c                 C   s   dd }| j jdddi|dgd | j jdd	d
|dd|dgd | j jdd|dd|dgd | j jdd	d
ddd dS )u    描述需要替换的reshape图结构。
        reshape层模式python实现代码示例:
            x165 = int(x164)
            x166 = [x158, x159, x165]
            x167 = paddle.reshape(x=x157, shape=x166)
        c                 S   s   dt |  S )Nx)str)idr   r   r   gen_name!   s   z,ReshapeFuser.build_pattern.<locals>.gen_namezprim.intinputzreshape-input-0r   )inputsoutputsz	prim.listzreshape-input-1zreshape-input-2)Zinput0Zinput1Zinput2   zpaddle.reshapezreshape-input-3)r   shape   )zinput-0zinput-1zinput-2zinput-3)r   N)patternZ	add_layerbuild)r	   r   r   r   r   build_pattern   s6   zReshapeFuser.build_patternc                 C   s:   |  | |t| d  |t| d  d S )Nr   )update_layerpoplistkeys)r	   graph
parametersmatchesr   r   r   insert_new_layer<   s   
zReshapeFuser.insert_new_layerc                 C   sb   t | }||d  }|jd }|jd }||d  }|j D ]\}}||kr.||j|< q!d S )Nr   r   r   )r   r   r   r   items)r	   r!   Z	layers_idlayerZint_input_nameZoutput_namekeyZ
input_namer   r   r   r   A   s   


zReshapeFuser.update_layer)__name__
__module____qualname__r   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
   