
    x-j̋                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlmZmZ d dlmZmZmZmZ d dlmZ d dlm Z m!Z! d dl"Z#d dl$Z$d d	l%m&Z&m'Z'm(Z(m)Z) d d
l*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7m8Z8 d dl9m:Z:m;Z; d dl<m=Z=m>Z> ddl?m@Z@ e rd dlAmBZB g ZCdZDdZEdZFdaGdZHdZIdZJdZKe'jL        jM        jN        e'jL        jM        jO        e'jL        jM        jP        e'jL        jM        jQ        gZR e>dd           ZS e=dd          ZT e=d d          ZUd!ZV G d" d#e          ZW G d$ d%e          ZX G d& d'          ZY G d( d)          ZZd{d+Z[d, Z\ G d- d.          Z] G d/ d0e^          Z_d1 Z`d2 Zad3 Zbd4 Zcd5 Zdd6 Zed|d9Zfd: Zgd}d?Zhd~d@ZidAhajdB ZkddCZldD ZmddJZnddNZoddOZpdP ZqddQZrdR ZsdS ZtdT Zu G dU dV          ZvdW ZwdX ZxdY ZydZ Zzd[ Z{d\ Z|dd`Z}da Z~db Zdc Zdd Zd~deZdf Zedg             Zedh             Zdi Ze1dj             Zdk ZddrZedds            ZdduZ G dv dw          Zeddz            ZdS )    )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                  t    e Zd Z e            Z e            Z e            Zedd            Zd Z	d Z
d ZdS )	Backendargstr | Backend | Nonec                   t          | t                    r| S | t          j        S |                                 dk    rt          j        S |                                 dk    rt          j        S t          d|  d          )NCINNPCCzUnknown backend z&. Only support 'CINN' or None for PHI.)
isinstancer+   PHIupperr/   r0   
ValueError)r,   s    Z/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddle/jit/dy2static/utils.pyfrom_argzBackend.from_argi   s|    c7## 	J;;99;;&  <99;;%;JsJJJ
 
 	
    c                "    | t           j        k    S N)r+   r/   selfs    r5   is_cinnzBackend.is_cinnw   s    w|##r7   c                "    | t           j        k    S r9   )r+   r0   r:   s    r5   is_pcczBackend.is_pccz       w{""r7   c                "    | t           j        k    S r9   )r+   r2   r:   s    r5   is_phizBackend.is_phi}   r?   r7   N)r,   r-   )__name__
__module____qualname__r   r/   r2   r0   staticmethodr6   r<   r>   rA    r7   r5   r+   r+   d   s        466D
$&&C
$&&C
 
 
 \
$ $ $# # ## # # # #r7   r+   c                      e Zd ZdZdZdZdZdS )CUDAGraphStater   r!         N)rB   rC   rD   DISABLEWARMUPCAPTUREREPLAYrF   r7   r5   rH   rH      s"        GFGFFFr7   rH   c                      e Zd Z G d de          ZdZe                                dfddZdd	Z	 dddZ	d Z
ddZd Zedd            Zed             ZdS )TransformOptionsc                  L    e Zd Z e            Z e            Zed             ZdS )TransformOptions.ToStaticModec                     | d          S Nr   rF   )clss    r5   Nilz!TransformOptions.ToStaticMode.Nil   s    3q66Mr7   N)rB   rC   rD   r   SOTASTclassmethodrV   rF   r7   r5   ToStaticModerR      sC        dffdff		 	 
	 	 	r7   rZ   ___jit_transform_options___Fskip_transform_modeneed_capture_control_flowboolc                "    || _         || _        d S r9   )r\   _need_capture_control_flow)r;   r\   r]   s      r5   __init__zTransformOptions.__init__   s    
 $7 *C'''r7   c                &    | xj         |z  c_         | S r9   r\   )r;   r\   s     r5   with_skip_transform_modez)TransformOptions.with_skip_transform_mode   s      $77  r7   Tc                    || _         | S r9   r`   )r;   r]   s     r5   with_need_capture_control_flowz/TransformOptions.with_need_capture_control_flow   s     +D'r7   c                $   t          j        |          r|j        }t          j        |          st	          |t
          j        j                  rt          |t          j
        |            d S t          j        dt          |                      d S )NzQOnly support @jit.marker.unified to type(function) or type(method), but received )inspectismethod__func__
isfunction
issubclasspaddlennLayersetattrrP   TRANSFORM_OPTIONS_ATTR_NAMEwarningswarntype)r;   fns     r5   attachzTransformOptions.attach   s    B 	Bb!! 	ZFIO%D%D 	B(DdKKKKKMndhikdldlnn    r7   modec                    | j         |z   S r9   rc   )r;   rx   s     r5   need_transformzTransformOptions.need_transform   s    ,t344r7   c                    | j         S r9   rf   r:   s    r5   r]   z*TransformOptions.need_capture_control_flow   s    ..r7   c                    t          | t          j                  sdS t          | t          j                                      |          S NT)hasattrrP   rr   getattrrz   )rv   rx   s     r5   check_fn_need_transformz(TransformOptions.check_fn_need_transform   sE    r+GHH 	4 <
 

.

	r7   c                    t          | t          j                  sdS t          | t          j                                                  S )NF)r~   rP   rr   r   r]   )rv   s    r5   "check_fn_need_capture_control_flowz3TransformOptions.check_fn_need_capture_control_flow   sD    r+GHH 	5 <
 

#
#
%
%	&r7   N)r\   rZ   r]   r^   )r\   rZ   T)r]   r^   )rx   rZ   )rB   rC   rD   r
   rZ   rr   rV   ra   rd   rg   rw   rz   r]   rE   r   r   rF   r7   r5   rP   rP      s           t    #@ -9,<,<,>,>*/D D D D D   
 15    	 	 	5 5 5 5/ / /    \ & & \& & &r7   rP   c                  6    e Zd Zd Zd Zd Zed             ZdS )TimeCounterc                    g | _         d S r9   )_time_historyr:   s    r5   ra   zTimeCounter.__init__   s    *,r7   c                P    t          | j                  dk    rdS | j        d         S )Nr   )lenr   r:   s    r5   get_last_timezTimeCounter.get_last_time   s+    t!""a''1!"%%r7   c                *    t          | j                  S r9   )sumr   r:   s    r5   get_total_timezTimeCounter.get_total_time   s    4%&&&r7   c              #     K   t          j                    }d V  t          j                    }||z
  }| j                            |           d S r9   )timeperf_counterr   append)r;   
start_timeend_timeelapsed_times       r5   recordzTimeCounter.record   sR      &((
$&&*,!!,/////r7   N)rB   rC   rD   ra   r   r   r   r   rF   r7   r5   r   r      s\        - - -& & &
' ' ' 0 0 ^0 0 0r7   r   float32c           	        t          di t                      }t          |          }t          t	          |                    D ]}||         d||<   |                    | ||t          j        j        j	        ddd          S )a  
    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.
    dataNr   TF)nameshapedtyperu   stop_gradientis_dataneed_check_feed)r   )
r   localslistranger   create_global_variabler   VarDescVarTypeDENSE_TENSOR)r   r   r   helperis        r5   data_layer_not_checkr      s    4 ,,688,,FKKE3u::  8E!H((\!. )   r7   c                    t          t          j        d          dgd          } d| _        t	          di t                      }|j        j        }d|j        _        t          j	        t          |            ||j        _        | S )Nundefined_varr!   float64Fcreate_undefined_variabler   )r   )r   r   generater   r   r   main_programcurrent_block_idxrn   assignRETURN_NO_VALUE_MAGIC_NUM)varr   saved_block_idss      r5   r   r     s    
_--sI C CAAAAF);O,-F)
M+S111,;F)Jr7   c                      e Zd Zd Zd ZdS )UndefinedVarc                    || _         d S r9   r   )r;   r   s     r5   ra   zUndefinedVar.__init__  s    			r7   c                     t          d          )Nz6local variable '{}' should be created before using it.)UnboundLocalErrorr:   s    r5   checkzUndefinedVar.check  s    D
 
 	
r7   N)rB   rC   rD   ra   r   rF   r7   r5   r   r     s2          
 
 
 
 
r7   r   c                       e Zd Z fdZ xZS )Dygraph2StaticExceptionc                J    t                                          |           d S r9   )superra   )r;   message	__class__s     r5   ra   z Dygraph2StaticException.__init__!  s!    !!!!!r7   )rB   rC   rD   ra   __classcell__)r   s   @r5   r   r      s8        " " " " " " " " "r7   r   c                X    t          | t                    r|                                 S | S r9   )r1   r   r   )xs    r5   sawr   %  s'    !\"" wwyyr7   c                >   t          j        |           }|j        }|rd|d         k    r|j        dd         }i }|j        }|rWt	          |          t	          |          k    sJ |t	          |           d         }t          t          ||                    }||fS )zB
    Returns full argument names as list. e.g ['x', 'y', 'z']
    r;   r   r!   N)ri   getfullargspecargsdefaultsr   dictzip)functionfullargspec	arg_namesdefault_kwargsdefault_valuesdefault_kwarg_namess         r5   parse_arg_and_kwargsr   ,  s     (22K I )Vy|++$QRR(	 N )N H>""c)nn4444'^)<)<(<(>(>?c"5~FFGGn$$r7   c                <    t          j        |           }|j        }|S )zU
    Returns varargs name string of function. e.g: 'input' from `foo(x, *input)`
    )ri   r   varargs)r   r   r   s      r5   parse_varargs_namer   @  s!     (22K!GNr7   c                *    t          |           j        S r9   )ru   rB   )vs    r5   	type_namer   I  s    77r7   c                L    t          |           ot          | t                     S )zCheck if the object is an instance of a dataclass.
    Refer to https://docs.python.org/3/library/dataclasses.html#dataclasses.is_dataclass
    r   r1   ru   objs    r5   is_dataclass_instancer   M  s$     :ZT%:%:!::r7   c                J    t          |           ot          | t                    S r9   r   r   s    r5   is_dataclass_typer   T  s    6C!6!66r7   rU   ru   c                    t          |           sdS | j        dt          | j                   dz
  d         D ]}|t          u rt          |          s dS dS )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   )rU   base_clss     r5   is_plain_dataclass_typer   X  su    
 S!! uKc#+&6&6%6%:R ?@  s?? ** 	55	4r7   c                D      fdt          j                   D             S )Nc                F    i | ]}|j         t          |j                   S rF   )r   r   ).0fr   s     r5   
<dictcomp>z%dataclass_as_dict.<locals>.<dictcomp>h  s)    JJJQAFGC((JJJr7   )dataclassesr   r   s   `r5   dataclass_as_dictr   g  s(    JJJJ+2DS2I2IJJJJr7   dataclass_type	type[Any]r   dict[str, Any]c                     | j         | fi |}t          j        |           D ]#}t          ||j        ||j                            $|S r9   )__new__r   r   rq   r   )r   r   instancefds       r5   dataclass_from_dictr   k  sZ     &~%n====H 00 2 2"'4=1111Or7   c                    t           t          t          t          f          r"t          t	          t
                               S t                     rDt                     j        gt	          t
           fdt                     D                       R S 	 t                      n# t          $ r t           t          j                  r#t                                                     cY S t           t                    r=t          d t!                                           d           D                       cY S |pd}t%          | dt'                                w xY w S )z
    Makes input `x` hashable.

    For some unhashable objects, such as `dict/list/set/np.ndarray`,applying hash function by using their values.
    c                :    g | ]}t          |j                  S rF   )r   r   )r   fieldr   s     r5   
<listcomp>z!make_hashable.<locals>.<listcomp>  s%    ???EEJ''???r7   c              3  X   K   | ]%\  }}t          |          t          |          fV  &d S r9   make_hashabler   kr   s      r5   	<genexpr>z make_hashable.<locals>.<genexpr>  sO        Aq q!!=#3#34     r7   c                ,    t          | d                   S rT   r   )kvs    r5   <lambda>zmake_hashable.<locals>.<lambda>  s    mBqE.B.B r7   )keyzRequires a hashable object.z But received type: )r1   tupler   setmapr   r   ru   rB   r   hash	TypeErrornpndarraytostringr   sorteditemsr4   r   )r   	error_msgs   ` r5   r   r   t  s    !eT3'(( ,S**+++Q 
GG
????VAYY??? 
 
 	
KQ K K Ka$$ 	 

%%%%%4   	  "GGII#B#B          >!>	III9Q<<IIJJJK" Hs   B* *AE)1AE)&E)z,paddle.nn.layer.container.Sequential.forwardc                :    t                               |            dS )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$$$$$r7   c                d   d }	 t          | t          j        j                  r| j        } t          | t          j        j        j        j                  r| j	        } t          | t          j                  r| j        } t          j        |           r| j        } t!          | dd          }t          j        |           st          j        |           r| j        }t          j        |           }|duo|j                            t,                    }|r|o |||           }|S # t.          $ r Y dS w xY w)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                2    |dS | j         dz   |z   t          v S )NF.)rB   r  )module	func_names     r5   in_white_listz%is_paddle_func.<locals>.in_white_list  s%    5#%	16LLLr7   rB   NF)r1   rn   ro   rp   forwardjit	dy2staticprogram_translatorStaticFunctiondygraph_function	functoolspartialfuncri   rj   rk   r   rl   rD   	getmodulerB   
startswithPADDLE_MODULE_PREFIX	Exception)r   ignore_white_listr  r  mflags         r5   is_paddle_funcr(    sM   M M M
dFIO,, 	 <D&*&9H
 
 	) (DdI-.. 	9DD!! 	!=DD*d33	D!! 	*W%7%=%= 	*)Id##}L!6!67K!L!L 	<;a ; ;;D   uus   DD! !
D/.D/c                    dt          j                     } t           j                            t           j                            d          |           }t
          j                            d          }|rt           j                            |          }t           j        	                    |          st          j
        |           |S )z+
    Return @to_static temp directory.
    zpaddle/to_static_tmp/z~/.cachewin)osgetpidr  join
expandusersysplatformr"  normpathexistsmakedirs)dir_nametemp_dir
is_windowss      r5   get_temp_dirr7    s     5ry{{44Hw||BG..z::HEEH((//J .7##H--7>>(## 
HOr7   treegast.ASTclosure_vars	list[str]returnc                p   dddd}t          | t          j                  s| S t          | j                  dk    r| S t          | j        d         t          j                  s| S | j        d         }|j        }d| } ||g fd	|D             |t          j        t          j        |t          j	                    g g 
                              } |t          j
        t          j        |t          j	                    g g 
          g g                     }t          j        ||gg           S )a.  
    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()
    r<  gast.Assignc                    t          j        t          j        | t          j                    g g           g|d           S )Nidctx
annotationtype_comment)targetsvaluerD  )r   AssignNameStore)r   rF  s     r5   create_assign_nodez+wrap_as_closure.<locals>.create_assign_node  sN    {	
!!#	   
 
 
 	
r7   gast.FunctionDefc                j    t          j        | t          j        g g d g g d g           |g d d g           S )N)r   posonlyargsvararg
kwonlyargskw_defaultskwargr   )r   r   bodydecorator_listreturnsrD  type_params)r   FunctionDef	arguments)r   rR  s     r5   create_wrppper_fn_def_nodez3wrap_as_closure.<locals>.create_wrppper_fn_def_node  sY       
 
 
 	
r7   r!   r   create_c           	     P    g | ]"} |t          j        d d                     #S )N)rF  kind)r   Constant)r   r   rJ  s     r5   r   z#wrap_as_closure.<locals>.<listcomp>!  sE        #"3Dt(L(L(LMM  r7   r@  )rF  )r   r   keywords)rR  type_ignores)r<  r>  )r<  rK  )r1   r   Moduler   rR  rV  r   ReturnrH  LoadCall)	r8  r:  rX  fn_nodefn_namewrapper_fn_namewrapper_fn_def_nodeassign_noderJ  s	           @r5   wrap_as_closurerh    s   *
 
 
 

 
 
 
& dDK(( 
49~~dilD$455 ilGlG)))O44	
   '  	

 	
 KiDIKKBR    	
   %$	"IKK	   		
 		
 		
 K ;0+>RPPPPr7   r   r   types.CellTypec                :      fd}|j         J |j         d         S )Nc                      S r9   rF   )r   s   r5   
closure_fnzwrap_cell.<locals>.closure_fn?  s    
r7   r   )__closure__)r   rl  s   ` r5   	wrap_cellrn  >  s;         !---!!$$r7   c           
     l   d }d }d }d }t          j        |          j        }t          | t	          |                                                    } t          |           }t                      |z   }t                      }	t          j
        d ||          dd|	d	          }
|
5  t          j                            |
j        d
d                   }|
                    |           d
d
d
           n# 1 swxY w Y   |rt           rt#          j        ||	           da|j        }t)          ||
j                  }t*          j                            |j        |          }t*          j                            |          }|                    |           t5          |d          r|j        }||_        n4t5          ||          rt9          ||          }nt;          d| d          t=          j        |j          |||          ||j!         |||                    }|j"        |_"        ||
j        fS )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                p    t           j                            |           rt          j        |            d S d S r9   )r+  r  r2  shutilrmtreedir_paths    r5   remove_if_exitz#ast_to_func.<locals>.remove_if_exitM  s8    7>>(## 	$M(#####	$ 	$r7   c                |    | j         }t          | d          r$	 | j        j        j          d| j          }n#  Y nxY w|S )N__self___)rB   r~   rw  r   )r   prefixs     r5   func_prefixz ast_to_func.<locals>.func_prefixQ  sR    4$$ 	 M3<NNt}NNs   5 9c                    |j         d S t          j        |           j        t          j        |          j        }t	          fd|                                D                       S )Nc              3  d   K   | ]*\  }}t                              ||                    V  +d S r9   )rn  get)r   freevar_namefreevaroriginal_closure_varss      r5   r   z7ast_to_func.<locals>.get_new_closure.<locals>.<genexpr>e  sT       
 
%g +//gFFGG
 
 
 
 
 
r7   )rm  ri   getclosurevars	nonlocalsr  r  )original_fngenerated_fngenerated_closure_varsr  s      @r5   get_new_closurez$ast_to_func.<locals>.get_new_closureZ  s    #+4 ' 6{ C C M!(!7!E!E!O  
 
 
 
)?)E)E)G)G
 
 
 
 
 	
r7   c                    d}t          | |i           }t          ||i           }d |                                D             }i ||S )N__globals__c                n    i | ]2\  }}|                     d           r|                    d           /||3S )__)r"  endswithr   s      r5   r   z8ast_to_func.<locals>.get_new_globals.<locals>.<dictcomp>o  sV     /
 /
 /
1LL&&/
 ,-::d+;+;/
q/
 /
 /
r7   )r   r  )r  r  globals_attr_nameoriginal_fn_globalsgenerated_fn_globals#original_fn_globals_exclude_builtins         r5   get_new_globalsz$ast_to_func.<locals>.get_new_globalsj  sn    )%k3DbII&|5FKK/
 /
+1133/
 /
 /
+
 O&N*MNNr7   wz.pyFzutf-8)rx   ry  suffixdeletedirencodingNrs  __i_m_p_l__z
Function: z2 doesn't exist in the Module transformed from AST.)codeglobalsr   argdefsclosure)#ri   r  r  rh  r   keysr"   _inject_import_statementsr7  tempfileNamedTemporaryFiler+  r  basenamer   writeDEL_TEMP_DIRatexitregisterrB   r   	importlibutilspec_from_loadermodule_from_specexec_moduler~   r  r   r4   typesFunctionType__code____defaults____kwdefaults__)ast_rootdyfuncdelete_on_exitru  rz  r  r  dyfunc_closuressourcer5  r   module_namer  loaderspecr  callable_funcnew_fns                     r5   ast_to_funcr  F  s   $ $ $  
 
 
 
O 
O 
O ,V44>Oxo.B.B.D.D)E)EFFH))F&((61F~~H#{6""	 	 	A 
  g&&qvcrc{33	              
  , ::::Ik1622F>**6;??D^,,T22F
v v}%% 
*!*		#	# 
	22WWWW
 
 	
 #66*66  F *8F16>s   (AC66C:=C:c                 :    g d} d                     |           dz   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)
)r-  )import_statementss    r5   r  r    s.    	 	 	 99&''$..r7   c                ~   t          | t          j                  r| j        } t	          j        |           s9t	          j        |           s%t          dt          |           j	         d          t	          j
        |           \  }}d |D             }d                    |          }|rt          j        |          }|S )z=
    Transforms function into raw string of source code.
    zDThe type of 'function' should be a function or method, but received r  c                d    g | ]-}|                                                     d           s|nd.S )#r  )lstripr"  )r   lines     r5   r   z'func_to_source_code.<locals>.<listcomp>  sG        KKMM,,S11;t  r7    )r1   r  r  r   ri   rl   rj   r  ru   rB   getsourcelinesr-  textwrapdedent)r   r  source_code_listrx  source_codes        r5   func_to_source_coder    s     (I-.. !=x(( 
G,<X,F,F 
mSWX`SaSaSjmmm
 
 	
 "0::a $   ''*++K 3ok22r7   c                Z   t          |           }|t          |          k    r| D ]	}||vr dS 
n{t          | |          D ]j\  }}t          |t          j        j                  st          |t          j        j                  rt          ||          s dS Wt          ||          s dS kdS )aV  
    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   r1   rn   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...uu /	 '*/;N&O&O 	! 	!"Hl(FM$;<< !
fm5A A ! /xFF ! 55! 38\JJ ! 55! 4r7   c                   | |fD ]$}t          |t          j        j                  s dS %| j        }|j        }t          |          }|t          |          k    rdS t          |          D ]A}||         ||         dk     r||         ||         dk     r,||         ||         k    r dS Bt          | j                  }t          |j                  }||k    rdS dS )z;
    Check whether two tensor type spec is compatible.
    FNr   T)	r1   rn   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88 	55	I$KIIC$$$$u9  Q<9Q<!#3#3q>![^a%7%7Q<;q>))55 * hn--I 233KKu4r7   c                H    d } ||           } ||          }||k    rdS dS )z?
    Check whether two non-tensor type spec is compatible.
    c                :    	 t          |           }n	#  d }Y nxY w|S r9   r   )r  hash_vals     r5   
hash_valuez/_compatible_non_tensor_spec.<locals>.hash_value  s-    	$T**HH	HHHs    FTrF   )r  r  r  src_hash_valdesired_hash_vals        r5   r  r    sH    
   :h''L!z,//'''utr7   c                  *    e Zd ZdZd Zd Zd Zd ZdS )GetterSetterHelperzwe 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                4   d |D             }d |D             }t          t          j        d |t                                          | _        | j                                         || _        || _        d t          | j                  D             | _	        d S )Nc              3  "   K   | ]
}|g n|V  d S r9   rF   r   r   s     r5   r   z.GetterSetterHelper.__init__.<locals>.<genexpr>-  s*      AAAIbb1AAAAAAr7   c              3  4   K   | ]}t          |          V  d S r9   r   r  s     r5   r   z.GetterSetterHelper.__init__.<locals>.<genexpr>.  s(      77qZ]]777777r7   c                    | |z  S r9   rF   )r   ys     r5   r   z-GetterSetterHelper.__init__.<locals>.<lambda>0  s
    !a% r7   c                    i | ]\  }}||	S rF   rF   )r   idxr   s      r5   r   z/GetterSetterHelper.__init__.<locals>.<dictcomp>5  s    JJJic4cJJJr7   )
r   r  reducer   _unionsortgettersetter	enumeratename2id)r;   getter_funcsetter_func
name_lists	name_setss        r5   ra   zGetterSetterHelper.__init__,  s    AAjAAA
77J777	//JLLII
 
 	!!JJ9T[3I3IJJJr7   c                    | j         S r9   )r  r:   s    r5   unionzGetterSetterHelper.union7  s
    {r7   c                     |g }                                  dS |D ]3}| j        v s(J d| d j                                         d            4t           fd|D                       S )NrF   
the name `` not in name union set``.c              3  >   K   | ]}j         |                  V  d S r9   r  )r   nr;   varss     r5   r   z)GetterSetterHelper.get.<locals>.<genexpr>D  s.      ::qT$,q/*::::::r7   )r  r  r  r  )r;   namesr  r  s   `  @r5   r}  zGetterSetterHelper.get:  s    =E{{}}<2 	 	A$$$OQOO8I8I8K8KOOO %$$$ :::::E::::::r7   c                N    |g }|g }                                  }|d S |D ]3}| j        v s(J d| d j                                         d            4t          |          } fd|D             }t	          ||          D ]
\  }}|||<                        |           d S )Nr  r  r  c                *    g | ]}j         |         S rF   r  )r   r  r;   s     r5   r   z*GetterSetterHelper.set.<locals>.<listcomp>S  s    222q4<?222r7   )r  r  r  r   r   r  )r;   r   valuesr  r  indicesr   r   s   `       r5   r  zGetterSetterHelper.setF  s    =E>F{{}}<F 	 	A$$$OQOO8I8I8K8KOOO %$$$ Dzz2222E222(( 	 	DAqDGGDr7   N)rB   rC   rD   __doc__ra   r  r}  r  rF   r7   r5   r  r  %  s]         	K 	K 	K  
; 
; 
;    r7   r  c                >    t          | |          pt                      S r9   )cinn_is_enabledprim_is_enabledbuild_strategybackends     r5   prim_or_cinn_is_enabledr  Y  s    >733H7H7HHr7   c                    |                                 rdS | j        rt          j        d           dS t          j        j                                        rdS dS )NTzpUse `build_strategy.build_cinn_pass = True` to enable CINN is deprecated, please use `backend = 'CINN'` instead.F)r<   build_cinn_passrs   rt   rn   baser   in_cinn_moder	  s     r5   r  r  ]  se     t% ~	
 	
 	
 t{))++ t5r7   c                    t                      sdS t                                          sdS t          ||           sdS dS )NFT)cinn_is_availableENV_ENABLE_CINN_IN_DY2STr}  r  )r  r
  s     r5   infer_use_cinn_backendr  j  sJ     u#'')) u>733 u4r7   c                 P   t          j                    sdS t          j                    sdS t          t           j                                        t           j        j        j                  sdS t          j
                    dk    rdS t           j                                        sdS dS )NFLinuxT)rn   is_compiled_with_cinnis_compiled_with_cudar1   r   _current_expected_place_r  r   	CUDAPlacer0  systemuse_pir_apirF   r7   r5   r  r  t  s    ')) u')) u1133V[5E5O   uG##u'')) u4r7   c                 8    t          j        dg          d         S )NFLAGS_enable_cse_in_dy2strn   	get_flagsrF   r7   r5   cse_is_enabledr!    s!    89::# r7   c                 8    t          j        dg          d         S )N FLAGS_specialize_device_in_dy2str  rF   r7   r5   use_specialized_devicer$    s!    ?@AA* r7   tensorpaddle.Tensorr^   c                   | j                                         sdS | j        t          j        t          j        fvrdS t          | j                  dk    rdS t          | j                  dk    rdS | j        d         dk     rdS dS )NFr   Tr!   
   )placeis_cpu_placer   rn   int32int64r   r   )r%  s    r5   maybe_dynamic_shape_tensorr-    s    <$$&& u|   u
6<At
6<1u|At5r7   c                 8    t          j        dg          d         S )N)FLAGS_parameters_persistent_mode_in_dy2str  rF   r7   r5   %parameters_persistent_mode_is_enabledr0    s!    HIJJ3 r7   c                 N    t          j                    pt          j                    S r9   )r   _is_bwd_prim_enabled_is_fwd_prim_enabledrF   r7   r5   r  r    s    $&&E$*C*E*EEr7   c                f    t          j        |           }|d uo|j                            |          S r9   )ri   r!  rB   r"  )r   module_prefixr&  s      r5   is_api_in_module_helperr6    s1    #AD=AQZ22=AAAr7   c                 8    t          j        dg          d         S )NFLAGS_enable_auto_layout_passr  rF   r7   r5   auto_layout_is_enabledr9    s!    <=>>' r7   c                      fd}t           t          j                  r |            rdS  t          j                                        v r |            rdS dS )zpredict whether a function is a builtin function with name={name}.
    if name == None, then any builtin function will return True
    c                 "    d u p
 j         k    S r9   )rB   )r   r   s   r5   
name_judgezis_builtin.<locals>.name_judge  s    t|4t}44r7   TF)r1   r  BuiltinFunctionTypebuiltins__dict__r  )r   r   r<  s   `` r5   
is_builtinr@    sz    
5 5 5 5 5 5 $122 zz|| t	"))++	+	+

	+tur7   c                 ,     t            fd            }|S )Nc               3     K    sd V  d S   d                     5   t           dd                       5  d V  d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r!   )compose_guards)guard_creatorss   r5   composed_guardz&compose_guards.<locals>.composed_guard  s      	EEEFN1	 	/NN122./11	 	 EEE		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s3   AAAA	AA	AA#&A#r   )rD  rE  s   ` r5   rC  rC    s.        ^ r7   c               #  2  K   t          j                    } t          j                    }t          j        d           	 d V  t          j        |            t          j        |           d S # t          j        |            t          j        |           w xY wr}   )r   r3  r2  _set_prim_all_enabled_set_prim_forward_enabled_set_prim_backward_enabled)
origin_fwd
origin_bwds     r5   
prim_guardrL    s      *,,J*,,Jt$$$4&z222'
33333 	&z222'
3333s   A, ,*Bc              #    K   g }|                                  rB|                    d            |                    d            |                    d             t          |             5  d V  d d d            d S # 1 swxY w Y   d S )Nc                     t                      S r9   )rL  rF   r7   r5   r   zbackend_guard.<locals>.<lambda>  s
    jll r7   c                 L    t           j        j                            dd          S )NFLAGS_prim_enable_dynamicTrn   r  r   
flag_guardrF   r7   r5   r   zbackend_guard.<locals>.<lambda>  s     FK)44+T  r7   c                 L    t           j        j                            dd          S )NFLAGS_use_cinnTrQ  rF   r7   r5   r   zbackend_guard.<locals>.<lambda>  s    FK)445EtLL r7   )r<   r   rC  )r  rD  s     r5   backend_guardrU    s      N 	
22333 	
 	
 	

 	LL	
 	
 	
 
)	(	*	*                   s   ,A>>BBc                N   i }d }t          j        | |          }t          t          ||                    |d<   t          j        | |          }t          t          ||                    |d<   t          j        | |          }t          t          ||                    |d<   |S )Nc                \    t          | t          j                  r| j        nt          j        S r9   )r1   r   Variabler   EMPTY_VAR_NAME)grad_vars    r5   r   z&construct_grad_names.<locals>.<lambda>  s(    h	 233	&% r7   r   paramout)r   _get_grad_varsr   r  )	grad_info_mapx_vars
param_varsout_varsgrad_var_namesrv   x_grad_varsparam_grad_varsout_grad_varss	            r5   construct_grad_namesrf    s    N
 
B
 )-@@Ks2{3344N3-mZHHO"3r?#;#;<<N7+M8DDM R!7!788N5r7   c              #  (  K   	 t          |           t          |          k    sJ d | D             }t          | |          D ]\  }}||_        d V  t          | |          D ]\  }}||_        d S # t          | |          D ]\  }}||_        w xY w)Nc                    g | ]	}|j         
S rF   r   )r   ts     r5   r   z%tensor_name_guard.<locals>.<listcomp>  s    0001000r7   )r   r   r   )tensorsr   origin_namesri  r   s        r5   tensor_name_guardrl    s      7||s5zz))))000007E** 	 	GAtAFF7L11 	 	GAtAFF	 	s7L11 	 	GAtAFF	s   AA2 2Bc                z   t          j                    rt          j                    }t	                      }t          |           D ]v}t          |t          j        j	                  rS|j
        rL|j                            |          r2|                    |d          }d|_
        |                    |           ud S d S r}   )rn   r  r   _current_expected_placer   r   r1   r   eagerTensorr   r)  _equals_copy_to_share_buffer_to)inputsexpected_placecuda_pinned_placerF  r   s        r5   *cuda_pinned_tensors_move_to_excepted_placerw    s    #%% ,":<<+--V__ 	, 	,E5$*"344,', K''(9::,
 nn^T::$(!$$U+++, ,	, 	,r7   r   objectr   str
new_methodCallable[..., Any]c                n    dd} ||           t                               | |           fd}|S )Nr   rx  r   ry  c                    t          | |          sdS t          | |          }t          j        |          s|S t          | j        |          s|S |j        t          | j        |          ur|S dS )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   ri   rj   r   rk   r   r   original_methods      r5   get_original_methodz)patch_method.<locals>.get_original_method!  s     x&& 	4!(D1100 	#""x)400 	#""#783Et+L+LLL #"tr7   c                ~    t                               |            d S t                               |            d S r9   )rx  __delattr____setattr__r~  s    r5   restorerzpatch_method.<locals>.restorer>  sC    "x.....x?????r7   )r   rx  r   ry  )rx  r  )r   r   rz  r  r  r  s    `   @r5   patch_methodr     so       4 *)(D99O
xz222@ @ @ @ @ @ Or7   c              #  l   K   t          | ||          }	 d V   ||            d S #  ||            w xY wr9   )r  )r   r   rz  r  s       r5   patch_method_guardr  G  sS       HdJ77Hs   & 3tuple[int, ...]c                \   t          | t          j                  s$t          dt	          |           j                   t          | t                    sdS t          | t                    }t          |t                    s,t          dt           dt	          |          j                   |S )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 )
r1   rn   rp  r  ru   rB   r~   DYNAMIC_DIMS_ATTR_NAMEr   r  )r%  dynamic_dimss     r5   extract_tensor_dynamic_dimsr  R  s     ffm,, 
Hf1FHH
 
 	
 6122 r6#9::LlE** 
e.ee\HZHZHcee
 
 	
 r7   c                  0    e Zd ZU ded<   d Zd	dZd
dZdS )GraphTracingContextz6tuple[list[paddle.Tensor], list[paddle.Tensor]] | Noneparams_with_valuesc                    d | _         d S r9   r  r:   s    r5   ra   zGraphTracingContext.__init__l  s    "&r7   /tuple[list[paddle.Tensor], list[paddle.Tensor]]c                    || _         d S r9   r  )r;   r  s     r5   set_params_with_valuesz*GraphTracingContext.set_params_with_valueso  s     #5r7   r<  c                "    | j         J | j         S r9   r  r:   s    r5   get_params_with_valuesz*GraphTracingContext.get_params_with_valuesu  s     &222&&r7   N)r  r  )r<  r  )rB   rC   rD   __annotations__ra   r  r  rF   r7   r5   r  r  i  sY         NNNN' ' '5 5 5 5' ' ' ' ' 'r7   r  r   paddle.static.Programc              #  b  K   t                      }t          d          5  t          t                    5  |V  ddlm}m} |                    |                    |                      |                    |            d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NT)is_to_staticrI   )_global_inplace_map_global_parameter_recorder)	r  r   r   r   dy2static.parameter_recorderr  r  r  pop)r   rB  r  r  s       r5   graph_tracing_guardr  |  sV     


C$///. . !455. . 				
 	
 	
 	
 	
 	
 	
 	

 	""#=#A#A,#O#OPPP---. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .s5   B$A
B B$B	B$B	B$$B(+B()r   )rU   ru   )r   r   r   r   r9   r   )r8  r9  r:  r;  r<  r9  )r   r   r<  ri  )r%  r&  r<  r^   )r   rx  r   ry  rz  r{  )r%  r&  r<  r  )r   r  )
__future__r   r  r>  r   r  importlib.utilr  ri   r+  r0  rq  r/  r  r  r   r  rs   abcr   
contextlibr   r   r   enumr	   r
   r   r   importlib.machineryr   typingr   r   numpyr  rn   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__r#  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+   rH   rP   r   r   r   r   r$  r   r   r   r   r   r   r   r   r   r   r   r  r  r(  r7  rh  rn  r  r  r  r  r  r  r  r  r  r  r  r!  r$  r-  r0  r  r6  r9  r@  rC  rL  rU  rf  rl  rw  r  r  r  r  r  rF   r7   r5   <module>r     s   # " " " " "                				   



            % % % % % % , , , , , , , , * * * * * * * * * * * * 0 0 0 0 0 0 % % % % % % % %      > > > > > > > > > > > > 1 1 1 1 1 1      1 0 0 0 0 0 G G G G G G , , , , , , ' ' ' ' ' ' I I I I I I I I & & & & & & & &       
 * ) ) ) ) ) )((((((
 !  B	  3 &  	LL$L'L#	  101BAFF ++,>EE55D   . # # # # #d # # #:    W   =& =& =& =& =& =& =& =&@0 0 0 0 0 0 0 0*( ( ( (V  
 
 
 
 
 
 
 
" " " " "i " " "
  % % %(    ; ; ;7 7 7   K K K   % % % %V II % % %! ! ! !H   \Q \Q \Q \Q~% % % %e e e eP/ / /   2  >  8  *1 1 1 1 1 1 1 1hI I I
 
 
            "  F F FB B B
         4 4 4   "    	 	 	, , , $ $ $ $N       .' ' ' ' ' ' ' '& . . . . . .r7   