o
    "j                     @   sD  d dl mZmZ d dlmZ ddlmZ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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 ))    )_apply_passcore)Executor   )CPPPassWrapperPassTyperegister_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    d S Nsuper__init__self	__class__ c/var/www/html/Deteccion_Ine/venv/lib/python3.10/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   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   4   r   z FuseBatchNormAddActPass.__init__c                 C   r   )NZfuse_bn_add_act_passr   r   r   r   r   r   7   r   z FuseBatchNormAddActPass.cpp_namec                 C   r   r   r   r   r   r   r   r   ;   r   zFuseBatchNormAddActPass._typer   r   r   r   r   r&   2   r$   r&   Zfuse_relu_depthwise_convc                       r	   )FuseReluDepthwiseConvPassc                    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fused_attentionc                       r	   )FusedAttentionPassc                    r   r   r   r   r   r   r   r   N   r   zFusedAttentionPass.__init__c                 C   r   )NZfused_attention_passr   r   r   r   r   r   Q   r   zFusedAttentionPass.cpp_namec                 C   r   r   r   r   r   r   r   r   U   r   zFusedAttentionPass._typer   r   r   r   r   r(   L   r$   r(   Zfused_feedforwardc                       r	   )FusedFeedforwardPassc                    r   r   r   r   r   r   r   r   [   r   zFusedFeedforwardPass.__init__c                 C   r   )NZfused_feedforward_passr   r   r   r   r   r   ^   r   zFusedFeedforwardPass.cpp_namec                 C   r   r   r   r   r   r   r   r   b   r   zFusedFeedforwardPass._typer   r   r   r   r   r)   Y   r$   r)   Zfuse_gemm_epiloguec                       r	   )FuseGemmEpiloguePassc                    r   r   r   r   r   r   r   r   h   r   zFuseGemmEpiloguePass.__init__c                 C   r   )NZfuse_gemm_epilogue_passr   r   r   r   r   r   k   r   zFuseGemmEpiloguePass.cpp_namec                 C   r   r   r   r   r   r   r   r   o   r   zFuseGemmEpiloguePass._typer   r   r   r   r   r*   f   r$   r*   Z
fuse_adamwc                       r	   )FuseAdamWPassc                    r   r   r   r   r   r   r   r   u   r   zFuseAdamWPass.__init__c                 C   r   )NZfuse_adamw_op_passr   r   r   r   r   r   x   r   zFuseAdamWPass.cpp_namec                 C   r   r   r   r   r   r   r   r   |   r   zFuseAdamWPass._typer   r   r   r   r   r+   s   r$   r+   Zfuse_optimizerc                       r	   )FuseOptimizerPassc                    r   r   r   r   r   r   r   r      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      s   zFuseOptimizerPass.cpp_namec                 C   r   r   r   r   r   r   r   r      r   zFuseOptimizerPass._typer   r   r   r   r   r,      s
    
r,   Zinplace_addto_opc                       r	   )InplaceAddtoOpPassc                    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      r   zInplaceAddtoOpPass.cpp_namec                 C   r   r   r   ZCALC_OPTr   r   r   r   r      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>   s    z%_set_cinn_op_flag.<locals>.<listcomp>;)r   globalssplitextendjoin)Z	flag_nameZ	extra_opsvaluesr   r   r   _set_cinn_op_flag   s   
r9   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    | dg  | dg  d S )N	allow_opsdeny_ops)r   r   Zset_attrr   r   r   r   r      s   
zBuildCINNPass.__init__c                 C   r   )NZbuild_cinn_passr   r   r   r   r   r      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_opsr;   r<   feed
fetch_listprune_programTfetch)r   r4   r9   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_opsr=   r>   r?   Ztmp_main_programr   r   r   _apply_single_impl   sJ   

z BuildCINNPass._apply_single_impl)	r   r    r!   r   r"   r   r   rD   r#   r   r   r   r   r:      s    
r:   N)Zpaddle.frameworkr   rA   r   Zpaddle.staticr   Z	pass_baser   r   r   r
   r%   r&   r'   r(   r)   r*   r+   r,   r-   r9   r:   r   r   r   r   <module>   s4   