o
    ‘eU
  ã                   @   s0   d dl mZ d dlT d dlT G dd„ deƒZdS )é    )ÚPassManager)Ú*c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚGraphOptimizerÚtracec                 C   st   |dkr|dkrdg| _ d S g d¢| _ d S |dkrdg| _ d S |dkr*g d¢| _ d S |d	kr5g d
¢| _ d S g | _ d S )NZpytorchr   Ztrace_fc_fuse_pass)Zconstant_fuse_passZbatchnorm2d_fuse_passZinterpolate_bilinear_fuse_passZfc_fuse_passZadaptive_pool2d_fuse_passZreshape_fuse_passZdropout_fuse_passZif_fuse_passZcaffeZbn_scale_fuse_passÚtf)Úconv2d_add_fuse_passZtf_batchnorm_fuse_passZprelu_fuse_passZtranspose_eliminate_passZonnx)Zonnx_layernorm_fuse_passZonnx_gelu_fuse_passZreplace_div_to_scale_pass)Úpasses)ÚselfZsource_frameZjit_type© r
   úLD:\Projects\ConvertPro\env\Lib\site-packages\x2paddle/optimizer/optimizer.pyÚ__init__   s   
zGraphOptimizer.__init__c                 C   sŽ   d}| j D ]?}t |¡ƒ }| d¡s| d¡r| |¡ d}n	 t|jƒ}| |¡ t|jƒ}||k r5d}||kr:nq |rDtd |¡ƒ q|S )NFZ_eliminate_passr   Tz{} done!)	r   r   ÚlookupÚendswithÚapplyÚlenZlayersÚprintÚformat)r	   ÚgraphZshow_pass_logZ	pass_nameZpass_Ú
before_lenZ	after_lenr
   r
   r   Úoptimize0   s*   
ÿ



ù€zGraphOptimizer.optimizeN)r   )Ú__name__Ú
__module__Ú__qualname__r   r   r
   r
   r
   r   r      s    
r   N)Zx2paddle.optimizer.pass_managerr   Zx2paddle.optimizer.fusionZx2paddle.optimizer.eliminationÚobjectr   r
   r
   r
   r   Ú<module>   s   