
    ϑi                        S SK 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JrJr  SS	KJrJrJrJr  \(       a  SS
KJr  SSKJrJr      SS jrS rS rS r " S S5      r      SS jr    SS jrSS jrg)    )annotations)TYPE_CHECKINGN)compose_guards)to_sequence   )
InnerErrorlog_domap_ifmap_if_extend   )ParametersHolderStatementContextStatementContextRegistrySymbol)StatementIRBuilder)	StatementStatementIRc                ,   ^ [        U S U4S jS S9n U $ )a,  
Replaces Symbol objects with their corresponding values.

Args:
    values: A list of values that may contain Symbol objects.
    state: A dict mapping Symbol names to their corresponding values.

Returns:
    A new list with Symbol objects replaced by their corresponding values in the state dict.
c                "    [        U [        5      $ N
isinstancer   xs    c/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/jit/sot/symbolic/interpreter.py<lambda> replace_symbol.<locals>.<lambda>9   s    z!V,    c                "   > TU R                      $ r   name)r   states    r   r   r   :   s    %-r   c                    U $ r    r   s    r   r   r   ;   s    1r   predtrue_fnfalse_fn)r   )valuesr"   s    `r   replace_symbolr*   )   s"     ,'	F Mr   c                4    [        X5       H	  nX#l        M     g r   )for_each_ops_between	callstack)startendstackops       r   _append_opstack_betweenr2   @   s    "5. /r   c              #     #    [         R                  R                  5       nUR                  5       R                  X nU S h  vN   g  N7fr   )paddlestaticdefault_main_programglobal_blockops)r.   r/   programr8   s       r   r,   r,   F   s7     mm002G



 
$
$U
/CNNs   A A
AA
c                     [         R                  R                  5       n [        U R	                  5       R
                  5      $ r   )r4   r5   r6   lenr7   r8   )r9   s    r   opnum_in_programr<   M   s.    mm002Gw##%))**r   c                  N    \ rS rSrSrSS jrSS jrSS jrS rS r	S r
S	 rS
rg)InterpreterR   z3
Interpreter is used to interpret and execute SIR.
c                    Xl         g r   _builder)selfbuilders     r   __init__Interpreter.__init__W   s    r   c                8    U R                   R                  U5      $ )z
Returns the StatementIR object by given name.

Args:
    name: The name of the StatementIR.

Returns:
    The StatementIR object with the given name.
)rB   get_sir)rC   r!   s     r   rH   Interpreter.get_sirZ   s     }}$$T**r   c           	     F  ^^^^ U4S jmU R                  U5      nUR                   H  m[        5       m[        TR                  T5      n[        TR                  5      " 5          [        U TR                  5      " TU5      nSSS5        [        [        W5      5      [        [        TR                  5      5      :w  a  [        S5      e[        SUU4S j5        [        UTR                  S U4S jS S	9  M     [        UR                  T5      $ ! , (       d  f       N= f)
a  
Runs the StatementIR with the given name using the provided state.

Args:
    name: The name of the given StatementIR to run.
    state: A dict mapping Symbol names to their corresponding values.

Returns:
    A list of the Symbol of the StatementIR after execution.
c                $   > U TUR                   '   g r   r    )vsr"   s     r   _set!Interpreter.run_sir.<locals>._setr   s    E!&&Mr   Nz*Number output mismatch, some error happen.   c                 H   > [        T [        5       S-   TR                  5      $ )Nr   )r2   r<   
stmt_stack)before_stmt_opnumstmts   r   r   %Interpreter.run_sir.<locals>.<lambda>   s    /%'7'9A'=tr   c                "    [        U[        5      $ r   r   rL   rM   s     r   r   rU      s    *Q"7r   c                   > T" X5      $ r   r$   )rL   rM   rN   s     r   r   rU      s	    T!Zr   c                    g r   r$   rW   s     r   r   rU      s    dr   r%   )rH   
statementsr<   r*   inputscreate_context_guardcontextsgetattrtyper;   r   outputsr   r	   r
   )	rC   r!   r"   SIRr[   outsrN   rS   rT   s	     `   @@@r   run_sirInterpreter.run_sirf   s    	 ll4 NND 0 2#DKK7F%dmm46tTYY/f= 7 ;t$%[-F)GG !MNN 7/*% #4 ckk511+ 76s   %D
D 	c                .    Uu  p4UR                   " U0 UD6$ r   )apirC   rT   r[   argskwargss        r   rf   Interpreter.api   s    xx(((r   c                P    Uu  p4US   n[        XQR                  5      " USS  0 UD6$ )Nr   r   )r^   method)rC   rT   r[   rh   ri   vars         r   rl   Interpreter.method   s1    1gsKK($qr(=f==r   c                N    Uu  p4UR                  5       nUc   S5       eU" U0 UD6$ )NzSIR bound layer is None.)layer)rC   rT   r[   rh   ri   rp   s         r   rp   Interpreter.layer   s6    

 <"<< d%f%%r   c                .    Uu  p4UR                   " U0 UD6$ r   )converted_funcrg   s        r   ASTInterpreter.AST   s    ""D3F33r   rA   N)rD   r   )r!   strreturnr   )r!   rv   r"   dict[str, Symbol])__name__
__module____qualname____firstlineno____doc__rE   rH   rc   rf   rl   rp   rt   __static_attributes__r$   r   r   r>   r>   R   s+     
+*2X)>
&4r   r>   c                V   ^ ^^ [         R                  R                  U UU4S j5       nU$ )zv
Compile a SIR to a new function

Args:
    context: The context to compile
    name: The name of the sir to compile

c                x   > [        T5      nUR                  T5      n[        X T5      nUR                  TU5      $ )zc
This function will be decorated by paddle.to_static.
so the args is variables, not eager tensors.
)r>   rH   prepare_staterc   )rh   interpreterra   r"   rD   r!   parameters_holders       r   wrappercompile_sir.<locals>.wrapper   s?     "'*!!$'c):;""4//r   )r4   jitnot_to_static)rD   r!   r   r   s   ``` r   compile_sirr      s(     ZZ0 0 Nr   c                   0 n[        U R                  5      [        U5      :X  d   S5       e[        U R                  U5       H  u  pEXSUR                  '   M     U R                   H[  n[
        R                  R                  R                  R                  UR                  UR                  5      5      X6R                  '   M]     U$ )NzInputs length mismatch.)
r;   r[   zipr!   paramsr4   basedygraph_convert_into_variableget)ra   r[   r   r"   sir_inpinp	sir_params          r   r   r      s     Eszz?c&k)D+DD)CJJ/!gll 0 ZZ	 & 3 3 8 8 O O!!)..1!
nn  
 Lr   c                >    [        [        S U 5      5      n[        U6 $ )Nc                   ^  U 4S j$ )Nc                 N   > [         R                  " [        T 5      5      " T 5      $ r   )r   get_context_guardr_   ctxs   r   r   8create_context_guard.<locals>.<lambda>.<locals>.<lambda>   s    0BB49Mr   r$   r   s   `r   r   &create_context_guard.<locals>.<lambda>   s    r   )listmapr   )r]   guardss     r   r\   r\      s+    
 	
	F 6""r   )r)   zlist[Symbol] | list[object]r"   rx   )rD   r   r!   rv   r   r   )ra   r   r   r   )r]   zlist[StatementContext])
__future__r   typingr   r4   paddle.jit.dy2static.utilsr   paddle.utilsr   utilsr   r	   r
   r   statement_irr   r   r   r   rD   r   r   r   r*   r2   r,   r<   r>   r   r   r\   r$   r   r   <module>r      s    #    5 $   +4'0A.+
Q4 Q4h'*?O4	1A"#r   