
    ϑi̋                    @   S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJr  S SKJr  S SKJrJr  S SKJrJrJrJr  S SKJr  S SKJ r J!r!  S SK"r#S SK$r$S S	K%J&r&J'r'J(r(J)r)  S S
K*J+r+  S SK,J-r-  S SK.J/r/  S SK0J1r1  S SK2J3r3  S SK4J5r5  S SK6J7r7J8r8  S SK9J:r:J;r;  S SK<J=r=J>r>  SSK?J@r@  \ (       a  S SKAJBrB  / rCSrDSrESrFSqGSrHSrISrJSrK\'R                  R                  R                  \'R                  R                  R                  \'R                  R                  R                  \'R                  R                  R                  /rR\>" SS 5      rS\=" SS5      rT\=" S S5      rUS!rV " S" S#\5      rW " S$ S%\5      rX " S& S'5      rY " S( S)5      rZS`S* jr[S+ r\ " S, S-5      r] " S. S/\^5      r_S0 r`S1 raS2 rbS3 rcS4 rdS5 reSaS6 jrfS7 rgSbS8 jrhScS9 jriS:1qjS; rkSdS< jrlS= rmSeS> jrnSfS? jroSdS@ jrpSA rqSdSB jrrSC rsSD rtSE ru " SF SG5      rvSH rwSI rxSJ rySK rzSL r{SM r|SgSN jr}SO r~SP rSQ rSR rScSS jrST r\SU 5       r\SV 5       rSW r\1SX 5       rSY rShSZ jr\      ShS[ j5       r    SiS\ jr " S] S^5      r\SjS_ j5       rg)k    )annotationsN)ABCcontextmanager)fieldsis_dataclass)EnumFlagIntEnumauto)SourceFileLoader)TYPE_CHECKINGAny)backwardcore	frameworkunique_name)convert_dtype)to_static_mode_guard)LayerHelper)signature_safe_contextmanager)CUDAPinnedPlace
OrderedSet)_convert_into_valuestatic_op_arg_cast_guard)flattengast)BooleanEnvironmentVariableIntegerEnvironmentVariable   )ast_to_source_code)Callablezpaddle.__already_d2sz1Original information of source code for ast node.Tz[a-zA-Z0-9_]+z[a-zA-Z0-9_]+\.__no_value_return_varg7v-ESOT_EVENT_LEVELENABLE_FALL_BACKENABLE_CINN_IN_DY2ST__sot_dynamic_dimsc                  d    \ rS rSr\" 5       r\" 5       r\" 5       r\SS j5       r	S r
S rS rSrg)	Backendd   c                   [        U [        5      (       a  U $ U c  [        R                  $ U R                  5       S:X  a  [        R                  $ U R                  5       S:X  a  [        R
                  $ [        SU  S35      e)NCINNPCCzUnknown backend z&. Only support 'CINN' or None for PHI.)
isinstancer+   PHIupperr.   r/   
ValueError)args    Z/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/jit/dy2static/utils.pyfrom_argBackend.from_argi   sm    c7##J;;;99;& <<99;%;;se#IJ
 	
    c                (    U [         R                  :H  $ N)r+   r.   selfs    r5   is_cinnBackend.is_cinnw   s    w||##r8   c                (    U [         R                  :H  $ r:   )r+   r/   r;   s    r5   is_pccBackend.is_pccz       w{{""r8   c                (    U [         R                  :H  $ r:   )r+   r1   r;   s    r5   is_phiBackend.is_phi}   rB   r8    N)r4   zstr | Backend | None)__name__
__module____qualname____firstlineno__r   r.   r1   r/   staticmethodr6   r=   r@   rD   __static_attributes__rF   r8   r5   r+   r+   d   s8    6D
&C
&C
 
$##r8   r+   c                  $    \ rS rSrSrSrSrSrSrg)CUDAGraphState   r   r!         rF   N)	rG   rH   rI   rJ   DISABLEWARMUPCAPTUREREPLAYrL   rF   r8   r5   rN   rN      s    GFGFr8   rN   c                      \ rS rSr " S S\5      rSr\R                  5       S4   SS jjrSS jr	 S SS jjr
S	 rSS
 jrS r\SS j5       r\S 5       rSrg)TransformOptions   c                  @    \ rS rSr\" 5       r\" 5       r\S 5       rSr	g)TransformOptions.ToStaticMode   c                    U " S5      $ Nr   rF   )clss    r5   Nil!TransformOptions.ToStaticMode.Nil   s    q6Mr8   rF   N)
rG   rH   rI   rJ   r   SOTASTclassmethodr_   rL   rF   r8   r5   ToStaticModerZ      s"    ff		 
	r8   rd   ___jit_transform_options___Fc                    Xl         X l        g r:   )skip_transform_mode_need_capture_control_flow)r<   rg   need_capture_control_flows      r5   __init__TransformOptions.__init__   s    
 $7 *C'r8   c                0    U =R                   U-  sl         U $ r:   rg   )r<   rg   s     r5   with_skip_transform_mode)TransformOptions.with_skip_transform_mode   s      $77 r8   c                    Xl         U $ r:   rh   )r<   ri   s     r5   with_need_capture_control_flow/TransformOptions.with_need_capture_control_flow   s     +D'r8   c                V   [         R                  " U5      (       a  UR                  n[         R                  " U5      (       d)  [	        U[
        R                  R                  5      (       a  [        U[        R                  U 5        g [        R                  " S[        U5       35        g )NzQOnly support @jit.marker.unified to type(function) or type(method), but received )inspectismethod__func__
isfunction
issubclasspaddlennLayersetattrrW   TRANSFORM_OPTIONS_ATTR_NAMEwarningswarntype)r<   fns     r5   attachTransformOptions.attach   sr    BBb!!ZFIIOO%D%DB(DDdKMMcdhikdlcmnr8   c                *    U R                   U-  (       + $ r:   rm   )r<   modes     r5   need_transformTransformOptions.need_transform   s    ,,t344r8   c                    U R                   $ r:   rq   r;   s    r5   ri   *TransformOptions.need_capture_control_flow   s    ...r8   c                    [        U [        R                  5      (       d  g[        U [        R                  5      R	                  U5      $ NT)hasattrrW   r~   getattrr   )r   r   s     r5   check_fn_need_transform(TransformOptions.check_fn_need_transform   s<    r+GGHH <<

.
	r8   c                    [        U [        R                  5      (       d  g[        U [        R                  5      R	                  5       $ )NF)r   rW   r~   r   ri   )r   s    r5   "check_fn_need_capture_control_flow3TransformOptions.check_fn_need_capture_control_flow   s;    r+GGHH <<

#
#
%	&r8   )rh   rg   N)rg   rd   ri   bool)rg   rd   T)ri   r   )r   rd   )rG   rH   rI   rJ   r
   rd   r~   r_   rj   rn   rr   r   r   ri   rK   r   r   rL   rF   r8   r5   rW   rW      s    t  #@ -9,<,<,>*/D)D $(D
 15)-	5/   & &r8   rW   c                  6    \ rS rSrS rS rS r\S 5       rSr	g)TimeCounter   c                    / U l         g r:   _time_historyr;   s    r5   rj   TimeCounter.__init__   s
    *,r8   c                T    [        U R                  5      S:X  a  gU R                  S   $ )Nr   )lenr   r;   s    r5   get_last_timeTimeCounter.get_last_time   s)    t!!"a'!!"%%r8   c                ,    [        U R                  5      $ r:   )sumr   r;   s    r5   get_total_timeTimeCounter.get_total_time   s    4%%&&r8   c              #     #    [         R                  " 5       nS v   [         R                  " 5       nX!-
  nU R                  R                  U5        g 7fr:   )timeperf_counterr   append)r<   
start_timeend_timeelapsed_times       r5   recordTimeCounter.record   s@     &&(
$$&,!!,/s   AAr   N)
rG   rH   rI   rJ   rj   r   r   r   r   rL   rF   r8   r5   r   r      s%    -&
' 0 0r8   r   c           
         [        S0 [        5       D6n[        U5      n[        [	        U5      5       H  nX   b  M
  SX'   M     UR                  U UU[        R                  R                  R                  SSSS9$ )a9  
This function creates a Tensor on the global block. The created Tensor
doesn't check the dtype and the shape of feed data because dygraph input
data can be various-length. This API is used in translating dygraph into
static graph.

Note:
    The default :code:`stop_gradient` attribute of the Tensor created by
    this API is true, which means the gradient won't be passed backward
    through the data Tensor. Set :code:`var.stop_gradient = False` If
    user would like to pass backward gradient.

Args:
   name (str): The name/alias of the Tensor, see :ref:`api_guide_Name`
       for more details.
   shape (list|tuple): List|Tuple of integers declaring the shape. You can
       set "None" at a dimension to indicate the dimension can be of any
       size. For example, it is useful to set changeable batch size as "None"
   dtype (np.dtype|VarType|str, optional): The type of the data. Supported
       dtype: bool, float16, float32, float64, int8, int16, int32, int64,
       uint8. Default: float32

Returns:
    Tensor: The global Tensor that gives access to the data.
r   TF)nameshapedtyper   stop_gradientis_dataneed_check_feed)data)
r   localslistranger   create_global_variabler   VarDescVarTypeDENSE_TENSOR)r   r   r   helperis        r5   data_layer_not_checkr      s}    4 ,68,FKE3u:8EH  ((\\!!.. )  r8   c                 "   [        [        R                  " S5      S/S5      n SU l        [	        S0 [        5       D6nUR                  R                  nSUR                  l        [        R                  " [        U 5        X!R                  l        U $ )Nundefined_varr!   float64Fr   )create_undefined_variable)r   r   generater   r   r   main_programcurrent_block_idxrz   assignRETURN_NO_VALUE_MAGIC_NUM)varr   saved_block_idss      r5   r   r     sx    
_-sIC CAAF));;O,-F)
MM+S1,;)Jr8   c                       \ rS rSrS rS rSrg)UndefinedVari  c                    Xl         g r:   r   )r<   r   s     r5   rj   UndefinedVar.__init__  s    	r8   c                    [        S5      e)Nz6local variable '{}' should be created before using it.)UnboundLocalErrorr;   s    r5   checkUndefinedVar.check  s    D
 	
r8   r   N)rG   rH   rI   rJ   rj   r   rL   rF   r8   r5   r   r     s    
r8   r   c                  (   ^  \ rS rSrU 4S jrSrU =r$ )Dygraph2StaticExceptioni   c                $   > [         TU ]  U5        g r:   )superrj   )r<   message	__class__s     r5   rj    Dygraph2StaticException.__init__!  s    !r8   rF   )rG   rH   rI   rJ   rj   rL   __classcell__)r   s   @r5   r   r      s    " "r8   r   c                P    [        U [        5      (       a  U R                  5       $ U $ r:   )r0   r   r   )xs    r5   sawr   %  s     !\""wwyr8   c                .   [         R                  " U 5      nUR                  nU(       a  SUS   :X  a  UR                  SS n0 nUR                  nU(       a=  [	        U5      [	        U5      ::  d   eU[	        U5      * S n[        [        XT5      5      nX#4$ )z:
Returns full argument names as list. e.g ['x', 'y', 'z']
r<   r   r!   N)ru   getfullargspecargsdefaultsr   dictzip)functionfullargspec	arg_namesdefault_kwargsdefault_valuesdefault_kwarg_namess         r5   parse_arg_and_kwargsr   ,  s     ((2K  IVy|+$$QR(	 N ))N>"c)n444'^)<(<(>?c"5FG$$r8   c                J    [         R                  " U 5      nUR                  nU$ )zM
Returns varargs name string of function. e.g: 'input' from `foo(x, *input)`
)ru   r   varargs)r   r   r   s      r5   parse_varargs_namer   @  s$     ((2K!!GNr8   c                ,    [        U 5      R                  $ r:   )r   rG   )vs    r5   	type_namer   I  s    7r8   c                P    [        U 5      =(       a    [        U [        5      (       + $ )zCheck if the object is an instance of a dataclass.
Refer to https://docs.python.org/3/library/dataclasses.html#dataclasses.is_dataclass
r   r0   r   objs    r5   is_dataclass_instancer   M  s     :ZT%:!::r8   c                F    [        U 5      =(       a    [        U [        5      $ r:   r   r   s    r5   is_dataclass_typer   T  s    6C!66r8   c                    [        U 5      (       d  gU R                  S[        U R                  5      * S-
  S2    H   nU[        L a  M  [        U5      (       a  M     g   g)z
Returns True if `cls` and all its non-ABC, non-object base classes are dataclasses.
Disallows inheritance from any non-dataclass types except for ABC and object.
Fr!   r   T)r   __mro__r   r   )r^   base_clss     r5   is_plain_dataclass_typer   X  s[    
 S!!KKc#++&6%6%:R ?@s? **	 A
 r8   c                    [         R                  " U 5       Vs0 s H"  oR                  [        XR                  5      _M$     sn$ s  snf r:   )dataclassesr   r   r   )r   fs     r5   dataclass_as_dictr  g  s7    2=2D2DS2IJ2IQFFGC((2IJJJs   )Ac                    U R                   " U 40 UD6n[        R                  " U 5       H%  n[        X#R                  XR                     5        M'     U$ r:   )__new__r   r   r}   r   )dataclass_typer   instancefds       r5   dataclass_from_dictr  k  sG     %%n==H  0''4=1 1Or8   c                   [        U [        [        [        45      (       a  [        [	        [
        U 5      5      $ [        U 5      (       aT  [        U 5      R                  /[	        [
        [        U 5       Vs/ s H  n[        XR                  5      PM     sn5      Q7$  [        U 5        U $ s  snf ! [         a    [        U [        R                  5      (       a  [        U R!                  5       5      s $ [        U ["        5      (       a+  [        S [%        U R'                  5       S S9 5       5      s $ U=(       d    Sn[)        U S[+        U 5       35      ef = f)z
Makes input `x` hashable.

For some unhashable objects, such as `dict/list/set/np.ndarray`,applying hash function by using their values.
c              3  R   #    U  H  u  p[        U5      [        U5      4v   M     g 7fr:   make_hashable).0kr   s      r5   	<genexpr> make_hashable.<locals>.<genexpr>  s,      DA q!=#34s   %'c                    [        U S   5      $ r]   r  )kvs    r5   <lambda>make_hashable.<locals>.<lambda>  s    mBqE.Br8   )keyzRequires a hashable object.z But received type: )r0   tupler   setmapr  r   r   rG   r   r   r   hash	TypeErrornpndarraytostringr   sorteditemsr3   r   )r   	error_msgfields      r5   r  r  t  s,    !eT3'((S*++QG
5;AY?YEJJ'Y?
 	
KQ$ H/ @  Ka$$ 

%%4   "GGI#B   >!>	I;&:9Q<.IJJKs   6B,B1 1AE5>E5%Ez,paddle.nn.layer.container.Sequential.forwardc                .    [         R                  U 5        g)z}
Append API or class as ignored case for is_paddle_func, and they
will be returned False while calling is_paddle_func(func).
N)AS_NOT_INNER_FUNC_LISTadd)paths    r5   as_not_paddle_funcr&    s     t$r8   c                &   S n [        U [        R                  R                  5      (       a  U R                  n [        U [        R
                  R                  R                  R                  5      (       a  U R                  n [        U [        R                  5      (       a  U R                  n [        R                  " U 5      (       a  U R                  n [!        U SS5      n[        R                  " U 5      (       d  [        R"                  " U 5      (       a  U R$                  n[        R&                  " U 5      nUSL=(       a    UR(                  R+                  [,        5      nU(       a  U=(       a    U" XC5      (       + nU$ ! [.         a     gf = f)z
Return True if function is defined in Paddle module.
Skip to check APIs in white list if specifying ignore_white_list as True.
c                <    Uc  gU R                   S-   U-   [        ;   $ )NF.)rG   r#  )module	func_names     r5   in_white_list%is_paddle_func.<locals>.in_white_list  s%    #%	16LLLr8   rG   NF)r0   rz   r{   r|   forwardjit	dy2staticprogram_translatorStaticFunctiondygraph_function	functoolspartialfuncru   rv   rw   r   rx   rI   	getmodulerG   
startswithPADDLE_MODULE_PREFIX	Exception)r6  ignore_white_listr,  r+  mflags         r5   is_paddle_funcr>    s*   M
dFIIOO,,<<D&**&&99HH
 
 ((DdI--..99DD!!==DD*d3	D!!W%7%7%=%=))Id#}L!6!67K!L;a ;;D s   E=F 
FFc                    S[         R                  " 5        3n [         R                  R                  [         R                  R	                  S5      U 5      n[
        R                  R                  S5      nU(       a  [         R                  R                  U5      n[         R                  R                  U5      (       d  [         R                  " U5        U$ )z#
Return @to_static temp directory.
zpaddle/to_static_tmp/z~/.cachewin)osgetpidr%  join
expandusersysplatformr8  normpathexistsmakedirs)dir_nametemp_dir
is_windowss      r5   get_temp_dirrM    s     'ryy{m4Hww||BGG..z:HEH((/J77##H-77>>(##
HOr8   c                   SS jnSS jn[        U [        R                  5      (       d  U $ [        U R                  5      S:w  a  U $ [        U R                  S   [        R
                  5      (       d  U $ U R                  S   nUR                  nSU 3nU" U/ U Vs/ s H  nU" U[        R                  " SSS95      PM!     snQUP[        R                  " [        R                  " U[        R                  " 5       / / S9S	9P5      nU" U[        R                  " [        R                  " U[        R                  " 5       / / S9/ / S
95      n	[        R                  " X// S9$ s  snf )z
Wrap a function to a closure function.

Before:

    >>> def fn(x): ...

After:

    >>> def create_fn():
    ...     closure_var_1 = None
    ...
    ...     def fn(x): ...
    ...
    ...     return fn
    ...
    ...
    ... fn = create_fn()
c           	         [         R                  " [         R                  " U [         R                  " 5       / / S9/US S9$ )Nidctx
annotationtype_comment)targetsvaluerT  )r   AssignNameStore)r   rV  s     r5   create_assign_node+wrap_as_closure.<locals>.create_assign_node  s>    {{		

!!#	 
 	
r8   c                f    [         R                  " U [         R                  " / / S / / S / S9U/ S S / S9$ )N)r   posonlyargsvararg
kwonlyargskw_defaultskwargr   )r   r   bodydecorator_listreturnsrT  type_params)r   FunctionDef	arguments)r   rb  s     r5   create_wrppper_fn_def_node3wrap_as_closure.<locals>.create_wrppper_fn_def_node  sJ     
 	
r8   r!   r   create_N)rV  kindrP  )rV  )r6  r   keywords)rb  type_ignores)returnzgast.Assign)rn  zgast.FunctionDef)r0   r   Moduler   rb  rf  r   ConstantReturnrX  LoadCall)
treeclosure_varsrZ  rh  fn_nodefn_namewrapper_fn_namer   wrapper_fn_def_nodeassign_nodes
             r5   wrap_as_closurer{    sW   *

& dDKK((
499~diilD$4$455iilGllGy)O4	
 ('C #3Dt(LM'	

 	
 KKiiDIIKBR	
  %		"IIK	 		
K ;;0>RPP5s   &E$c                L   ^  U 4S jnUR                   c   eUR                   S   $ )Nc                    > T $ r:   rF   )r   s   r5   
closure_fnwrap_cell.<locals>.closure_fn?  s    
r8   r   )__closure__)r   r~  s   ` r5   	wrap_cellr  >  s-     !!---!!!$$r8   c           
     p   S nS nS nS n[         R                  " U5      R                  n[        U [	        UR                  5       5      5      n [        U 5      n[        5       U-   n[        5       n	[        R                  " SU" U5      SSU	SS	9n
U
   [        R                  R                  U
R                  S
S 5      nU
R                  U5        S
S
S
5        U(       a!  [         (       a  ["        R$                  " X9S9  SqUR&                  n[)        WU
R                  5      n[*        R,                  R/                  UR                  U5      n[*        R,                  R1                  U5      nUR3                  U5        [5        US5      (       a  UR6                  nUUl        O+[5        X5      (       a  [9        X5      nO[;        SU S35      e[<        R>                  " UR@                  U" UU5      UURB                  U" UU5      S9nURD                  Ul"        UU
R                  4$ ! , (       d  f       GN\= f)z
Transform modified AST of decorated function into python callable object.
TODO: If only decorate one of inner function instead of decorating the main
function, the other inner functions are invisible for the decorated function.
c                z    [         R                  R                  U 5      (       a  [        R                  " U 5        g g r:   )rA  r%  rH  shutilrmtreedir_paths    r5   remove_if_exit#ast_to_func.<locals>.remove_if_exitM  s&    77>>(##MM(# $r8   c                    U R                   n[        U S5      (       a2   U R                  R                  R                    SU R                    3nU$ U$ !    U$ = f)N__self___)rG   r   r  r   )r6  prefixs     r5   func_prefix ast_to_func.<locals>.func_prefixQ  s\    4$$ MM33<<=Qt}}oN vs   /A Ac                   ^ UR                   c  g [        R                  " U 5      R                  m[        R                  " U5      R                  n[	        U4S jUR                  5        5       5      $ )Nc              3  \   >#    U  H!  u  p[        TR                  X5      5      v   M#     g 7fr:   )r  get)r  freevar_namefreevaroriginal_closure_varss      r5   r  7ast_to_func.<locals>.get_new_closure.<locals>.<genexpr>e  s/      
)G% +//FGG)Gs   ),)r  ru   getclosurevars	nonlocalsr  r  )original_fngenerated_fngenerated_closure_varsr  s      @r5   get_new_closure$ast_to_func.<locals>.get_new_closureZ  se    ##+ ' 6 6{ C M M!(!7!7!E!O!O  
)?)E)E)G
 
 	
r8   c                    Sn[        X0 5      n[        X0 5      nUR                  5        VVs0 s H5  u  pVUR                  S5      (       a  UR                  S5      (       a  M3  XV_M7     nnn0 UEUE$ s  snnf )N__globals____)r   r  r8  endswith)r  r  globals_attr_nameoriginal_fn_globalsgenerated_fn_globalsr  r   #original_fn_globals_exclude_builtins           r5   get_new_globals$ast_to_func.<locals>.get_new_globalsj  s    )%kbI&|K ,113/
3LL&&1::d+; AD3 	, /

 O&N*MNN/
s   2A3$A3wz.pyFzutf-8)r   r  suffixdeletedirencodingNr  __i_m_p_l__z
Function: z2 doesn't exist in the Module transformed from AST.)codeglobalsr   argdefsclosure)#ru   r  r  r{  r   keysr"   _inject_import_statementsrM  tempfileNamedTemporaryFilerA  r%  basenamer   writeDEL_TEMP_DIRatexitregisterrG   r   	importlibutilspec_from_loadermodule_from_specexec_moduler   r  r   r3   typesFunctionType__code____defaults____kwdefaults__)ast_rootdyfuncdelete_on_exitr  r  r  r  dyfunc_closuressourcerK  r  module_namer+  loaderspecr*  callable_funcnew_fns                     r5   ast_to_funcr  F  s   $
 
O ,,V4>>Oxo.B.B.D)EFH)F&(61F~H##6"	A 
gg&&qvvcr{3	 

 ,,:Ik1662F>>**6;;?D^^,,T2F
v v}%%**!*		#	#2#VW
 	
 ##6**6F *88F166>M 
s   >H&&
H5c                 2    / SQn SR                  U 5      S-   $ )N)zimport paddlezfrom paddle import Tensorzimport paddle.base as basez#import paddle.jit.dy2static as _jstzfrom typing import *zimport numpy as npzimport warningsz>warnings.filterwarnings('ignore', category=DeprecationWarning)
)rC  )import_statementss    r5   r  r    s!    	 99&'$..r8   c                   [        U [        R                  5      (       a  U R                  n [        R
                  " U 5      (       d=  [        R                  " U 5      (       d"  [        S[        U 5      R                   S35      e[        R                  " U 5      u  p#U Vs/ s H+  nUR                  5       R                  S5      (       d  UOSPM-     nnSR                  U5      nU(       a  [        R                  " U5      nU$ s  snf )z5
Transforms function into raw string of source code.
zDThe type of 'function' should be a function or method, but received r)  #r   )r0   r4  r5  r6  ru   rx   rv   r  r   rG   getsourcelineslstripr8  rC  textwrapdedent)r   r  source_code_listr  linesource_codes         r5   func_to_source_coder    s     (I--..==x((G,<,<X,F,FRSWX`SaSjSjRkklm
 	
 "00: %$D KKM,,S11t;$   ''*+Kook2s    2Dc                r   [        U 5      nU[        U5      :w  a  U  H
  nX1;  d  M
    g   g[        X5       H}  u  pE[        U[        R                  R
                  5      (       d)  [        U[        R                  R
                  5      (       a  [        XE5      (       d    gMk  [        XE5      (       a  M}    g   g)a:  
Returns True if the two input specs are compatible, otherwise False.

args:
    src_input_spec (list or tuple[InputSpec et.al]): list/tuple of
        paddle.static.InputSpec or int/str et.al
    desired_input_specs (list or tuple[InputSpec et.al]): list/tuple of
        paddle.static.InputSpec or int/str et.al
FT)r   r   r0   rz   static	InputSpec_compatible_tensor_spec_compatible_non_tensor_spec)src_input_specsdesired_input_specs	len_specsr  src_specdesired_specs         r5   input_specs_compatibler    s     O$IC+,, $D. $  '*/&O"H(FMM$;$;<<
fmm55A A /xFF  G 38JJ  'P r8   c                   X4 H.  n[        U[        R                  R                  5      (       a  M.    g   U R                  nUR                  n[        U5      nU[        U5      :w  a  g[        U5       H-  nX6   b  X6   S:  a  M  XF   b  XF   S:  a  M!  X6   XF   :w  d  M-    g   [        U R                  5      n[        UR                  5      nXx:w  a  gg)z3
Check whether two tensor type spec is compatible.
Fr   T)	r0   rz   r  r  r   r   r   r   r   )	r  r  r  	src_shapeother_shape	len_shapej	src_dtypeother_dtypes	            r5   r  r    s     ($ 7 788 ) I$$KIIC$$9<9<!#3>![^a%7<;>)  hnn-I 2 23Kr8   c                6    S nU" U 5      nU" U5      nX4:w  a  gg)z7
Check whether two non-tensor type spec is compatible.
c                2     [        U 5      nU$ !   S n U$ = fr:   r  )r  hash_vals     r5   
hash_value/_compatible_non_tensor_spec.<locals>.hash_value  s)    	$T*H 	Hs    FTrF   )r  r  r  src_hash_valdesired_hash_vals        r5   r  r    s*    
 h'L!,/'r8   c                  0    \ rS rSrSrS rS rS rS rSr	g)	GetterSetterHelperi%  zwe have two classes of names in setter and getter function:
w_vars(loop_vars) + push_pop_vars
To simplify the setter logic in convert_while and convert_cond,
we extract the helper class here.
c                <   S U 5       nS U 5       n[        [        R                  " S U[        5       5      5      U l        U R                  R                  5         Xl        X l        [        U R                  5       VVs0 s H  u  pVXe_M	     snnU l	        g s  snnf )Nc              3  .   #    U  H  oc  / OUv   M     g 7fr:   rF   r  r   s     r5   r  .GetterSetterHelper.__init__.<locals>.<genexpr>-  s     AjIb1,js   c              3  8   #    U  H  n[        U5      v   M     g 7fr:   r   r  s     r5   r  r  .  s     7JqZ]]Js   c                
    X-  $ r:   rF   )r   ys     r5   r  -GetterSetterHelper.__init__.<locals>.<lambda>0  s    !%r8   )
r   r4  reducer   _unionsortgettersetter	enumeratename2id)r<   getter_funcsetter_func
name_lists	name_setsidxr   s          r5   rj   GetterSetterHelper.__init__,  s{    AjA
7J7	/JLI
 	!!3<T[[3IJ3Iic	3IJJs    Bc                    U R                   $ r:   )r  r;   s    r5   unionGetterSetterHelper.union7  s    {{r8   c                   ^ ^ Uc  / nT R                  5       mTc  gU H9  nUT R                  ;   a  M   SU ST R                  R                  5        S35       e   [        U U4S jU 5       5      $ )NrF   
the name `` not in name union set``.c              3  H   >#    U  H  nTTR                   U      v   M     g 7fr:   )r  )r  nr<   varss     r5   r  )GetterSetterHelper.get.<locals>.<genexpr>D  s     :EqT$,,q/*Es   ")r  r  r  r  )r<   namesr  r  s   `  @r5   r  GetterSetterHelper.get:  sw    =E{{}<A$ QC78I8I8K7LBO$  :E:::r8   c                j   Uc  / nUc  / nU R                  5       nUc  g U H8  nX@R                  ;   a  M   SU SU R                  R                  5        S35       e   [        U5      nU Vs/ s H  o@R                  U   PM     nn[	        XR5       H	  u  pgXsU'   M     U R                  U5        g s  snf )Nr  r  r  )r  r  r  r   r   r  )r<   r  valuesr  r  indicesr   r   s           r5   r  GetterSetterHelper.setF  s    =E>F{{}<A$ QC78I8I8K7LBO$  Dz,12Eq<<?E2(DAG )D 3s   ,B0)r  r  r  r  N)
rG   rH   rI   rJ   __doc__rj   r  r  r  rL   rF   r8   r5   r  r  %  s    	K
;r8   r  c                :    [        X5      =(       d
    [        5       $ r:   )cinn_is_enabledprim_is_enabledbuild_strategybackends     r5   prim_or_cinn_is_enabledr'  Y  s    >3H7HHr8   c                    UR                  5       (       a  gU R                  (       a  [        R                  " S5        g[        R
                  R                  R                  5       (       a  gg)NTzpUse `build_strategy.build_cinn_pass = True` to enable CINN is deprecated, please use `backend = 'CINN'` instead.F)r=   build_cinn_passr   r   rz   baser   in_cinn_moder$  s     r5   r"  r"  ]  sN    %%~	
 {{))++r8   c                z    [        5       (       d  g[        R                  5       (       d  g[        X5      (       d  gg)NFT)cinn_is_availableENV_ENABLE_CINN_IN_DY2STr  r"  )r&  r%  s     r5   infer_use_cinn_backendr/  j  s1    #''))>33r8   c                    [         R                  " 5       (       d  g[         R                  " 5       (       d  g[        [         R                  R                  5       [         R                  R                  R                  5      (       d  g[        R                  " 5       S:w  a  g[         R                  R                  5       (       d  gg)NFLinuxT)rz   is_compiled_with_cinnis_compiled_with_cudar0   r   _current_expected_place_r*  r   	CUDAPlacerF  systemuse_pir_apirF   r8   r5   r-  r-  t  s    ''))''))113V[[5E5E5O5O  G#''))r8   c                 6    [         R                  " S/5      S   $ )NFLAGS_enable_cse_in_dy2strz   	get_flagsrF   r8   r5   cse_is_enabledr<    s!    89:# r8   c                 6    [         R                  " S/5      S   $ )N FLAGS_specialize_device_in_dy2str:  rF   r8   r5   use_specialized_devicer?    s!    ?@A* r8   c                2   U R                   R                  5       (       d  gU R                  [        R                  [        R
                  4;  a  g[        U R                  5      S:X  a  g[        U R                  5      S:  a  gU R                  S   S:  a  gg)NFr   Tr!   
   )placeis_cpu_placer   rz   int32int64r   r   )tensors    r5   maybe_dynamic_shape_tensorrG    sz    <<$$&&||  
6<<A
6<<1||Ar8   c                 6    [         R                  " S/5      S   $ )N)FLAGS_parameters_persistent_mode_in_dy2str:  rF   r8   r5   %parameters_persistent_mode_is_enabledrJ    s!    HIJ3 r8   c                 d    [         R                  " 5       =(       d    [         R                  " 5       $ r:   )r   _is_bwd_prim_enabled_is_fwd_prim_enabledrF   r8   r5   r#  r#    s    $$&E$*C*C*EEr8   c                z    [         R                  " U 5      nUS L=(       a    UR                  R                  U5      $ r:   )ru   r7  rG   r8  )r   module_prefixr<  s      r5   is_api_in_module_helperrP    s0    #AD=AQZZ22=AAr8   c                 6    [         R                  " S/5      S   $ )NFLAGS_enable_auto_layout_passr:  rF   r8   r5   auto_layout_is_enabledrS    s!    <=>' r8   c                   ^ ^ U U4S jn[        T [        R                  5      (       a  U" 5       (       a  gT [        R                  R                  5       ;   a  U" 5       (       a  gg)zpredict whether a function is a builtin function with name={name}.
if name == None, then any builtin function will return True
c                 8   > TS L =(       d    T R                   T:H  $ r:   )rG   )r6  r   s   r5   
name_judgeis_builtin.<locals>.name_judge  s    t|4t}}44r8   TF)r0   r  BuiltinFunctionTypebuiltins__dict__r  )r6  r   rV  s   `` r5   
is_builtinr[    sI    
5 $1122z||	""))+	+
r8   c                 &   ^  [         U 4S j5       nU$ )Nc               3     >#    T (       d  S v   g T S   " 5          [        T SS  6 " 5          S v   S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f7f)Nr   r!   )compose_guards)guard_creatorss   r5   composed_guard&compose_guards.<locals>.composed_guard  sK     1N12./1 2  11  s1   A#AAA	A#
A	A
A A#r   )r_  r`  s   ` r5   r^  r^    s      r8   c               #  P  #    [         R                  " 5       n [         R                  " 5       n[         R                  " S5         S v   [         R                  " U 5        [         R
                  " U5        g ! [         R                  " U 5        [         R
                  " U5        f = f7fr   )r   rM  rL  _set_prim_all_enabled_set_prim_forward_enabled_set_prim_backward_enabled)
origin_fwd
origin_bwds     r5   
prim_guardrh    sr     **,J**,Jt$4&&z2''
3 	&&z2''
3s   AB&A5 -B&5.B##B&c              #     #    / nU R                  5       (       a6  UR                  S 5        UR                  S 5        UR                  S 5        [        U6 " 5          S v   S S S 5        g ! , (       d  f       g = f7f)Nc                     [        5       $ r:   )rh  rF   r8   r5   r  backend_guard.<locals>.<lambda>  s    jlr8   c                 V    [         R                  R                  R                  SS5      $ )NFLAGS_prim_enable_dynamicTrz   r*  r   
flag_guardrF   r8   r5   r  rk    s    FKK))44+Tr8   c                 V    [         R                  R                  R                  SS5      $ )NFLAGS_use_cinnTrn  rF   r8   r5   r  rk    s    FKK))445EtLr8   )r=   r   r^  )r&  r_  s     r5   backend_guardrr    sg     N23	

 	L	
 
	(	* 
+	*	*s   AA<A+"	A<+
A95A<c                   0 nS n[         R                  " X5      n[        [        XV5      5      US'   [         R                  " X5      n[        [        XW5      5      US'   [         R                  " X5      n[        [        XX5      5      US'   U$ )Nc                x    [        U [        R                  5      (       a  U R                  $ [        R                  $ r:   )r0   r   Variabler   EMPTY_VAR_NAME)grad_vars    r5   r  &construct_grad_names.<locals>.<lambda>  s1    h	 2 233 	 	&%%	&r8   r   paramout)r   _get_grad_varsr   r  )	grad_info_mapx_vars
param_varsout_varsgrad_var_namesr   x_grad_varsparam_grad_varsout_grad_varss	            r5   construct_grad_namesr    s    N
B
 ))-@Ks234N3--mHO"3r#;<N7++MDM R!78N5r8   c              #  2  #     [        U 5      [        U5      :X  d   eU  Vs/ s H  o"R                  PM     nn[        X5       H  u  p$XBl        M     S v   [        X5       H  u  p$XBl        M     g s  snf ! [        U W5       H  u  p$XBl        M     f = f7fr:   )r   r   r   )tensorsr  torigin_namesr   s        r5   tensor_name_guardr    s     7|s5z)))(/0107*GAF +71GAF 2 1
 7L1GAF 2s,   BA7 A2 A7 B2A7 7BBc                   [         R                  " 5       (       a  [        R                  " 5       n[	        5       n[        U 5       H  n[        U[        R                  R                  5      (       d  M.  UR                  (       d  MA  UR                  R                  U5      (       d  Mc  UR                  US5      nSUl
        UR                  U5        M     g g r   )rz   r3  r   _current_expected_placer   r   r0   r   eagerTensorr   rB  _equals_copy_to_share_buffer_to)inputsexpected_placecuda_pinned_placerV  r   s        r5   *cuda_pinned_tensors_move_to_excepted_placer    s    ##%%"::<+-V_E5$**"3"344'''KK''(9::nn^T:$(!$$U+ %	 &r8   c                b   ^^ SS jnU" U T5      m[         R                  U TU5        UU4S jnU$ )Nc                    [        X5      (       d  g[        X5      n[        R                  " U5      (       d  U$ [        U R                  U5      (       d  U$ UR
                  [        U R                  U5      La  U$ g)a  
There are two case we don't need to restore the method:
1. If the attribute is not existed
2. If the obj.attr.__func__ is obj.__class__.attr
If the method need restore, return the original method.
Otherwise, return None, indicating that the method can be simply deleted.
N)r   r   ru   rv   r   rw   r  r   original_methods      r5   get_original_method)patch_method.<locals>.get_original_method!  sr     x&&!(100""x))400""##783E3Et+LL #"r8   c                h   > Tc  [         R                  U T5        g [         R                  U TT5        g r:   )object__delattr____setattr__r  s    r5   restorerpatch_method.<locals>.restorer>  s+    "x.x?r8   )r  r  r   str)r  r  )r  r   
new_methodr  r  r  s    `   @r5   patch_methodr     s5    4 *(D9O
xz2@ Or8   c              #  X   #    [        XU5      n S v   U" U 5        g ! U" U 5        f = f7fr:   )r  )r  r   r  r  s       r5   patch_method_guardr  G  s+      HJ7Hs   * 	*
'*c                L   [        U [        R                  5      (       d!  [        S[	        U 5      R
                   35      e[        U [        5      (       d  g[        U [        5      n[        U[        5      (       d(  [        S[         S[	        U5      R
                   35      eU$ )z
Extract dynamic dimensions from a paddle.Tensor.
Returns a list of dynamic dimensions or None if no dynamic dimensions exist.
z"Expected a paddle.Tensor, but got rF   z	Expected z to be a tuple, but got )
r0   rz   r  r  r   rG   r   DYNAMIC_DIMS_ATTR_NAMEr   r  )rF  dynamic_dimss     r5   extract_tensor_dynamic_dimsr  R  s     ffmm,,0f1F1F0GH
 	
 61226#9:LlE**.//G\HZHcHcGde
 	
 r8   c                  B    \ rS rSr% S\S'   S r  S	S jr  S
S jrSrg)GraphTracingContextii  z6tuple[list[paddle.Tensor], list[paddle.Tensor]] | Noneparams_with_valuesc                    S U l         g r:   r  r;   s    r5   rj   GraphTracingContext.__init__l  s
    "&r8   c                    Xl         g r:   r  )r<   r  s     r5   set_params_with_values*GraphTracingContext.set_params_with_valueso  s
     #5r8   c                8    U R                   c   eU R                   $ r:   r  r;   s    r5   get_params_with_values*GraphTracingContext.get_params_with_valuesu  s"     &&222&&&r8   r  N)r  /tuple[list[paddle.Tensor], list[paddle.Tensor]])rn  r  )	rG   rH   rI   rJ   __annotations__rj   r  r  rL   rF   r8   r5   r  r  i  s'    NN'5K5'	8'r8   r  c              #  2  #    [        5       n[        SS9   [        [        5         Uv   SSKJnJn  UR                  UR                  U 5      5        UR                  U 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f7f)NT)is_to_staticrP   )_global_inplace_map_global_parameter_recorder)	r  r   r   r   dy2static.parameter_recorderr  r  r  pop)r   rR  r  r  s       r5   graph_tracing_guardr  |  sn     

C$/ !45		

 	""#=#A#A,#OP- 	6 	0/55 	0/s3   BB>A5$B,	B5
B	?B
BB)float32)r^   r   )r  z	type[Any]r   zdict[str, Any]r:   r   )rt  gast.ASTru  z	list[str]rn  r  )r   r   rn  ztypes.CellType)rF  paddle.Tensorrn  r   )r  r  r   r  r  zCallable[..., Any])rF  r  rn  ztuple[int, ...])r   zpaddle.static.Program)
__future__r   r  rY  r   r4  importlib.utilr  ru   rA  rF  r  rE  r  r  r   r  r   abcr   
contextlibr   r   r   enumr	   r
   r   r   importlib.machineryr   typingr   r   numpyr  rz   paddle.baser   r   r   r   paddle.base.data_feederr   paddle.base.dygraph.baser   paddle.base.layer_helperr   paddle.base.wrapped_decoratorr   paddle.frameworkr   paddle.jit.utilsr   paddle.pir.corer   r   paddle.utilsr   r   paddle.utils.environmentsr   r    	ast_utilsr"   collections.abcr#   __all__r9  ALREADY_D2SORIGIN_INFOr  	RE_PYNAMERE_PYMODULERETURN_NO_VALUE_VAR_NAMEr   r   r   READERSTEP_SCOPESFEED_MINIBATCH
FETCH_LISTNO_SHAPE_VAR_TYPEENV_SOT_EVENT_LEVELENV_ENABLE_SOTr.  r  r+   rN   rW   r   r   r   r   r:  r   r   r   r   r   r   r   r   r  r  r  r#  r&  r>  rM  r{  r  r  r  r  r  r  r  r  r'  r"  r/  r-  r<  r?  rG  rJ  r#  rP  rS  r[  r^  rh  rr  r  r  r  r  r  r  r  r  rF   r8   r5   <module>r     s   #       	   
       % , * * 0 %   > > 1 1 G , ' I &
 *(
 !  B	  3 &  	LLLL$$LL''LL##	  11BAF +,>E5D  . #d #:W =& =&@0 0*(V
 
"i "
%(;7K%V II %!H \Q~%eP/2>8*1 1hI
 "FB
  4 4  "  	 	, $N -? .' '& . .r8   