
    ϑi/                       S SK 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
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Jr  \(       a  S S
KJr  \" SSS9r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r  " S S\ 5      r! " S S\ 5      r" " S S\ 5      r# " S S \ 5      r$ " S! S"\ 5      r% " S# S$5      r& " S% S&\S'9r'g)(    )annotationsN)TYPE_CHECKINGAnyCallableTypeVar)WeakValueDictionary)%parameters_persistent_mode_is_enabled)
OrderedSet)flattenmap_structure   )
InnerErrorNameGenerator	Singletonflatten_extendget_api_fullname)AbstractContextManager_StatementContextTStatementContext)boundc                  ,    \ rS rSrS rS rS rS rSrg)ParametersHolder*   c                z    [         [        [        R                  R                  R
                  4   " 5       U l        g N)r   strpaddlebase	frameworkEagerParamBase_paramsselfs    d/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/jit/sot/symbolic/statement_ir.py__init__ParametersHolder.__init__+   s+    *&&555
     c                     X R                   U'   g r   r!   r#   nameparams      r$   setParametersHolder.set0   s    "Tr'   c                `    U R                   R                  U5      =nc  [        SU S35      eU$ )NzParameter 'z ' not found in ParametersHolder.)r!   getr   r*   s      r$   r0   ParametersHolder.get3   s=    \\%%d++E4dV#CD  r'   c                X    [        5       nU R                  R                  5       Ul        U$ r   )r   r!   copy)r#   
new_holders     r$   r3   ParametersHolder.copy:   s%    %'
!\\..0
r'   r)   N)	__name__
__module____qualname____firstlineno__r%   r-   r0   r3   __static_attributes__ r'   r$   r   r   *   s    
#r'   r   c                       \ rS rSrS rS rSrg)	Reference@   c                ^    X l         USL a  [        R                  " U5      U l        g Xl        g NT)is_weakweakrefref)r#   valuerA   s      r$   r%   Reference.__init__A   s#    d?{{5)DHHr'   c                X    U R                   SL a  U R                  5       $ U R                  $ r@   rA   rC   r"   s    r$   __call__Reference.__call__H   s#    <<488:88Or'   rG   N)r6   r7   r8   r9   r%   rH   r:   r;   r'   r$   r=   r=   @   s    r'   r=   c                  D    \ rS rSrSrSS jrS rS rS rS r	SS	 jr
S
rg)SymbolO   z?
Symbol is used to distinguish a string and a `math variable`.
c                    Xl         g r   r+   r#   r+   s     r$   r%   Symbol.__init__T   s    	r'   c                    U R                   $ r   rN   r"   s    r$   __str__Symbol.__str__W   s    yyr'   c                    [        U 5      $ r   )r   r"   s    r$   __repr__Symbol.__repr__Z   s    4yr'   c                |    [        U[        5      (       a  U R                  U:H  $ U R                  UR                  :H  $ r   )
isinstancer   r+   )r#   others     r$   __eq__Symbol.__eq__]   s1    eS!!99%%yyEJJ&&r'   c                ,    [        U R                  5      $ r   )hashr+   r"   s    r$   __hash__Symbol.__hash__b   s    DIIr'   Nc                ,    [        U R                  5      $ r   )rK   r+   )r#   memos     r$   __deepcopy__Symbol.__deepcopy__e   s    dii  r'   rN   r+   r   r   )r6   r7   r8   r9   __doc__r%   rR   rU   rZ   r^   rb   r:   r;   r'   r$   rK   rK   O   s%    '
!r'   rK   c                      \ rS rSrSrg)r   i   r;   N)r6   r7   r8   r9   r:   r;   r'   r$   r   r   i   s    r'   c                  t    \ rS rSr% 0 rS\S'   \    S	S j5       r\  S
S j5       r\    SS j5       r	Sr
g)StatementContextRegistryl   z>dict[type[Any], Callable[[Any], AbstractContextManager[None]]]_ctx_mapc                \    XR                   ;   a  [        SU S35      eX R                   U'   g)z3
Register a context handler for the given context.
Context z is already registered.Nrk   
ValueError)clsctx_clshandlers      r$   register_context_guard/StatementContextRegistry.register_context_guardr   s/     ll"xy0GHII 'Wr'   c                   ^ ^ SU U4S jjnU$ )Nc                ,   > TR                  U T5        U $ r   )rs   )rq   rp   rr   s    r$   	decorator<StatementContextRegistry.register_context.<locals>.decorator   s    &&w8Nr'   )rq   type[_StatementContextT]r;   )rp   rr   rw   s   `` r$   register_context)StatementContextRegistry.register_context   s    
	 	 r'   c                \    XR                   ;  a  [        SU S35      eU R                   U   $ )z0
Get the context handler for the given context.
rm   z is not registered.rn   )rp   rq   s     r$   get_context_guard*StatementContextRegistry.get_context_guard   s2     ,,&xy0CDEE||G$$r'   r;   N)rq   ry   rr   <Callable[[_StatementContextT], AbstractContextManager[None]])rr   r   )rq   ry   returnr   )r6   r7   r8   r9   rk   __annotations__classmethodrs   rz   r}   r:   r;   r'   r$   ri   ri   l   s     	   
 
()
( N
( 
( M  	%)	% 
F	% 	%r'   ri   c                  V    \ rS rSrSr            S	S jrS rS r\S 5       r	Sr
g)
	Statement   z
Statement is used to represent a sentence of code for building the neural network model,
which has four types: "call", "api", "method", and "layer".

Note:
    Statement temporarily does not support control flow.
c                ^    US;   d   eX l         X0l        X@l        XPl        UU l        Xl        g )N)callapimethodlayerAST)r+   inputsoutputscontexts
stmt_stacktype)r#   r   r+   r   r   r   stackss          r$   r%   Statement.__init__   s8     @@@@	  	 	r'   c                    SR                  U R                  SS[        U R                  5      -
  -  -   U R                  U R                  5      U R
                  U R                  U R                  5      5      $ )Nz{} || {} = {} ({})  
   )formatr   len	to_stringr   r+   r   r"   s    r$   rR   Statement.__str__   sZ    $++IIrC		N233NN4<<(IINN4;;'	
 	
r'   c                "    U R                  5       $ r   rR   r"   s    r$   rU   Statement.__repr__       ||~r'   c                D    SR                  S [        U 5       5       5      $ )Nz, c              3  8   #    U  H  n[        U5      v   M     g 7fr   )repr).0xs     r$   	<genexpr>&Statement.to_string.<locals>.<genexpr>   s     8-Qa-s   )joinr   )inpss    r$   r   Statement.to_string   s    yy8'$-888r'   )r   r   r+   r   r   r   N)r   r   r+   r   r   list[Symbol]r   r   r   list[StatementContext]r   	list[str])r6   r7   r8   r9   re   r%   rR   rU   staticmethodr   r:   r;   r'   r$   r   r      sd      	
  ) &
 9 9r'   r   c                  @   ^  \ rS rSr          SU 4S jjrSrU =r$ )CallStatement   c                6   > [         TU ]  SXX4U5        Xl        g )Nr   )superr%   sir_namer#   r+   r   r   r   r   	__class__s         r$   r%   CallStatement.__init__   s     	w&Ir'   )r   
r+   r   r   r   r   r   r   r   r   r   r6   r7   r8   r9   r%   r:   __classcell__r   s   @r$   r   r      s=    		 	 		
 )	 	 	r'   r   c                  @   ^  \ rS rSr          SU 4S jjrSrU =r$ )ApiStatement   c                p   > [        U5      nUc  SUR                  -   n[        TU ]  SXbX4U5        Xl        g )Nzpaddle.r   )r   r6   r   r%   r   )r#   r   r   r   r   r   fullnamer   s          r$   r%   ApiStatement.__init__   s;     $C( 3<</H'VLr'   )r   )
r   r   r   r   r   r   r   r   r   r   r   r   s   @r$   r   r      s=      	
 )  r'   r   c                  @   ^  \ rS rSr          SU 4S jjrSrU =r$ )MethodStatement   c                6   > [         TU ]  SXX4U5        Xl        g )Nr   )r   r%   r   r   s         r$   r%   MethodStatement.__init__   s     	4FKr'   )r   r   r   r   s   @r$   r   r      s=    		 	 		
 )	 	 	r'   r   c                  @   ^  \ rS rSr          SU 4S jjrSrU =r$ )LayerStatement   c                   > [        U[        5      (       a  U" 5       R                  R                  nOUR                  R                  n[        TU ]  SUUUUU5        Xl        g )Nr   )rX   r=   r   r6   r   r%   r   )r#   r   r   r   r   r   r+   r   s          r$   r%   LayerStatement.__init__   sZ     eY''7$$--D??++D	
 
r'   )r   )
r   r=   r   r   r   r   r   r   r   r   r   r   s   @r$   r   r      s=      	
 )  r'   r   c                  <   ^  \ rS rSr        SU 4S jjrSrU =r$ )ASTStatementi  c                  > UR                   n[        T	U ]	  SUR                  R                  UUUU5        [
        R                  R                  R                  U5      n[        USS 5      nUb  [        R                  " Xx5      nXpl        g )Nr   __self__)dygraph_functionr   r%   __code__co_namer   jit	dy2staticconvert_to_staticgetattr	functoolspartialconverted_func)
r#   static_functionr   r   r   r   dygraph_funcr   	func_selfr   s
            r$   r%   ASTStatement.__init__  s     '77!!))	
  --??ML*d;	 &..~IN,r'   )r   )r   r   r   r   r   r   r   r   r   r   s   @r$   r   r     s5    - - 	-
 )- - -r'   r   c                  r    \ rS rSrSrSS jr\S 5       rS rSS jr	S r
S	 rS
 rS rS rS rS rS rSrg)StatementIRi  a  
StatementIR is the carrier that records the code for building the neural network model.It is
a representation of a purely computational structure, and does not care about specific values.
The function converted from StatementIR can ensure that it can be turned into a static state.
In this way, we can reuse the original `to_static` function to realize the execution of the static graph.

Note:
    Don't create by yourself, just use the StatementIRFactory.create()
c                    Xl         / U l        / U l        / U l        / U l        0 U l        [        5       U l        [        5       U l        g r   )	r+   r   paramsr   
statementssymbol_meta_mapr-   param_symbolnon_param_symbolrO   s     r$   r%   StatementIR.__init__*  s?    	$&$&%'+-!E #r'   c                4    U R                   U R                  -   $ r   )r   r   r"   s    r$   input_with_paramsStatementIR.input_with_params5  s    {{T[[((r'   c                ,    [        U R                  5      $ r   )r   r   r"   s    r$   __len__StatementIR.__len__9  s    4??##r'   Nc                   [        U R                  5      n[        U R                  5      Ul        [        U R                  5      Ul        [        U R
                  5      Ul        [        U R                  5      Ul        [        U R                  R                  5       5      Ul        [        U R                  5      Ul        [        U R                  5      Ul        U$ r   )r   r+   listr   r   r   r   dictr   itemsr-   r   r   )r#   ra   new_sirs      r$   rb   StatementIR.__deepcopy__<  s    dii(dkk*dkk*t||,!$//2"&t';';'A'A'C"D"4#4#45#&t'<'<#= r'   c                p    U R                   R                  U5        U R                  R                  U5        g r   )r   updater   )r#   r   
non_paramss      r$   set_parameter_infoStatementIR.set_parameter_infoG  s*      ($$Z0r'   c                F    UR                  U R                  5        Xl        g r   )r   r   )r#   meta_maps     r$   set_symbol_meta_mapStatementIR.set_symbol_meta_mapK  s    ,,-'r'   c                :    U R                   R                  U5        g r   )r   append)r#   inputs     r$   	add_inputStatementIR.add_inputP  s    5!r'   c                :    U R                   R                  U5        g r   )r   r   )r#   outputs     r$   
add_outputStatementIR.add_outputS  s    F#r'   c                h    [        U[        5      (       d   eU R                  R                  U5        g r   )rX   r   r   r   )r#   	statements     r$   add_statementStatementIR.add_statementV  s'    )Y////y)r'   c                P   [        5       n[        5       nU R                   H  n[        UR                  5       H2  n[	        U[
        5      (       d  M  XB;  d  M!  UR                  U5        M4     [        UR                  5       H+  n[	        U[
        5      (       d  M  UR                  U5        M-     M     [        US S9n[        5       (       d  U/ 4$ U Vs/ s H  ofU R                  ;  d  M  UPM     nnU Vs/ s H  ofU R                  ;   d  M  UPM     nnXx4$ s  snf s  snf )Nc                    U R                   $ r   rN   r   s    r$   <lambda>,StatementIR.analyse_inputs.<locals>.<lambda>e  s    !&&r'   )key)r
   r   r   r   rX   rK   addr   sortedr	   r   )	r#   used_symbolsgenerated_symbolsstmtinpoutsymbolinput_symbolsparam_symbolss	            r$   analyse_inputsStatementIR.analyse_inputsZ  s
   !|&LOOD%dkk2c6**s/K $$S) 3 &dll3c6**%))#. 4	 $ l0@A466##!-
!-vt?P?P1PF 	 
 ".
!-v4;L;L1LF 	 
 ++

s   D0D<D#D#c                   / nUR                  SU R                   35        UR                  S[        S U R                  5       35        UR                  S[        S U R                  5       35        UR                  S[        S U R
                  5       35        UR                  S5        U R                   H  nUR                  S	U 35        M     S
R                  U5      $ )NzStatementIR: z
  inputs: c                    U R                   $ r   rN   r  s    r$   r	  %StatementIR.__str__.<locals>.<lambda>s      r'   z
  params: c                    U R                   $ r   rN   r  s    r$   r	  r  t  r  r'   z  outputs: c                    U R                   $ r   rN   r  s    r$   r	  r  v  s    !&&r'   z  statements: z    
)r   r+   r   r   r   r   r   r   )r#   strsr  s      r$   rR   StatementIR.__str__p  s    mDII;/0j/?!M NOPj/?!M NOP-(8$,,GHI	
 	$%OODKK$tf& $yyr'   c                "    U R                  5       $ r   r   r"   s    r$   rU   StatementIR.__repr__}  r   r'   )r   r+   r   r   r   r   r   r   rd   r   )r6   r7   r8   r9   re   r%   propertyr   r   rb   r   r   r   r   r  r  rR   rU   r:   r;   r'   r$   r   r     sR    	& ) )$	1(
"$*,,r'   r   c                  :    \ rS rSrSrS rS rS
S jrS rS r	S	r
g)StatementIRFactoryi  z%
It is used to create a StatementIR.
c                2    0 U l         [        S5      U l        g )NSIR_)cacher   name_generatorr"   s    r$   r%   StatementIRFactory.__init__  s    
+F3r'   c                     U R                   U   $ r   )r(  )r#   r  s     r$   __getitem__StatementIRFactory.__getitem__  s    zz#r'   Nc                    U(       a  UnOU R                   R                  5       n[        U5      nX0R                  U'   U$ r   )r)  nextr   r(  )r#   
input_namer+   sirs       r$   createStatementIRFactory.create  s9    D&&++-D$

4
r'   c                8    UR                   nXR                  U'   g r   )r+   r(  )r#   stmt_irr+   s      r$   r   StatementIRFactory.update  s    ||"

4r'   c                    U R                   R                  5        Vs/ s H'  nU R                  R                  U5      (       d  M%  UPM)     nnU H  nU R                   U	 M     g s  snf r   )r(  keysr)  
match_name)r#   r  
want_clears      r$   clearStatementIRFactory.clear  s_     zz(
(""--c2 ( 	 

 C

3 
s   $A$A$)r(  r)  r   )r6   r7   r8   r9   re   r%   r,  r2  r   r;  r:   r;   r'   r$   r%  r%    s     4# r'   r%  )	metaclass)(
__future__r   r   rB   typingr   r   r   r   r   r   paddle.jit.dy2static.utilsr	   paddle.jit.utilsr
   paddle.utilsr   r   utilsr   r   r   r   r   
contextlibr   r   r   r=   rK   r   ri   r   r   r   r   r   r   r   r%  r;   r'   r$   <module>rE     s    #   8 8 '  L ' /  1 19KL  , ! !4  (% (%V)9 )9X
I 
9  
i 
Y 0-9 -4_ _D! 9 ! r'   