Ë
    ˆ\;jö  ã                   ó.   — d dl mZ ddlmZ d„ Zd„ Zd„ Zy)é   )Ú_apply_passé   )Úcorec                 ó¦   — g }| j                  «       j                  j                  «       D ]#  \  }}|j                  sŒ|j	                  |«       Œ% |S ©N)Úglobal_blockÚvarsÚitemsÚis_dataÚappend)ÚprogramÚ	data_varsÚvar_nameÚvars       ú\G:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/framework/ir.pyÚget_data_varsr      sJ   € Ø€IØ ×-Ñ-Ó/×4Ñ4×:Ñ:Ö<‰ˆ�#Ø�;‹;Ø×Ñ˜XÕ&ð =ð Ðó    c                 óÒ  — d}t         j                  j                  «       }d}d}g }t        | j                  «      D ]•  }| j                  |«      }|j                  D ]s  }||j                  v rd}||j                  vrŒ"|j                  |«      }	|	dd d…   D ]6  }
|j                  |
«      }|€Œ|j                  |«       |j                  sŒ5d}Œ8 Œu Œ— |r|r|D ]	  }d|_        Œ y y y )NÚgrad_merge_cond_nameFTr   r   )r   Úop_proto_and_checker_makerÚkOpRoleVarAttrNameÚrangeÚ
num_blocksÚblockÚopsÚ
attr_namesÚattrÚ_find_var_recursiver   Úpersistable)Úmain_programÚgrad_merge_attr_nameÚop_role_var_attr_nameÚhas_grad_mergeÚhas_persistable_grad_varÚ	grad_varsÚblock_idr   ÚopÚp_gÚgÚg_vars               r   Ú_update_grad_persistabler+      sù   € Ø1ÐÜ ×;Ñ;×NÑNÓPÐØ€NØ$ÐØ€IÜ˜,×1Ñ1Ö2ˆØ×"Ñ" 8Ó,ˆØ—)”)ˆBØ# r§}¡}Ñ4Ø!%�à$¨B¯M©MÑ9Øà—'‘'Ð/Ó0ˆCØ˜˜˜A˜”Y�Ø×1Ñ1°!Ó4�Ø�=ØØ× Ñ  Ô'Ø×$Ó$Ø/3Ñ,ñ ñ ð 3ñ$ Ñ2ÛˆEØ $ˆEÕñ ð 3€~r   c                 ó
  ‡ ‡‡‡— dd„Šˆ ˆˆˆfd„}t        ‰ «       ‰j                  dd«      }|j                  «       }|j                  r |d«       d|_        |j                  r|r |d«       d|_        |j
                  r|r |d«       d|_        |j                  r|r |d«       d|_        |j                  r|r |d	«       d|_        |j                  r |d
«       d|_        |j                  r |d«       d|_	        |j                  r |g d¢«       d|_
        |j                  r |d«       d|_        |j                  r|r |d«       d|_        |j                  r |d«       d|_        |j                  «        |S )Nc                 ó&   — || vr|| |<   |r|||<   y y r   © )ÚattrsÚ
attr_typesÚnameÚvalueÚtyps        r   Úupdate_attrz)apply_build_strategy.<locals>.update_attr;   s%   € Ø�uÑØˆE�$‰KÙØ"ˆJ�tÒð r   c                 ó˜   •— t        ‰«      }i } ‰||ddd«        ‰||ddd«        ‰||dt        ‰«      d«       t        ‰‰| ||«       y )	NÚnranksr   Úsize_tÚuse_cudaFÚboolÚmem_opt_skip_varsz	list[str])Údictr   r   )r1   r/   r0   r    Ú
pass_attrsÚstartup_programr4   s      €€€€r   Ú
apply_passz(apply_build_strategy.<locals>.apply_passA   s`   ø€ Ü�ZÓ ˆØˆ
Ù�E˜: x°°HÔ=Ù�E˜: z°5¸&ÔAáØØØÜ˜,Ó'Øô	
ô 	�L /°4¸À
ÕKr   r8   FÚsync_batch_norm_passÚfuse_relu_depthwise_conv_passÚfuse_bn_act_passÚfuse_bn_add_act_passÚfusion_group_passÚfuse_gemm_epilogue_passÚfuse_elewise_add_act_pass)Úcoalesce_grad_tensor_passÚfuse_adam_op_passÚfuse_sgd_op_passÚfuse_momentum_op_passÚruntime_context_cache_passÚinplace_addto_op_passÚbuffer_shared_inplace_passr   )r+   ÚgetÚ_copyÚsync_batch_normÚfuse_relu_depthwise_convÚfuse_bn_act_opsÚfuse_bn_add_act_opsÚenable_auto_fusionÚfuse_gemm_epilogueÚfuse_elewise_add_act_opsÚfuse_all_optimizer_opsÚcache_runtime_contextÚenable_addtoÚenable_inplaceÚ_clear_finalized)r    r=   Úbuild_strategyr<   r>   r8   r4   s   `` `  @r   Úapply_build_strategyr\   8   sv  û€ ó#÷Lô ˜\Ô*Ø�~‰~˜j¨%Ó0€HØ#×)Ñ)Ó+€NØ×%Ò%ÙÐ)Ô*Ø).ˆÔ&Ø×.Ò.±8ÙÐ2Ô3Ø27ˆÔ/Ø×%Ò%©(ÙÐ%Ô&Ø).ˆÔ&Ø×)Ò)©hÙÐ)Ô*Ø-2ˆÔ*Ø×(Ò(©XÙÐ&Ô'Ø,1ˆÔ)Ø×(Ò(ÙÐ,Ô-Ø,1ˆÔ)Ø×.Ò.ÙÐ.Ô/Ø27ˆÔ/Ø×,Ò,Ùòô	
ð 16ˆÔ-à×+Ò+ÙÐ/Ô0Ø/4ˆÔ,Ø×"Ò"¡xáÐ*Ô+Ø&+ˆÔ#Ø×$Ò$ÙÐ/Ô0Ø(-ˆÔ%Ø×#Ñ#Ô%ØÐr   N)Úbase.frameworkr   Ú r   r   r+   r\   r.   r   r   Ú<module>r_      s   ðõ )Ý òò%ó:Fr   