o
    Me\  ã                   @   sä   d dl mZ ddlmZmZmZ d dlmZmZ	 edƒG dd„ deƒƒZ
edƒG d	d
„ d
eƒƒZedƒG dd„ deƒƒZedƒG dd„ deƒƒZedƒG dd„ deƒƒZedƒG dd„ deƒƒZdd„ ZedƒG dd„ deƒƒZdS )é    )ÚExecutoré   )ÚPassTypeÚCPPPassWrapperÚregister_pass)ÚcoreÚ_apply_passZfuse_elewise_add_actc                       ó0   e Zd Z‡ fdd„Zedd„ ƒZdd„ Z‡  ZS )ÚFuseElementwiseAddActPassc                    ó   t t| ƒ ¡  d S ©N)Úsuperr
   Ú__init__©Úself©Ú	__class__© úRD:\Projects\ConvertPro\env\Lib\site-packages\paddle/distributed/passes/cpp_pass.pyr      ó   z"FuseElementwiseAddActPass.__init__c                 C   ó   dS )NZfuse_elewise_add_act_passr   r   r   r   r   Úcpp_name   ó   z"FuseElementwiseAddActPass.cpp_namec                 C   ó   t jS r   ©r   Z
FUSION_OPTr   r   r   r   Ú_type   ó   zFuseElementwiseAddActPass._type©Ú__name__Ú
__module__Ú__qualname__r   Úpropertyr   r   Ú__classcell__r   r   r   r   r
      ó
    
r
   Zfuse_bn_actc                       r	   )ÚFuseBatchNormActPassc                    r   r   )r   r$   r   r   r   r   r   r   %   r   zFuseBatchNormActPass.__init__c                 C   r   )NZfuse_bn_act_passr   r   r   r   r   r   (   r   zFuseBatchNormActPass.cpp_namec                 C   r   r   r   r   r   r   r   r   ,   r   zFuseBatchNormActPass._typer   r   r   r   r   r$   "   r#   r$   Zfuse_bn_add_actc                       r	   )ÚFuseBatchNormAddActPassc                    r   r   )r   r%   r   r   r   r   r   r   3   r   z FuseBatchNormAddActPass.__init__c                 C   r   )NZfuse_bn_add_act_passr   r   r   r   r   r   6   r   z FuseBatchNormAddActPass.cpp_namec                 C   r   r   r   r   r   r   r   r   :   r   zFuseBatchNormAddActPass._typer   r   r   r   r   r%   0   r#   r%   Zfuse_relu_depthwise_convc                       r	   )ÚFuseReluDepthwiseConvPassc                    r   r   )r   r&   r   r   r   r   r   r   A   r   z"FuseReluDepthwiseConvPass.__init__c                 C   r   )NZfuse_relu_depthwise_conv_passr   r   r   r   r   r   D   r   z"FuseReluDepthwiseConvPass.cpp_namec                 C   r   r   r   r   r   r   r   r   H   r   zFuseReluDepthwiseConvPass._typer   r   r   r   r   r&   >   r#   r&   Zfuse_optimizerc                       r	   )ÚFuseOptimizerPassc                    r   r   )r   r'   r   r   r   r   r   r   O   r   zFuseOptimizerPass.__init__c                 C   s   g d¢S )N)Zfuse_adam_op_passZfuse_sgd_op_passZfuse_momentum_op_passr   r   r   r   r   r   R   s   zFuseOptimizerPass.cpp_namec                 C   r   r   r   r   r   r   r   r   X   r   zFuseOptimizerPass._typer   r   r   r   r   r'   L   s
    
r'   Zinplace_addto_opc                       r	   )ÚInplaceAddtoOpPassc                    r   r   )r   r(   r   r   r   r   r   r   _   r   zInplaceAddtoOpPass.__init__c                 C   r   )NZinplace_addto_op_passr   r   r   r   r   r   b   r   zInplaceAddtoOpPass.cpp_namec                 C   r   r   ©r   ZCALC_OPTr   r   r   r   r   f   r   zInplaceAddtoOpPass._typer   r   r   r   r   r(   \   r#   r(   c                 C   s@   t  ¡ |  }dd„ | d¡D ƒ}| |¡ d |¡t  ¡ | < d S )Nc                 S   s   g | ]
}|  ¡ r|  ¡ ‘qS r   )Ústrip)Ú.0Úvr   r   r   Ú
<listcomp>l   s    z%_set_cinn_op_flag.<locals>.<listcomp>ú;)r   ÚglobalsÚsplitÚextendÚjoin)Z	flag_nameZ	extra_opsÚvaluesr   r   r   Ú_set_cinn_op_flagj   s   
r4   Z
build_cinnc                       s8   e Zd Z‡ fdd„Zedd„ ƒZdd„ Zdd„ Z‡  ZS )	ÚBuildCINNPassc                    s*   t t| ƒ ¡  |  dg ¡ |  dg ¡ d S )NÚ	allow_opsÚdeny_ops)r   r5   r   Zset_attrr   r   r   r   r   t   s   zBuildCINNPass.__init__c                 C   r   )NZbuild_cinn_passr   r   r   r   r   r   y   r   zBuildCINNPass.cpp_namec                 C   r   r   r)   r   r   r   r   r   }   r   zBuildCINNPass._typec           
   	   C   s  dt  ¡ v s
J dƒ‚t  ¡ d }t  ¡ d }zdtd|  d¡ƒ td|  d¡ƒ |  dg ¡}|  dg ¡}|  dd	¡}|rKt |||g ¡}	t |	|d
¡}	nt ||d
¡}	t|	|| ji | j	ƒ t 
|	¡}	t  |	j¡}	| |	¡ W |t  ¡ d< |t  ¡ d< d S |t  ¡ d< |t  ¡ d< w )NZFLAGS_allow_cinn_opsz.PaddlePaddle is not compiled with CINN supportZFLAGS_deny_cinn_opsr6   r7   ÚfeedÚ
fetch_listÚprune_programTÚfetch)r   r/   r4   Zget_attrr   Z_prune_programZ_add_fetch_opsÚ_apply_cpp_passr   Zcpp_attr_typesZ_remove_fetch_opsZProgramDescÚdescZ_rebuild_from_desc)
r   Zmain_programZstartup_programÚcontextZold_allow_opsZold_deny_opsr8   r9   r:   Ztmp_main_programr   r   r   Ú_apply_single_impl€   sB   ÿÿÿÿÿ
ÿ
ÿz BuildCINNPass._apply_single_impl)	r   r   r    r   r!   r   r   r?   r"   r   r   r   r   r5   q   s    
r5   N)Zpaddle.staticr   Z	pass_baser   r   r   Zpaddle.fluid.frameworkr   r   r<   r
   r$   r%   r&   r'   r(   r4   r5   r   r   r   r   Ú<module>   s$   