o
    "Õjx  ã                   @   s4   d dl mZ ddlmZ dd„ Zdd„ Zdd	„ Zd
S )é   )Ú_apply_passé   )Úcorec                 C   s0   g }|   ¡ j ¡ D ]\}}|jr| |¡ q	|S ©N)Zglobal_blockÚvarsÚitemsZis_dataÚappend)ÚprogramZ	data_varsÚvar_nameÚvar© r   úT/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/framework/ir.pyÚget_data_vars   s   
€r   c                 C   sÄ   d}t j ¡ }d}d}g }t| jƒD ]=}|  |¡}|jD ]2}||jv r%d}||jvr+q| |¡}	|	dd d… D ]}
| 	|
¡}|d u rCq7| 
|¡ |jrMd}q7qq|r\|r^|D ]	}d|_qVd S d S d S )NZgrad_merge_cond_nameFTr   r   )r   Zop_proto_and_checker_makerZkOpRoleVarAttrNameÚrangeZ
num_blocksÚblockÚopsZ
attr_namesÚattrZ_find_var_recursiver   Zpersistable)Úmain_programZgrad_merge_attr_nameZop_role_var_attr_nameZhas_grad_mergeZhas_persistable_grad_varZ	grad_varsZblock_idr   ÚopZp_gÚgZg_varr   r   r   Ú_update_grad_persistable   s8   







€úøþr   c                    s8  ddd„‰‡ ‡‡‡fdd„}t ˆ ƒ ˆ dd¡}| ¡ }|jr&|dƒ d|_|jr2|r2|dƒ d|_|jr>|r>|d	ƒ d|_|jrJ|rJ|d
ƒ d|_|jrV|rV|dƒ d|_|jr`|dƒ d|_|j	rj|dƒ d|_	|j
rv|g d¢ƒ d|_
|jr€|dƒ d|_|jrŒ|rŒ|dƒ d|_|jr–|dƒ d|_| ¡  |S )Nc                 S   s$   || vr|| |< |r|||< d S d S r   r   )ÚattrsÚ
attr_typesÚnameÚvalueÚtypr   r   r   Úupdate_attr;   s
   ÿz)apply_build_strategy.<locals>.update_attrc                    sT   t ˆƒ}i }ˆ||dddƒ ˆ||dddƒ ˆ||dtˆ ƒdƒ tˆ ˆ| ||ƒ d S )	NZnranksr   Zsize_tÚuse_cudaFÚboolZmem_opt_skip_varsz	list[str])Údictr   r   )r   r   r   ©r   Ú
pass_attrsÚstartup_programr   r   r   Ú
apply_passA   s   ûz(apply_build_strategy.<locals>.apply_passr   FZsync_batch_norm_passZfuse_relu_depthwise_conv_passZfuse_bn_act_passZfuse_bn_add_act_passZfusion_group_passZfuse_gemm_epilogue_passZfuse_elewise_add_act_pass)Zcoalesce_grad_tensor_passZfuse_adam_op_passZfuse_sgd_op_passZfuse_momentum_op_passZruntime_context_cache_passZinplace_addto_op_passZbuffer_shared_inplace_passr   )r   ÚgetZ_copyZsync_batch_normZfuse_relu_depthwise_convZfuse_bn_act_opsZfuse_bn_add_act_opsZenable_auto_fusionZfuse_gemm_epilogueZfuse_elewise_add_act_opsZfuse_all_optimizer_opsZcache_runtime_contextZenable_addtoZenable_inplaceZ_clear_finalized)r   r"   Zbuild_strategyr!   r#   r   r   r    r   Úapply_build_strategy8   sT   




ÿ
r%   N)Zbase.frameworkr   Ú r   r   r   r%   r   r   r   r   Ú<module>   s
   