
    ^jl                       U d 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mZm	Z	 ddlm
Z
mZ ddlmZmZ ddlZddlmZ ddlmZ ddlmZ d	d
lmZm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# d	dl$m%Z%m&Z& ddl'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3 erddl4m5Z5 ddl6m7Z7  ejp                  e9      Z: G d de(      Z; G d de3      Z< G d de<      Z= G d de<      Z> G d de;      Z? G d  d!e;      Z@ G d" d#e;      ZA G d$ d%e;      ZB G d& d'e;      ZC G d( d)e;      ZD G d* d+e;      ZE G d, d-e;      ZF G d. d/e;      ZG G d0 d1e;      ZH G d2 d3e;      ZI G d4 d5eI      ZJ G d6 d7eI      ZK G d8 d9eI      ZLej                  j                  eJej                  j                  eKej                  j                  eLiZReSeTeTeI   f   eUd:<   d;eTd<eTeI   d=dfd>ZVd;eTd=eTeI   dz  fd?ZW G d@ dAe;      ZX G dB dCe;      ZY G dD dEe;      ZZ G dF dGe;      Z[ G dH dIe;      Z\ G dJ dKe;      Z] G dL dMe;      Z^ G dN dOe;      Z_ G dP dQe;      Z` G dR dSe;      Za G dT dUe;      Zb G dV dWe;      Zc G dX dYe;      Zd G dZ d[e(      Ze G d\ d]e(      Zfy)^a)  
This file contains a collection of context manager classes used by Dynamo for tracking
and managing various PyTorch runtime states during graph compilation. These context
managers handle different aspects of PyTorch's execution environment, including:

- Autograd states (grad mode, inference mode)
- CUDA streams and events
- Profiling contexts
- Deterministic algorithms
- Forward/backward AD modes
- SDPA (Scaled Dot Product Attention) kernels
- FSDP (Fully Sharded Data Parallel) states
- AMP (Automatic Mixed Precision) autocast states

The context managers ensure proper state transitions during graph compilation by
tracking enter/exit points and managing cleanup operations. They help maintain
consistency between eager execution and compiled graph behavior by capturing and
restoring state changes.
    N)CallableSequenceSized)AbstractContextManager	ExitStack)AnyTYPE_CHECKING)config)Guard)warning_once   )graph_break_hints	variables)create_call_function)unimplemented)GuardBuilderinstall_guard)
AttrSourceGlobalStateSource)_get_error_on_graph_break_set_error_on_graph_break   )VariableTracker)NestedUserFunctionVariableSkipFunctionVariableUserFunctionVariableUserMethodVariable!WrappedNestedUserFunctionVariableWrappedSkipFunctionVariableWrappedUserFunctionVariableWrappedUserMethodVariable)UserDefinedObjectVariable)	PyCodegen)InstructionTranslatorBasec            	       :    e Zd Zddddhej                  Z	 ddededz  deddf fdZd	d
dededefdZd	d
defdZ		 dd	d
de
def   dz  ddfdZd	d
dedefdZddZddZdefdZdefdZd	d
dee   deeef   defdZdefdZdefdZddZddZ xZS ) ContextWrappingVariablecm_objtarget_valuesinitial_valuesstateNkwargsreturnc                 @    t        |   di | || _        || _        y N )super__init__r(   r)   selfr(   r)   r+   	__class__s       n/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_dynamo/variables/ctx_manager.pyr1   z ContextWrappingVariable.__init__G   s%     	"6"*,    txr$   otheropc                 $    ddl m}  || |||      S Nr   )object_richcompareobject_protocolr<   r3   r7   r8   r9   r<   s        r5   richcompare_implz(ContextWrappingVariable.richcompare_implN        	8!$E266r6   c                     t        | d      r| j                  || j                         | j                  |       t        j
                  j                  d       S N
_call_func)hasattrrD   r(   set_cleanup_hookr   ConstantVariablecreater3   r7   s     r5   enterzContextWrappingVariable.enterU   sE    4&OOB 2 23b!))0066r6   fn.c                 r     |d fd}| _         j                  j                   j                         y )Nc                  X    t         d      r j                   j                         y y rC   )rE   rD   r)   rI   s   r5   rK   z4ContextWrappingVariable.set_cleanup_hook.<locals>.fn`   s&    4.OOB(;(;< /r6   r,   N
cleanup_fnoutputadd_cleanup_hookcleanupr3   r7   rK   s   `` r5   rF   z(ContextWrappingVariable.set_cleanup_hook[   s.     := 68
		""4<<0r6   argsc                 `    | j                          t        j                  j                  d       S N)cleanup_assertr   rG   rH   r3   r7   rU   s      r5   exitzContextWrappingVariable.exitg   s'     	))0066r6   c                      |t        |j                  j                  | j                               | j	                                      y rW   )r   r7   import_sourcemodule_namefn_namer3   codegens     r5   reconstruct_typez(ContextWrappingVariable.reconstruct_typem   s2    wzz//0@0@0BCT\\^T	
r6   c                      j                   fd        j                  }|sd}j                  |D cg c]  }j                  |       c}       j                  t	        t        |      d             y c c}w )Nc                  &    j                         S rW   )ra   )r`   r3   s   r5   <lambda>z5ContextWrappingVariable.reconstruct.<locals>.<lambda>s   s    d&;&;G&D r6   r/   F)add_push_nullr(   extend_outputcreate_load_constr   len)r3   r`   r(   vals   ``  r5   reconstructz#ContextWrappingVariable.reconstructr   sj    DE**MW#w88=WX23}3EuMN Xs   A;c                     t        d      )Nzmodule_name called on baseNotImplementedErrorr3   s    r5   r]   z#ContextWrappingVariable.module_namez   s    !">??r6   c                     t        d      )Nzfn_name called on baserl   rn   s    r5   r^   zContextWrappingVariable.fn_name}   s    !":;;r6   c                    t        |      dk7  rt        dt        |             t        |d   t        t        t
        t        f      st        dt        |d                t        |d   t              rt        |d   |       S t        |d   t              rt        |d   |       S t        |d   t
              rt        |d   |       S t        |d   t              rt        |d   |       S t        d      )Nr   zexpected exactly 1 arg, got r   z"expected a function variable, got zUnexpected arg type)rh   AssertionError
isinstancer   r   r   r   typer   r   r!   r    r3   r7   rU   r+   s       r5   call_functionz%ContextWrappingVariable.call_function   s     t9> #?D	{!KLLG*$"$	
 !#Ed4PQ7m_!UVVd1g9:4T!WdCCQ!56.tAw==Q!34,T!Wd;;Q!56.tAw== !677r6   c                      yNTr/   rn   s    r5   supports_graph_breaksz-ContextWrappingVariable.supports_graph_breaks       r6   c                      yrw   r/   rn   s    r5   exit_on_graph_breakz+ContextWrappingVariable.exit_on_graph_break   ry   r6   c                 L    | j                   | j                          d | _         y y rW   )rP   rn   s    r5   rS   zContextWrappingVariable.cleanup   s"    ??&OO"DO 'r6   c                 R    | j                   st        d      | j                          y )Nzmultiple exits?)rP   rq   rS   rn   s    r5   rX   z&ContextWrappingVariable.cleanup_assert   s     !233r6   rW   r`   r#   r,   NrN   )__name__
__module____qualname__r   _nonvar_fieldsr   r1   strr@   rJ   r   rF   rZ   ra   rj   r]   r^   listdictru   boolrx   r{   rS   rX   __classcell__r4   s   @r5   r&   r&   >   s_   	
 
	'	'N @D- -25*-OR-	-7-76E7KN7	773 7 7 PT
1-
13;CH3E3L
1	
17-76E7	7

O@S @< <8'8 ?#8 S/)*	8
 
8<t T #
r6   r&   c                        e Zd Zdee   deddf fdZdefdZdefdZdd	de	fd
Z
dd	de	de	fdZdefdZdefdZ xZS )GenericContextWrappingVariabler'   r+   r,   Nc                 f    |t        d      t        |   d||j                  d| || _        y )Nzcm_obj must not be None)value
value_typer/   )rq   r0   r1   r4   r'   )r3   r'   r+   r4   s      r5   r1   z'GenericContextWrappingVariable.__init__   sE    > !:;; 	
''	
 	

 r6   c                 .    | j                   j                  S rW   )r'   r   rn   s    r5   r]   z*GenericContextWrappingVariable.module_name   s    {{%%%r6   c                 @    t        | j                        j                  S rW   )rs   r'   r   rn   s    r5   r^   z&GenericContextWrappingVariable.fn_name   s    DKK )))r6   r7   r$   c                     | j                   d nt        | j                   d      }t        j                  | j                  j
                  j                  | |      j                  |g i       S )N	__enter__source)r   r   r   r   r'   r   __func__ru   )r3   r7   r   s      r5   rJ   z$GenericContextWrappingVariable.enter   sY    ,*T[[+2V++KK!!**
 -B
#		$r6   rU   c                 "   | j                   d nt        | j                   d      }t        j                  | j                  j
                  j                  | |      j                  |t        |      i       }|j                  j                          |S )N__exit__r   )r   r   r   r   r'   r   r   ru   r   active_generic_context_managerspop)r3   r7   rU   r   xs        r5   rZ   z#GenericContextWrappingVariable.exit   sx     ,*T[[*2U((KK  ))
 -DJ
+	 	

 	**..0r6   c                      yNFr/   rn   s    r5   rx   z4GenericContextWrappingVariable.supports_graph_breaks   s    r6   c                      yrw   r/   rn   s    r5   r{   z2GenericContextWrappingVariable.exit_on_graph_break   ry   r6   )r   r   r   r   r   r1   r   r]   r^   r   rJ   rZ   r   rx   r{   r   r   s   @r5   r   r      s    5c: c d &S &* *$3 $ $
-
6E
	
t T r6   r   c                   `     e Zd Zdej                  j
                  deddf fdZd Zd Z	 xZ
S )RecordFunctionVariabler'   r+   r,   Nc                 v   t        |   |fi | t        j                  j	                  |j
                        g}i }|j                  r,t        j                  j	                  |j                        |d<   t        j                  j                  j	                  t        | j                        ||      | _        y )NrU   )funcrecord_argsrecord_kwargs)r0   r1   r   rG   rH   namerU   torch%ProfilerRecordFunctionContextVariablers   r'   	record_fn)r3   r'   r+   rU   r   r4   s        r5   r1   zRecordFunctionVariable.__init__   s    *6***11&++>?;;$-$>$>$E$Efkk$RM&!"NNUUdkk"M V 
r6   c                 n    |j                   j                  |        | j                  j                  |      S rW   )r   appendr   rJ   rI   s     r5   rJ   zRecordFunctionVariable.enter   s+    
**11$7~~##B''r6   c                 p    |j                   j                           | j                  j                  |g| S rW   )r   r   r   rZ   rY   s      r5   rZ   zRecordFunctionVariable.exit   s0    
**..0"t~~""2---r6   )r   r   r   r   profilerrecord_functionr   r1   rJ   rZ   r   r   s   @r5   r   r      s2    
u~~== 
 
QU 
(.r6   r   c                   T    e Zd ZdededdfdZdddefdZddd	edefd
Zde	defdZ
y)$RepararametrizeModuleContextVariablectx_manager_vtmodr,   Nc                      || _         || _        y rW   )cm_vtr   )r3   r   r   s      r5   r1   z-RepararametrizeModuleContextVariable.__init__   s    #
r6   r7   r$   c                 B   t         j                  j                  j                  j	                  |      5  | j
                  j                  |d      j                         | _        | j
                  j                  |d      j                         | _	        |j                  j                  j                  | j                         |j                  j                  j                  | j                         | j                  j                  |      cd d d        S # 1 sw Y   y xY w)N_parameters_buffers)r   _dynamor   higher_order_ops dynamo_allow_side_effects_in_hopr   var_getattrrealizeold_parameters_varold_buffer_varrQ   side_effectsignore_mutations_onr   rJ   rI   s     r5   rJ   z*RepararametrizeModuleContextVariable.enter   s     ]]$$55VV
 	( '+hh&:&:2}&M&U&U&WD#"&(("6"6r:"F"N"N"PDII""66t7N7NOII""66t7J7JK::##B'	( 	( 	(s   CDDrU   c                    t         j                  j                  j                  j	                  |      5   | j
                  j                  |g| }|j                  j                  j                  | j                         |j                  j                  j                  | j                         |cd d d        S # 1 sw Y   y xY wrW   )r   r   r   r   r   r   rZ   rQ   r   stop_ignoring_mutations_onr   r   )r3   r7   rU   r   s       r5   rZ   z)RepararametrizeModuleContextVariable.exit  s    
 ]]$$55VV
 	  

*T*AII""==d>Q>QRII""==d>U>UV	 	 	s   A=B;;Cr   c                 .    t        | j                  |      S rW   )getattrr   )r3   r   s     r5   __getattr__z0RepararametrizeModuleContextVariable.__getattr__  s    tzz4((r6   )r   r   r   r&   r   r1   r   rJ   rZ   r   r   r/   r6   r5   r   r      sa    '> S T 

(3 
( 
(-6E	) ) )r6   r   c            	       V    e Zd ZdZedddededd fd       ZdddefdZddd	edefd
Z	y))GradInplaceRequiresGradCtxManagerVariablez#represents torch grad requires gradr7   r$   r(   r+   r,   c                     t        d|d d|S Nr(   r)   r/   )r   r7   r(   r+   s      r5   rH   z0GradInplaceRequiresGradCtxManagerVariable.create  s&     9 
'
 
 	
r6   c                      j                   \  }t        j                  j                  j	                          _        t        j                  j                  j                  |        j                  | fd       |j                  j                  dt        j                  j                  j                  |fi        _
        t        j                  j                  d       S )Nc                  j    t         j                  j                  j                   j                        S rW   )r   _C
_functorch!set_inplace_requires_grad_allowed
prev_statern   s   r5   rd   zAGradInplaceRequiresGradCtxManagerVariable.enter.<locals>.<lambda>)  s#    EHH''II r6   ru   )r(   r   r   r   !get_inplace_requires_grad_allowedr   r   rF   rQ   create_nodeproxyr   rG   rH   )r3   r7   enableds   `  r5   rJ   z/GradInplaceRequiresGradCtxManagerVariable.enter#  s    &&	((--OOQ==gF	
 YY**HHAAJ	

 ))0066r6   rU   c                     | j                          |j                  j                  dt        j                  j
                  j                  | j                  fi        t        j                  j                  d       S Nru   )rS   rQ   r   r   r   r   r   r   r   rG   rH   rY   s      r5   rZ   z.GradInplaceRequiresGradCtxManagerVariable.exit5  s[     	
		HHAA__		
 ))0066r6   N
r   r   r   __doc__staticmethodr   rH   r   rJ   rZ   r/   r6   r5   r   r     sh    -
'
8;
GJ
	4
 
73 7 7$
7-
76E
7	
7r6   r   c            	       V    e Zd ZdZedddededd fd       ZdddefdZddd	edefd
Z	y)0TemporarilyPopInterpreterStackCtxManagerVariablezJrepresents torch._functorch.pyfunction.temporarily_pop_interpreter_stack()r7   r$   r(   r+   r,   c                     t        d|d d|S r   )r   r   s      r5   rH   z7TemporarilyPopInterpreterStackCtxManagerVariable.createE  s'     @ 
'
 
 	
r6   c                 P    t         j                  j                  j                          _         j                  | fd       |j                  j                  dt         j                  j                  j                  di        _        t        j                  j                  d       S )Nc                  j    t         j                  j                  j                   j                        S rW   )r   r   r   push_dynamic_layer_stacksavedrn   s   r5   rd   zHTemporarilyPopInterpreterStackCtxManagerVariable.enter.<locals>.<lambda>S  s     EHH''@@L r6   ru   r/   )r   r   r   pop_dynamic_layer_stackr   rF   rQ   r   r   r   rG   rH   rI   s   ` r5   rJ   z6TemporarilyPopInterpreterStackCtxManagerVariable.enterO  s~    XX((@@B
L	
 YY**HH77	

 ))0066r6   rU   c                     | j                          |j                  j                  dt        j                  j
                  j                  | j                  fi        t        j                  j                  d       S r   )rS   rQ   r   r   r   r   r   r   r   rG   rH   rY   s      r5   rZ   z5TemporarilyPopInterpreterStackCtxManagerVariable.exit]  sZ     	
		HH88ZZM		
 ))0066r6   Nr   r/   r6   r5   r   r   B  sh    T
'
8;
GJ
	;
 
73 7 7
7-
76E
7	
7r6   r   c                       e Zd ZdZ e e       ej                        Ze	ddde
dd fd       ZdddefdZdddedefd	Zy
)%JvpIncrementNestingCtxManagerVariablez5represents torch.func.jvp increment/decrement nestingr7   r$   r+   r,   c                 "    t        dd d d|}|S r   )r   r7   r+   vars      r5   rH   z,JvpIncrementNestingCtxManagerVariable.createt  s*     4 

 

 
r6   c                 l   t        | j                         t        j                  j                  j                         }| j                  |d        |j                  j                  dt        j                  j                  j                  di       | _        t        j                  j                  ||      S )Nc                  R    t         j                  j                  j                         S rW   )r   r   eager_transformsexit_jvp_nestingr/   r6   r5   rd   z=JvpIncrementNestingCtxManagerVariable.enter.<locals>.<lambda>  s    ((99JJL r6   ru   r/   )r   _guards_singletonr   r   r   enter_jvp_nestingrF   rQ   r   predispatch_jvp_increment_nestingr   r   r   build)r3   r7   	jvp_levels      r5   rJ   z+JvpIncrementNestingCtxManagerVariable.enter  s    d,,-$$55GGI	L	
 YY**((??	

 ((..r9==r6   rU   c                     | j                          |j                  j                  dt        j                  j
                  j                  di        t        j                  j                  d       S Nru   r/   )
rS   rQ   r   r   r   r   _jvp_decrement_nestingr   rG   rH   rY   s      r5   rZ   z*JvpIncrementNestingCtxManagerVariable.exit  sU     	
		U--99PPRTVX	
 ))0066r6   Nr   r   r   r   r   r   r   FUNCTORCH_STACK_MATCHr   r   r   rH   r   rJ   rZ   r/   r6   r5   r   r   j  sy    ? /1<3U3UV'36	0 >3 > >7-76E7	7r6   r   c            	       b    e Zd ZdZedddededd fd       ZdddefdZddd	edefd
Z	de
fdZy)SetFwdGradEnabledContextManagerzWrepresents torch.autograd.forward_ad._set_fwd_grad_enabled() to enable/disable fwd gradr7   r$   r(   r+   r,   c                     t        d|d d|S r   )r   r   s      r5   rH   z&SetFwdGradEnabledContextManager.create  s&     / 
'
 
 	
r6   c                      j                   \  }t        j                  j                          _        t        j                  j                  |        j                  | fd       |j                  j                  dt        j                  j
                  |fi        _	        t        j                  j                  d       S )Nc                  V    t         j                  j                   j                        S rW   )r   r   _set_fwd_grad_enabledr   rn   s   r5   rd   z7SetFwdGradEnabledContextManager.enter.<locals>.<lambda>  s    EHH224??C r6   ru   )r(   r   r   _is_fwd_grad_enabledr   r   rF   rQ   r   r   r   rG   rH   )r3   r7   modes   `  r5   rJ   z%SetFwdGradEnabledContextManager.enter  s    ##((779&&t,C	
 YY**HH**G	

 ))0066r6   rU   c                     | j                          |j                  j                  dt        j                  j
                  | j                  fi        t        j                  j                  d       S r   )
rS   rQ   r   r   r   r   r   r   rG   rH   rY   s      r5   rZ   z$SetFwdGradEnabledContextManager.exit  sU     	
		HH**__		
 ))0066r6   c                 J    t         j                  j                  j                  S rW   )r   autograd
forward_adr   rn   s    r5   python_typez+SetFwdGradEnabledContextManager.python_type  s    ~~((>>>r6   N)r   r   r   r   r   r   rH   r   rJ   rZ   rs   r  r/   r6   r5   r   r     st    a
'
8;
GJ
	*
 
73 7 7 
7-
76E
7	
7?T ?r6   r   c                       e Zd ZdZ e e       ej                        Ze	ddde
dd fd       ZdddefdZdddedefd	Zdefd
Zy)DualLevelContextManagerz;Represents torch.autograd.forward_ad.dual_level ctx managerr7   r$   r+   r,   c                     t        dd d d|S r   )r  )r7   r+   s     r5   rH   zDualLevelContextManager.create  s&     ' 

 
 	
r6   c                     t         j                         t        j                  j                  j                          _         j                  | fd       |j                  j                  dt        j                  j                  j                  di        _        t        j                  j!                  | j                        S )Nc                  l    t         j                  j                  j                   j                        S )N)level)r   r   r   exit_dual_level	new_levelrn   s   r5   rd   z/DualLevelContextManager.enter.<locals>.<lambda>  s#    11AAAW r6   ru   r/   )r   r   r   r   r   enter_dual_levelr	  rF   rQ   r   r   r   _enter_dual_levelr   r   r   r   rI   s   ` r5   rJ   zDualLevelContextManager.enter  s    d,,-22CCEW	
 YY**((::	

 ((..r4>>BBr6   rU   c                     | j                          |j                  j                  dt        j                  j
                  j                  dd| j                  i       t        j                  j                  d       S )Nru   r/   r  )rS   rQ   r   r   r   r   _exit_dual_levelr	  r   rG   rH   rY   s      r5   rZ   zDualLevelContextManager.exit  s_     	
		((99dnn%		
 ))0066r6   c                 J    t         j                  j                  j                  S rW   )r   r   r   
dual_levelrn   s    r5   r  z#DualLevelContextManager.python_type  s    ~~((333r6   N)r   r   r   r   r   r   r   
DUAL_LEVELr   r   r   rH   r   rJ   rZ   rs   r  r/   r6   r5   r  r    s    E/1<3J3JK
'
36
	"
 
C3 C C
7-
76E
7	
74T 4r6   r  c                       e Zd ZdZ e e       ej                        Ze	ddde
dd fd       ZdddefdZdddedefd	Zy
)&GradIncrementNestingCtxManagerVariablez6represents torch.func.grad increment/decrement nestingr7   r$   r+   r,   c                 "    t        dd d d|}|S r   )r  r   s      r5   rH   z-GradIncrementNestingCtxManagerVariable.create  s*     5 

 

 
r6   c                 l   t        | j                         t        j                  j                  j                         }| j                  |d        |j                  j                  dt        j                  j                  j
                  di       | _	        t        j                  j                  ||      S )Nc                  R    t         j                  j                  j                         S rW   )r   r   r   _grad_decrement_nestingr/   r6   r5   rd   z>GradIncrementNestingCtxManagerVariable.enter.<locals>.<lambda>	      %((*=*=*U*U*W r6   ru   r/   )r   r   r   r   r   _grad_increment_nestingrF   rQ   r   r   r   r   r   )r3   r7   
grad_levels      r5   rJ   z,GradIncrementNestingCtxManagerVariable.enter  s    d,,-XX((@@B
b"WXYY**HH77	

 ((..r:>>r6   rU   c                     | j                          |j                  j                  dt        j                  j
                  j                  di        t        j                  j                  d       S r   )
rS   rQ   r   r   r   r   r  r   rG   rH   rY   s      r5   rZ   z+GradIncrementNestingCtxManagerVariable.exit  sQ     	
		UXX00HH"b	
 ))0066r6   Nr   r/   r6   r5   r  r    sy    @ /1<3U3UV'36	1 
?3 
? 
?7-76E7	7r6   r  c                        e Zd ZdZedddeeef   dd fd       Z	 	 ddeeef   de	dz  d	e	dz  d
e	ddf
 fdZ
dddefdZddZdefdZ xZS )CatchWarningsCtxManagerVariablez'Delay a call to warnings.catch_warningsr7   r$   catch_warnings_argsr,   c                     t        |d d       S )N)r  r(   r)   )r  )r7   r  s     r5   rH   z&CatchWarningsCtxManagerVariable.create  s     / 3
 	
r6   Nr(   r)   r+   c                 t    t        |t              st        d|       t        |   d||d| || _        y )Nz(catch_warnings_args must be a dict, got r   r/   )rr   r   rq   r0   r1   r  )r3   r  r(   r)   r+   r4   s        r5   r1   z(CatchWarningsCtxManagerVariable.__init__)  sT     -t4 :;N:OP  	 	
'	
JP	
 $7 r6   c                 6   | j                   j                         D ci c]  \  }}||j                          }}}t        j                  di || j                  |fd       t        j                  j                  |j                               S c c}}w )Nc                  *     j                  d d d       S rW   )r   )ctx_vals   r5   rd   z7CatchWarningsCtxManagerVariable.enter.<locals>.<lambda>>  s    '*:*:4t*L r6   r/   )
r  itemsas_python_constantwarningscatch_warningsrF   r   r   r   r   )r3   r7   kvr+   r"  s        @r5   rJ   z%CatchWarningsCtxManagerVariable.enter9  s    262J2J2P2P2R
*.!QAq##%%
 
 ))3F3b"LM((..r73D3D3FGG
s   Bc                    j                  fd       j                  | j                  j                                t	        | j                  j                               }j                  j                  t        |      |d             y )Nc                  (     j                  dd      S )Nr%  r&  )load_import_from)r`   s   r5   rd   z=CatchWarningsCtxManagerVariable.reconstruct.<locals>.<lambda>C  s    G,,Z9IJ r6   F)	re   foreachr  valuestuplekeysrf   create_call_function_kwrh   )r3   r`   r/  s    ` r5   rj   z+CatchWarningsCtxManagerVariable.reconstructA  sk    J	
 	00779:T--2245g==c$iuUVr6   c                 "    t         j                  S rW   )r%  r&  rn   s    r5   r  z+CatchWarningsCtxManagerVariable.python_typeI  s    &&&r6   NNr~   )r   r   r   r   r   r   r   r   rH   r   r1   rJ   rj   rs   r  r   r   s   @r5   r  r    s    1
'
>B3CW>X
	*
 
 %)%)	7!#"677 Tz7 d
	7
 7 
7 H3 H HW'T 'r6   r  c            	           e Zd ZdZ e e       ej                        Ze	ddde
e   dedd fd       ZdddefdZddd	edefd
Zy)&VmapIncrementNestingCtxManagerVariablez1represents torch VMap increment/decrement nestingr7   r$   r(   r+   r,   c                 "    t        d|d d|}|S r   )r4  )r7   r(   r+   r   s       r5   rH   z-VmapIncrementNestingCtxManagerVariable.createW  s*     5 
'
 

 
r6   c                 <   t        | j                         | j                  \  }}t        |t        j
                        r|j                  }n|j                         }|j                         }t        j                  j                  j                  ||      }| j                  |d        |j                  j                  dt        j                  j                  j                  |j!                         |fi       | _        t        j$                  j'                  ||      S )Nc                  R    t         j                  j                  j                         S rW   )r   r   r   _vmap_decrement_nestingr/   r6   r5   rd   z>VmapIncrementNestingCtxManagerVariable.enter.<locals>.<lambda>o  r  r6   ru   )r   r   r(   rr   r   SymNodeVariablesym_numr$  r   r   r   _vmap_increment_nestingrF   rQ   create_proxyr   as_proxyr   r   r   )r3   r7   
batch_size
randomnessbatch_size_value
vmap_levels         r5   rJ   z,VmapIncrementNestingCtxManagerVariable.enterd  s    d,,-!%!3!3
Jj)";";<)11)<<>224
XX((@@j

 	b"WXYY++((@@  "J/	

 ((..r:>>r6   rU   c                     | j                          |j                  j                  dt        j                  j
                  j                  di        t        j                  j                  d       S r   )
rS   rQ   r   r   r   r   r8  r   rG   rH   rY   s      r5   rZ   z+VmapIncrementNestingCtxManagerVariable.exitx  sV     	
		((@@		
 ))0066r6   N)r   r   r   r   r   r   r   r   r   r   r   r   r   rH   rJ   rZ   r/   r6   r5   r4  r4  M  s    ; /1<3U3UV
'
O,
 
 
2	
 
?3 ? ?(
7-
76E
7	
7r6   r4  c                   ,    e Zd ZdZ e e       ej                        Ze		 dddde
dede
dd f
d       Z	 	 dd
e
dee   d	z  dede
dd	f
 fdZdddefdZdddedefdZdddee   deeef   def fdZddde
dd	fdZdefdZdefdZdefdZ xZS )GradModeVariablez6represents torch.{no_grad,enable_grad,set_grad_mode}()r7   r$   target_valueinitializedr+   r,   c                     t        d|gt        j                         gd|}|r|j                  | |j                         |S r   )rD  r   is_grad_enabledrD   r(   )r7   rE  rF  r+   r   s        r5   rH   zGradModeVariable.create  sO      
'.!1134
 

 NN2s001
r6   Nr(   r)   c                 T    t        |   d||d| t        | j                         y r   )r0   r1   r   r   )r3   r(   r)   rF  r+   r4   s        r5   r1   zGradModeVariable.__init__  s4     	 	
'	
JP	
 	d,,-r6   c                 x    | j                  || j                         t        j                  j	                  d       S rW   rD   r(   r   rG   rH   rI   s     r5   rJ   zGradModeVariable.enter  -    D../))0066r6   rU   c                 x    | j                  || j                         t        j                  j	                  d       S rW   rD   r)   r   rG   rH   rY   s      r5   rZ   zGradModeVariable.exit  /     	D//0))0066r6   c                 ^    | j                  || j                         t        |   |||      S rW   rD   r)   r0   ru   r3   r7   rU   r+   r4   s       r5   ru   zGradModeVariable.call_function  s-     	D//0w$Rv66r6   r-  c                 4   t        |      dk7  rt        dt        |             |d   }t        j                         |k7  rW|j                  j                  dt        j                  j                  |fi        t        j                  j                  |       y y )Nr   expected 1 value, got r   ru   )rh   rq   r   rH  rQ   r   r   _set_grad_enabledr3   r7   r-  r   s       r5   rD   zGradModeVariable._call_func  s    v;! #9#f+!GHHq	  "e+II!!!;!;eXr HH&&u-	 ,r6   c                      yNr   r/   rn   s    r5   r]   zGradModeVariable.module_name      r6   c                      y)Nset_grad_enabledr/   rn   s    r5   r^   zGradModeVariable.fn_name  s    !r6   c                 "    t         j                  S rW   )r   r[  rn   s    r5   r  zGradModeVariable.python_type  s    %%%r6   Frw   )r   r   r   r   r   r   r   	GRAD_MODEr   r   r   r   rH   r   r1   r   rJ   rZ   r   r   r   ru   rD   r]   r^   rs   r  r   r   s   @r5   rD  rD    sR   @/1<3I3IJ "'  	
 
 $ 15 	
.
. !-
. 	
.
 
. 

.73 7 77-76E7	77'7 ?#7 S/)*	7
 
7	.8 	.# 	.$ 	.S " "&T &r6   rD  c            	            e Zd Zedddededd fd       Z	 dded	edz  deddf fd
ZdddedefdZ	dddefdZ
defdZdefdZdefdZ xZS )InferenceModeVariabler7   r$   rE  r+   r,   c                 H    t        |gfdt        j                         i|}|S )Nr)   )r`  r   is_inference_mode_enabledr7   rE  r+   r   s       r5   rH   zInferenceModeVariable.create  s3     $N
+0+J+J+L
PV
 
r6   Nr(   r)   c                 V    |t        j                         }t        |   d||d| y r   )r   rb  r0   r1   r2   s       r5   r1   zInferenceModeVariable.__init__  s8     !"<<>N 	
'	
JP	
r6   rU   c                     | j                          |j                  j                  dt        j                  j
                  j                  | j                  fi        t        j                  j                  d       S r   )rX   rQ   r   r   r   	grad_mode_exit_inference_moder   r   rG   rH   rY   s      r5   rZ   zInferenceModeVariable.exit  s]     	
		NN$$99ZZM		
 ))0066r6   c                 T   dt         j                  j                  j                  rE| j                  d   r6dt        j
                         t         j                  j                  d       n0t        j                  j                  j                  | j                   dfd}| j                  ||       |j                  j                  dt         j                  j                  j                  g | j                  i       | _        t        j                   j#                  d       S )NFr   Tc                      r t         j                  j                         y t         j                  j                  j                          y rW   )r   r   rU  r   rf  rg  )ctx disabled_inference_mode_forciblypriors   r5   cleanup_hookz1InferenceModeVariable.enter.<locals>.cleanup_hook   s0    /**51((==cBr6   ru   rN   )r   r   r
   "fake_tensor_disable_inference_moder(   rH  r   rU  r   rf  _enter_inference_moderF   rQ   r   r   r   rG   rH   )r3   r7   rm  rj  rk  rl  s      @@@r5   rJ   zInferenceModeVariable.enter  s    +0(MM  CC""1%
 04,))+EHH&&u-..**@@$BTBTUC	C 	b,/YY**NN$$::"d  "	

 ))0066r6   c                      yrX  r/   rn   s    r5   r]   z!InferenceModeVariable.module_name  rY  r6   c                      y)Ninference_moder/   rn   s    r5   r^   zInferenceModeVariable.fn_name  s    r6   c                 "    t         j                  S rW   )r   rr  rn   s    r5   r  z!InferenceModeVariable.python_type  s    ###r6   rW   )r   r   r   r   r   rH   r   r1   r   rZ   rJ   r   r]   r^   rs   r  r   r   s   @r5   r`  r`    s    '7:FI	   '+

 t
 	

 


7-
76E
7	
773 7 7<S    $T $r6   r`  c            	           e Zd ZU dZeed<   eed<   eed<   edddeded	d fd
       Zddded	efdZ	ddd	efdZ
d	efdZd	efdZd	efdZy)GenericDeviceVariablezLAbstract base for device context managers that swap the active device index._exchange_fn_maybe_exchange_fn_get_device_index_fnr7   r$   devicer+   r,   c                 <     | d| j                  |d      gd d|S )NT)optionalr   r/   )rx  )clsr7   ry  r+   s       r5   rH   zGenericDeviceVariable.create   s9      
33FT3JK
 
 	
r6   rU   c                     | j                          |j                  j                  d| j                  | j                  fi        t
        j                  j                  d      S )Nru   F)rX   rQ   r   rw  r   r   rG   rH   rY   s      r5   rZ   zGenericDeviceVariable.exit*  sS     	
		##ZZM		
 ))0077r6   c                       j                    j                    j                  | fd       |j                  j	                  d j                   g  j                  i        _        t        j                  j                  d       S )Nc                  &    j                         S rW   )rw  )prev_idxr3   s   r5   rd   z-GenericDeviceVariable.enter.<locals>.<lambda>8  s    $*A*A(*K r6   ru   )	rv  r(   rF   rQ   r   r   r   rG   rH   )r3   r7   r  s   ` @r5   rJ   zGenericDeviceVariable.enter6  sx    $4$$d&8&89b"KLYY**"d  "	

 ))0066r6   c                     t         rW   rl   rn   s    r5   r]   z!GenericDeviceVariable.module_nameA      !!r6   c                      y)Nry  r/   rn   s    r5   r^   zGenericDeviceVariable.fn_nameD  s    r6   c                     t         rW   rl   rn   s    r5   r  z!GenericDeviceVariable.python_typeG  r  r6   N)r   r   r   r   r   __annotations__classmethodrH   r   rZ   rJ   r   r]   r^   rs   r  r/   r6   r5   ru  ru    s    V
,
69
EH
	 
 

8-
86E
8	
8	73 	7 	7"S " "T "r6   ru  c                       e Zd ZdZ eej                  j                        Z eej                  j                        Z
 eej                  j                        ZdefdZdefdZy)CUDADeviceVariablezrepresents torch.cuda.devicer,   c                      y)Nz
torch.cudar/   rn   s    r5   r]   zCUDADeviceVariable.module_nameR      r6   c                 6    t         j                  j                  S rW   )r   cudary  rn   s    r5   r  zCUDADeviceVariable.python_typeU  s    zz   r6   N)r   r   r   r   r   r   r  _exchange_devicerv  _maybe_exchange_devicerw  _get_device_indexrx  r   r]   rs   r  r/   r6   r5   r  r  K  s[    &

 ; ;<L%ejj&G&GH'

(D(DES !T !r6   r  c                       e Zd ZdZ eej                  j                        Z eej                  j                        Z
 eej                  j                        ZdefdZdefdZy)XPUDeviceVariablezrepresents torch.xpu.devicer,   c                      y)Nz	torch.xpur/   rn   s    r5   r]   zXPUDeviceVariable.module_name`  s    r6   c                 6    t         j                  j                  S rW   )r   xpury  rn   s    r5   r  zXPUDeviceVariable.python_typec  s    yyr6   N)r   r   r   r   r   r   r  r  rv  r  rw  r  rx  r   r]   rs   r  r/   r6   r5   r  r  Y  s[    %		 : :;L%eii&F&FG'		(C(CDS  T  r6   r  c                       e Zd ZdZ eej                  j                        Z eej                  j                        Z
 ed       ZdefdZdefdZdefdZy)AcceleratorDeviceIndexVariablez)represents torch.accelerator.device_indexc                     | S rW   r/   )ry  r+   s     r5   rd   z'AcceleratorDeviceIndexVariable.<lambda>l  s     r6   r,   c                      y)Nztorch.acceleratorr/   rn   s    r5   r]   z*AcceleratorDeviceIndexVariable.module_namen  s    "r6   c                      y)Ndevice_indexr/   rn   s    r5   r^   z&AcceleratorDeviceIndexVariable.fn_nameq  s    r6   c                 6    t         j                  j                  S rW   )r   acceleratorr  rn   s    r5   r  z*AcceleratorDeviceIndexVariable.python_typet  s      ---r6   N)r   r   r   r   r   r   r   _accelerator_exchangeDevicerv   _accelerator_maybeExchangeDevicerw  rx  r   r]   r^   rs   r  r/   r6   r5   r  r  g  s^    3 D DEL%ehh&O&OP'(GH#S # .T .r6   r  _device_context_manager_mapdevice_contextvariable_clsr,   c                 D    | t         v rt        d|  d      |t         | <   y)zRegister a Dynamo variable class for a device context manager type.

    Raises ``ValueError`` if ``device_context`` is already registered.
    zDevice context z) already has a registered context managerN)r  
ValueError)r  r  s     r5   register_device_context_managerr    s5     44n--VW
 	
 3?/r6   c                 ,    t         j                  |       S )zWReturn the Dynamo variable class for ``device_context``, or ``None`` if not registered.)r  get)r  s    r5   get_device_context_managerr    s     '**>::r6   c                        e Zd ZdZ e e       ej                        Ze	ddde
dd fd       Z	 	 dddded	edz  d
ede
ddf fdZ	 ddddede
f   dz  ddfdZdddeddfdZdefdZdefdZdefdZ xZS )TorchFunctionDisableVariablez>represents whether torch function overrides are enabled or notr7   r$   r+   r,   c                 $    t        | fg g d|}|S )Nr   )r  r   s      r5   rH   z#TorchFunctionDisableVariable.create  s-     +

 	
 
r6   Nr(   r)   only_subclassc                 |   t        |      dk7  rt        dt        |             |t        d      t        |      dk7  rt        dt        |             || _        |j                  j                  | _        |j                  j                  | _        t        | $  d||d| t        | j                         y )Nr   zexpected 0 target_values, got zinitial_values must not be Nonezexpected 0 initial_values, got r   r/   )rh   rq   r  symbolic_torch_function_statetorch_function_subclass_enabled'initial_torch_function_subclass_enabledtorch_function_mode_enabled#initial_torch_function_mode_enabledr0   r1   r   r   )r3   r7   r(   r)   r  r+   r4   s         r5   r1   z%TorchFunctionDisableVariable.__init__  s     }" #A#mBTAU!VWW! !BCC~!# 1#n2E1FG  +,,LL 	4 ,,HH 	0 	 	
'	
JP	
 	d,,-r6   rK   .c                 r     |d fd}| _         j                  j                   j                         y )Nc                       j                   j                  _         j                  s j                  j                  _        y y rW   )r  r  r  r  r  r  rI   s   r5   rK   z9TorchFunctionDisableVariable.set_cleanup_hook.<locals>.fn  sA    @@ 00P ))@@ 44P *r6   rN   rO   rT   s   `` r5   rF   z-TorchFunctionDisableVariable.set_cleanup_hook  s.    
 : 
		""4<<0r6   r-  c                     t        |      dk7  rt        dt        |             d|j                  _        | j                  sd|j                  _        y y )Nr   zexpected 0 values, got F)rh   rq   r  r  r  r  r3   r7   r-  s      r5   rD   z'TorchFunctionDisableVariable._call_func  sO    v;! #:3v;-!HIIKP((H!!KPB,,H "r6   c                      y)Nztorch._Cr/   rn   s    r5   r]   z(TorchFunctionDisableVariable.module_name      r6   c                     | j                   ryy)NDisableTorchFunctionSubclassDisableTorchFunction)r  rn   s    r5   r^   z$TorchFunctionDisableVariable.fn_name  s    1%r6   c                     | j                   rt        j                  j                  S t        j                  j                  S rW   )r  r   r   r  r  rn   s    r5   r  z(TorchFunctionDisableVariable.python_type  s+    88888xx,,,r6   rw   rW   )r   r   r   r   r   r   r   TORCH_FUNCTION_STATEr   r   r   rH   r   r   r1   r   rF   rD   r   r]   r^   rs   r  r   r   s   @r5   r  r    s
   H/1<3T3TU	'	36		'	 	 (,".'. . 	.
 . . 
.@ )-1'1 S#X%1 
	1&Q8 Q% QD QS & &
-T -r6   r  c            	            e Zd ZdZedddedz  dedd fd       Z	 dd	eedz     d
eedz     dz  deddf fdZ	ddde
fdZdddeedz     ddfdZdefdZdefdZdefdZ xZS )!DisabledSavedTensorsHooksVariablez;represents torch.autograd.graph.disable_saved_tensors_hook.r7   r$   rE  Nr+   r,   c                     t        d|gt        j                  j                  j	                         gd|}|j                  | |g       |j                  |        |S r   )r  r   r   	_autograd/_saved_tensors_hooks_get_disabled_error_messagerD   rF   rc  s       r5   rH   z(DisabledSavedTensorsHooksVariable.create  sb     0 
'.""RRT

 
 	rL>*R 
r6   r(   r)   c                 *    t        |   d||d| y r   r0   r1   r2   s       r5   r1   z*DisabledSavedTensorsHooksVariable.__init__  $     	 	
'	
JP	
r6   c                 @    t         j                  j                  d       S rW   r   rG   rH   rI   s     r5   rJ   z'DisabledSavedTensorsHooksVariable.enter      ))0066r6   r-  c                    t        |      dk7  rt        dt        |             |d   }|k|j                  j                  dt        j
                  j                  j                  |fi        t        j
                  j                  j                  |       y |j                  j                  dt        j
                  j                  j                  di        t        j
                  j                  j                          y )Nr   rT  r   ru   r/   )	rh   rq   rQ   r   r   r   r  _saved_tensors_hooks_disable_saved_tensors_hooks_enablerV  s       r5   rD   z,DisabledSavedTensorsHooksVariable._call_func	  s     v;! #9#f+!GHHq	 II!!""??	 HH;;EB II!!!3!3!O!OQSUW HH::<r6   c                      y)Nztorch.autograd.graphr/   rn   s    r5   r]   z-DisabledSavedTensorsHooksVariable.module_name!      %r6   c                      y)Ndisable_saved_tensors_hooksr/   rn   s    r5   r^   z)DisabledSavedTensorsHooksVariable.fn_name$  s    ,r6   c                 "    t         j                  S rW   
contextlib_GeneratorContextManagerrn   s    r5   r  z-DisabledSavedTensorsHooksVariable.python_type'      222r6   rW   )r   r   r   r   r   r   r   rH   r   r1   r   rJ   rD   r]   r^   rs   r  r   r   s   @r5   r  r    s    E'7:TzMP	, " 7;
d
+
 !t,t3
 	

 

73 7 7=-=7?d
7K=	=0&S &- -3T 3r6   r  c            	            e Zd Zedej
                  j                  j                  dee	   de
ee	f   dd fd       Z	 ddee	   de	dz  de	ddf fd	Zd
ddedefdZd
ddefdZdefdZdefdZdefdZ xZS )AutocastModeVariabler   rU   r+   r,   c                 H   | t         j                  j                  j                  t         j                  j                  j                  t         j
                  j                  j                  fvrt        d|         t        j                  |       j                  |i |}|j                          g }|j                          dD ]  }|dk(  ru| t         j                  j                  j                  t         j
                  j                  j                  fv r+| t         j                  j                  j                  u rdnd}n|j                  |   }t        |t              r |j                  |j!                                |j                  |        t#        |fdd i|}|S )Nzunexpected autocast function: )device_typedtyper   cache_enabledr  r  cpur)   )r   ampautocast_modeautocastr  r  rq   inspect	signaturebindapply_defaultsclear	argumentsrr   r   r   r$  r  )r   rU   r+   
bound_argsr(   keyargr   s           r5   rH   zAutocastModeVariable.create,  sV    II##,,JJNN##IIMM""
 

 !#A$!HII
 2W&&t,114B6B
!!#G 	*Cm#

''		&&1 )
 !%

(?(? ?fU **3/#/$$S%;%;%=>$$S)	* #=PPP
r6   Nr(   r)   c                 *    t        |   d||d| y r   r  r2   s       r5   r1   zAutocastModeVariable.__init__R  r  r6   r7   r$   c                     | j                          |j                  j                  dt        j                  j
                  | j                  fi        t        j                  j                  d       S r   )
rX   rQ   r   r   r  _exit_autocastr   r   rG   rH   rY   s      r5   rZ   zAutocastModeVariable.exit\  sT     	
		UYY55

}b	
 ))0066r6   c                 H   t        j                  j                  | j                   | j	                  |fd       |j
                  j                  dt         j                  j                  g | j                  i       | _        t        j                  j                  d       S )Nc                  B    t         j                  j                         S rW   )r   r  r  )rj  s   r5   rd   z,AutocastModeVariable.enter.<locals>.<lambda>g  s    %))*B*B3*G r6   ru   )r   r  _enter_autocastr(   rF   rQ   r   r   r   rG   rH   )r3   r7   rj  s     @r5   rJ   zAutocastModeVariable.entere  s}    ii''););<b"GHYY**UYY668N$:L:L8NPR

 ))0066r6   c                      y)Nztorch.amp.autocast_moder/   rn   s    r5   r]   z AutocastModeVariable.module_namem  s    (r6   c                      y)Nr  r/   rn   s    r5   r^   zAutocastModeVariable.fn_namep  r  r6   c                 J    t         j                  j                  j                  S rW   )r   r  r  r  rn   s    r5   r  z AutocastModeVariable.python_types  s    yy&&///r6   rW   )r   r   r   r   r   r  r  r  r   r   r   r   rH   r1   r   rZ   rJ   r]   r^   rs   r  r   r   s   @r5   r  r  +  s    #ii%%..#sm# S#X# 
 	# #P &*
}
 d

 	

 

7-76E7	773 7 7)S ) 0T 0r6   r  c                        e Zd ZdZddedz  deddf fdZdddefd	Zddd
edefdZde	fdZ
de	fdZdefdZ xZS )NullContextVariablez>
    This class represents Python contextlib.nullcontext.
    Nr(   r+   r,   c                 (    t        |   dd|i| y Nr(   r/   r  )r3   r(   r+   r4   s      r5   r1   zNullContextVariable.__init__|  s    ?}??r6   r7   r$   c                 t    t         j                  j                  d       }| j                  r| j                  S |S rW   )r   rG   rH   r(   )r3   r7   nones      r5   rJ   zNullContextVariable.enter  s1    ))006%)%7%7t!!ATAr6   rU   c                 @    t         j                  j                  d       S rW   r  rY   s      r5   rZ   zNullContextVariable.exit       ))0066r6   c                      yNr  r/   rn   s    r5   r]   zNullContextVariable.module_name  r  r6   c                      yNnullcontextr/   rn   s    r5   r^   zNullContextVariable.fn_name      r6   c                 "    t         j                  S rW   )r  r  rn   s    r5   r  zNullContextVariable.python_type  s    %%%r6   rW   )r   r   r   r   r   r1   r   rJ   rZ   r   r]   r^   rs   r  r   r   s   @r5   r  r  w  s    @cDj @3 @4 @B3 B B7-76E7	7
S  &T &r6   r  c                   |     e Zd ZdZdeddf fdZdefdZdddefd	Z	ddd
edefdZ
defdZdefdZddZ xZS )ProfilerContextVariablea~  
    This class represents a set of torch profiler context objects, where Dynamo
    ignores all the side-effects in the __init__, __enter__ and __exit__ methods
    by treating the object mostly as a `contextlib.nullcontext`, except for edge
    cases like the `__enter__` method which returns the object itself rather
    than `None`, per implementation of the torch objects.
    r+   r,   Nc                 (    t        |   ddd i| y r  r  )r3   r+   r4   s     r5   r1   z ProfilerContextVariable.__init__  s    6t6v6r6   c                 6    t         j                  j                  S rW   )r   r   profilern   s    r5   r  z#ProfilerContextVariable.python_type  s    ~~%%%r6   r7   r$   c                     | S rW   r/   rI   s     r5   rJ   zProfilerContextVariable.enter  s    r6   rU   c                 @    t         j                  j                  d       S rW   r  rY   s      r5   rZ   zProfilerContextVariable.exit  r  r6   c                      yr  r/   rn   s    r5   r]   z#ProfilerContextVariable.module_name  r  r6   c                      yr  r/   rn   s    r5   r^   zProfilerContextVariable.fn_name  r  r6   c                 T    t        dt        |       dg t        j                         y )Nz2torch.profiler object escaped from compiled regionzXDynamo doesn't support compiling a region that returns a torch.profiler context manager.gb_typecontextexplanationhintsr   r   r   SUPPORTABLEr_   s     r5   rj   z#ProfilerContextVariable.reconstruct  s*    HIr"..		
r6   r~   )r   r   r   r   r   r1   rs   r  r   rJ   rZ   r   r]   r^   rj   r   r   s   @r5   r   r     su    7 7 7&T &3  7-76E7	7
S  
r6   r   c                        e Zd ZdZdhej
                  Zededee	   dddedd f
d	       Z
	 	 ddeded
z  dedd
f fdZdefdZddde	fdZddde	de	fdZdefdZdefdZd fdZ xZS )r   ac  
    This class represents torch profiler context objects.

    For record_function: emits torch.ops.profiler._record_function_enter_new
    to the graph on enter, and torch.ops.profiler._record_function_exit on exit.
    But if emit_profiler_ops=False, behaves like nullcontext.

    For profile: behaves like nullcontext, ignoring all side-effects.
    emit_profiler_opsr   r   r   zdict[str, VariableTracker]r+   r,   c                    d }t         j                  r|r|d   j                         n<|j                  dt        j
                  j                  d            j                         }d }t        |      dkD  r|d   j                         }nd|v r|d   j                         }||g}nt        t        d|        t        d|d d|S )	Nr   r   unknownr   rU   z+Profiler record function %s will be ignoredr   r/   )r
    capture_profiler_record_functionr$  r  r   rG   rH   rh   r   logr   )r   r   r   r+   r(   r   record_args_consts          r5   rH   z,ProfilerRecordFunctionContextVariable.create  s     22
  A113"&&I66==iH$$&  !%;!#$/N$E$E$G!=($1&$9$L$L$N!!#45MKTR4 
'
 
 	
r6   Nr(   r)   c                 *    t        |   d||d| y r   r  r2   s       r5   r1   z.ProfilerRecordFunctionContextVariable.__init__  r  r6   c                 J    t         j                  j                  j                  S rW   )r   r   r   r   rn   s    r5   r  z1ProfilerRecordFunctionContextVariable.python_type  s    ~~&&666r6   r7   r$   c                     t         j                  rV| j                  \  }}|j                  j	                  dt
        j                  j                  j                  ||fi       | _	        | S r   )
r
   r  r(   rQ   r   r   opsr   _record_function_enter_newr   )r3   r7   r   rU   s       r5   rJ   z+ProfilerRecordFunctionContextVariable.enter  sW    22++JD$..		""==t	DJ r6   rU   c                 
   t         j                  rU|j                  j                  dt        j
                  j                  j                  j                  | j                  fi        t        j                  j                  d       S r   )r
   r  rQ   r   r   r  r   _record_function_exit_RecordFunctionr   r   rG   rH   rY   s      r5   rZ   z*ProfilerRecordFunctionContextVariable.exit  s`     22II!!		""88HH	 ))0066r6   c                 *    t         j                  rdS dS )Nztorch.autograd.profilerr  r
   r  rn   s    r5   r]   z1ProfilerRecordFunctionContextVariable.module_name  s!     66 &	
 	
r6   c                 *    t         j                  rdS dS )Nr   r  r   rn   s    r5   r^   z-ProfilerRecordFunctionContextVariable.fn_name  s!     66 	
 	
r6   c                     t         j                  r)t        dt        |       dg t        j
                         y t        |   |       y )Nz,record_function escaped from compiled regionzADynamo doesn't support graph break inside record_function region.r	  )r
   r  r   r   r   r  r0   ra   )r3   r`   r4   s     r5   ra   z6ProfilerRecordFunctionContextVariable.reconstruct_type  sE     22FD	_&22	 G$W-r6   r2  r~   )r   r   r   r   r&   r   r   r   r   r   rH   r1   rs   r  rJ   rZ   r   r]   r^   ra   r   r   s   @r5   r   r     s     		 	/	/N
 

/*
 4
 	

 
1
 
B "%)

 d

 	

 

7T 7
3 
 
7-76E7	7
S 

 
. .r6   r   c                        e Zd ZdZedddedd fd       Zedddefd       Zdeded	edd
f fdZ	de
fdZdddefdZdddedefdZddZ xZS )PreserveVersionContextVariablez?
    Wraps torch.autograd._unsafe_preserve_version_counter
    r7   r$   tensorsr,   c           	         |j                         rKt        j                  |fD cg c]  }|j                  | d       c}      }t        j                  |g      }npt	        |t        j                        st        dt        |             t        j                  |j                  D cg c]  }|j                  | d       c}      }|}t        ||      S c c}w c c}w )N_versionz%tensors must be a TupleVariable, got )		is_tensorr   TupleVariabler   rr   rq   rs   r#  r$  )r7   r%  r   versionstensors_tuples        r5   _create_lambda_from_tensorsz:PreserveVersionContextVariable._create_lambda_from_tensors5  s    
  ..9@	B1r:.BH &33WI>Mgy'>'>?$;DM?K  !..8?F1r:.FH $M-mXFF C Gs   C*Cc                 4     t        j                   fd      S )Nc                 0    t         j                  |       S rW   )r$  r,  )r%  r7   s    r5   rd   z<PreserveVersionContextVariable.constructor.<locals>.<lambda>M  s    :VVG r6   )r   LambdaVariable)r7   s   `r5   constructorz*PreserveVersionContextVariable.constructorJ  s    ''
 	
r6   prev_versionsr+   Nc                 b   |j                  dd        t        |   di | || _        || _        | j                  j                         r%t        j                  | j                  g      | _        | j                  j                         r&t        j                  | j                  g      | _        y y r  )	
setdefaultr0   r1   r%  r1  r(  r   r)  is_symnode_like)r3   r%  r1  r+   r4   s       r5   r1   z'PreserveVersionContextVariable.__init__R  s     	/40"6"*<<!!#$22DLL>BDL--/!*!8!8$:L:L9M!ND 0r6   c                 J    t         j                  j                  j                  S rW   )r   r   rf   _unsafe_preserve_version_counterrn   s    r5   r  z*PreserveVersionContextVariable.python_typeb  s    ~~''HHHr6   c                 @    t         j                  j                  d       S rW   r  rI   s     r5   rJ   z$PreserveVersionContextVariable.entere  r  r6   rU   c                     ddl m} t        j                  |      j	                  || j
                  | j                  gi       S )Nr   )_unsafe_set_version_counter)tensor_version_opr9  r   TorchInGraphFunctionVariableru   r%  r1  )r3   r7   rU   r9  s       r5   rZ   z#PreserveVersionContextVariable.exith  s<     	D55'

-T\\4+=+=>
C	Dr6   c                 T    t        dt        |       dg t        j                         y )NzLtorch.autograd._unsafe_preserve_version_counter escaped from compiled regionzyDynamo doesn't support compiling a region that returns a torch.autograd._unsafe_preserve_version_counter context manager.r	  r  r_   s     r5   rj   z*PreserveVersionContextVariable.reconstructq  s-    bIU"..
	
r6   r~   )r   r   r   r   r   r   r,  r0  r   r1   rs   r  rJ   rZ   rj   r   r   s   @r5   r$  r$  0  s     G'G G 
*G G( 
3 
 
 
O O 'O 	O
 
O IT I73 7 7D-D6ED	D
r6   r$  c                   "    e Zd Z e e       ej                        Zeddde	de	de	dd f
d       Z
	 dde	d	ee	   d
ee	   dz  de	ddf
 fdZdddefdZdddedefdZdddee   deeef   def fdZdddee	   ddfdZdefdZdefdZ xZS )&FSDPParamGroupUseTrainingStateVariabler7   r$   param_group_varrE  r+   r,   c                 P    t        d||g|j                  j                  gd|}|S )N)r?  r(   r)   r/   )r>  r   _training_state)r7   r?  rE  r+   r   s        r5   rH   z-FSDPParamGroupUseTrainingStateVariable.create  s>     5 
+'.+11AAB
 	
 
r6   Nr(   r)   c                 b    t        |   d||d| || _        t        | j                         y r   )r0   r1   r?  r   r   )r3   r?  r(   r)   r+   r4   s        r5   r1   z/FSDPParamGroupUseTrainingStateVariable.__init__  s<     	 	
'	
JP	
  /d,,-r6   c                 x    | j                  || j                         t        j                  j	                  d       S rW   rK  rI   s     r5   rJ   z,FSDPParamGroupUseTrainingStateVariable.enter  rL  r6   rU   c                 x    | j                  || j                         t        j                  j	                  d       S rW   rN  rY   s      r5   rZ   z+FSDPParamGroupUseTrainingStateVariable.exit  rO  r6   c                 ^    | j                  || j                         t        |   |||      S rW   rQ  rR  s       r5   ru   z4FSDPParamGroupUseTrainingStateVariable.call_function  s-     	D//0w$Rv66r6   r-  c           	         t        |      dk7  rt        dt        |             |d   }| j                  j                  j                  |k7  rx| j                  j                  |dt        j                  j                  |d      t        j                  j                  ||      fi        || j                  j                  _        y y )Nr   rT  r   __setattr__rA  )	rh   rq   r?  r   rA  call_methodr   r   r   rV  s       r5   rD   z1FSDPParamGroupUseTrainingStateVariable._call_func  s     v;! #9#f+!GHHq	%%55>  ,,--33B8IJ--33B>  :?D  &&6 ?r6   c                      y)NzDtorch.distributed.fsdp._fully_shard._fsdp_param_group.FSDPParamGroupr/   rn   s    r5   r]   z2FSDPParamGroupUseTrainingStateVariable.module_name  s    Ur6   c                      y)Nuse_training_stater/   rn   s    r5   r^   z.FSDPParamGroupUseTrainingStateVariable.fn_name      #r6   rW   )r   r   r   r   r   r   FSDP_TRAINING_STATEr   r   r   rH   r   r1   r   rJ   rZ   r   r   r   ru   rD   r]   r^   r   r   s   @r5   r>  r>    sG   /1<3S3ST'  	
 
2 $ 04	..  }. !,	.
 . 
.73 7 77-76E7	77'7 ?#7 S/)*	7
 
7?-?7?}?	?$VS V$ $r6   r>  c                       e Zd ZdZe	 ddddedededd f
d       Z	 	 dd
ee	j                  j                  j                     dedededd	f
 fdZedddee   dee   fd       ZdddefdZdddedefdZdefdZdefdZdefdZ xZS )SDPAKernelVariablez)represents torch.nn.attention.sdpa_kernelr7   r$   backendsset_priorityr+   r,   c                     t        |t        j                  j                  j                        r|g}t        d|d |d|}|S )N)r(   r)   rQ  r/   )rr   r   nn	attention
SDPBackendrO  )r7   rP  rQ  r+   r   s        r5   rH   zSDPAKernelVariable.create  sN     h 2 2 = => zH  
"%
 	
 
r6   Nr(   r)   c                 8    t        |   d||d| || _        y r   )r0   r1   rQ  )r3   r(   r)   rQ  r+   r4   s        r5   r1   zSDPAKernelVariable.__init__  s.     	 	
'	
JP	
 )r6   c           	          |D cg c]M  }| j                   j                  dt        j                  j                  j
                  |j                  fi       O }}|S c c}w r   )rQ   r   r   rS  rT  _backend_from_stringr   )r7   rP  backendnodess       r5   _backends_to_nodesz%SDPAKernelVariable._backends_to_nodes  s`     $
  II!!""77	
 
 
s   AAc                 >    t         j                  j                  j                   j                         _         j                  | fd       t         j                  j                  j                   j                   j                          j                  | j                        }|j                  j                  dt         j                  j                  j                  |t         j                        fi        t        j                  j                  d       S )N)with_priorityc                      t         j                  j                  j                   j                   j
                        S )NrQ  )r   rS  rT  _sdpa_kernelprev_backendsrQ  rn   s   r5   rd   z*SDPAKernelVariable.enter.<locals>.<lambda>  s2    EHH&&33""1B1B 4  r6   r_  ru   )r   rS  rT  _cur_sdpa_kernel_backendsrQ  ra  rF   r`  r(   r[  rQ   r   r   r   rG   rH   )r3   r7   r  s   `  r5   rJ   zSDPAKernelVariable.enter  s    "XX//II++ J 
 		
 	''T->-> 	( 	
 %%b$*<*<=
		HH++$t(()*		
 ))0066r6   rU   c                 B   | j                          | j                  || j                        }|j                  j	                  dt
        j                  j                  j                  |t        | j                        fi        t        j                  j                  d       S r   )rX   r[  ra  rQ   r   r   rS  rT  r`  r   rQ  r   rG   rH   )r3   r7   rU   r  s       r5   rZ   zSDPAKernelVariable.exit  s     	%%b$*<*<=
		HH++$t(()*		
 ))0066r6   c                      y)Nztorch.nn.attentionr/   rn   s    r5   r]   zSDPAKernelVariable.module_name  rL  r6   c                      y)N_sdpa_kernel_variadicr/   rn   s    r5   r^   zSDPAKernelVariable.fn_name$  s    &r6   c                 "    t         j                  S rW   r  rn   s    r5   r  zSDPAKernelVariable.python_type'  r  r6   r]  r   )r   r   r   r   r   r   r   rH   r   r   rS  rT  rU  r1   r[  r   rJ   rZ   r   r]   r^   rs   r  r   r   s   @r5   rO  rO    s(   3 #'  	
 
 & #"	
)EHH..99:
) 
) 	
)
 
) 

) 's) 
c  73 7 7,7-76E7	7$S $
' '3T 3r6   rO  c            	       x     e Zd ZdZ	 ddedededdf fdZdd	d
edefdZdefdZ	defdZ
defdZddZ xZS )FxTracebackAnnotateVariablea  
    fx.traceback.annotate is a context manager that allows users to annotate the
    fx graph nodes with custom metadata. In the context of Dynamo, we don't have
    to trace the body of the context manager. Instead we want to directly run
    the body of the context manager, so the Dynamo created Fx graphs have the
    right custom metadata. This variable tracker just runs __enter__ and
    __exit__ method (instead of tracing).
    Nr(   r)   r+   r,   c                 *    t        |   d||d| y r   r  r2   s       r5   r1   z$FxTracebackAnnotateVariable.__init__5  s$     	 	
'	
JP	
r6   r7   r$   rU   c                 r   t               j                  t        j                  j                  j                  | j                               j                  t        j                  j                  j                                | j                  |fd       t        j                  j                  d       S )Nc                  $     j                         S rW   )close)stacks   r5   rd   z3FxTracebackAnnotateVariable.enter.<locals>.<lambda>E  s    %++- r6   )r   enter_contextr   fx	tracebackannotater(   preserve_node_metarF   r   rG   rH   )r3   r7   rU   rn  s      @r5   rJ   z!FxTracebackAnnotateVariable.enter<  s~     EHH..778J8JKLEHH..AACDb"78))0066r6   c                      y)Nztorch.fx.tracebackr/   rn   s    r5   r]   z'FxTracebackAnnotateVariable.module_nameH  rL  r6   c                      y)Nrr  r/   rn   s    r5   r^   z#FxTracebackAnnotateVariable.fn_nameK  r  r6   c                 "    t         j                  S rW   r  rn   s    r5   r  z'FxTracebackAnnotateVariable.python_typeN  r  r6   c                 T    t        dt        |       dg t        j                         y )Nz8torch.fx.traceback.annotate escaped from compiled regionzBDynamo doesn't support graph break on torch.fx.traceback.annotate.r	  r  r_   s     r5   ra   z,FxTracebackAnnotateVariable.reconstruct_typeQ  s*    NI\"..		
r6   rW   r~   )r   r   r   r   r   r1   r   rJ   r   r]   r^   rs   r  ra   r   r   s   @r5   ri  ri  +  sx     9=
 
25
HK
	

7-
76E
7	
7$S $ 3T 3
r6   ri  c                   r     e Zd ZdZdeeef   deddf fdZddd	eddfd
ZdefdZ	defdZ
defdZ xZS )DynamoConfigPatchVariablez,represents torch._dynamo.patch_dynamo_configr(   r+   r,   Nc                    t        |j                               }t        |   d|fd d| i }|D ]1  \  }}t        j
                  j                  j                  |      ||<   3 t        |j                               f| _        y r   )	r.  r#  r0   r1   r   r   r
   r   r)   )r3   r(   r+   target_values_tupleinitial_values_dictr  _r4   s          r5   r1   z"DynamoConfigPatchVariable.__init__a  s    #M$7$7$9: 	
.0	
IO	
 !) 	MFC',}}';';'G'G'L$	M$%8%>%>%@ACr6   r7   r$   r-  c                     t        |      dk7  rt        dt        |             |d   }|D ]/  \  }}t        j                  j                  j                  ||       1 y Nr   rT  r   )rh   rq   r   r   r
   rG  )r3   r7   r-  r   r  ri   s         r5   rD   z$DynamoConfigPatchVariable._call_funcl  s[    v;! #9#f+!GHHq	 	7HCMM  ,,S#6	7r6   c                      yNztorch._dynamor/   rn   s    r5   r]   z%DynamoConfigPatchVariable.module_namex      r6   c                      y)Npatch_dynamo_configr/   rn   s    r5   r^   z!DynamoConfigPatchVariable.fn_name{      $r6   c                     ddl m} |S )Nr   )DynamoConfigPatchProxy)torch._dynamo.decoratorsr  )r3   r  s     r5   r  z%DynamoConfigPatchVariable.python_type~  s    C%%r6   )r   r   r   r   r   r   r   r1   rD   r]   r^   rs   r  r   r   s   @r5   ry  ry  \  sk    6	Dd38n 	D 	D 	D78 7# 7$ 7S % %&T &r6   ry  c                   n     e Zd ZdZdededdf fdZddd	ee   ddfd
Zde	fdZ
de	fdZdefdZ xZS )ErrorOnGraphBreakVariablez-represents torch._dynamo.error_on_graph_breakerror_on_graph_breakr+   r,   Nc                 >    t        |   d|ft               fd| y r   )r0   r1   r   )r3   r  r+   r4   s      r5   r1   z"ErrorOnGraphBreakVariable.__init__  s.     	
/1579	
 	
r6   r7   r$   r-  c                 j    t        |      dk7  rt        dt        |             t        |d          y r  )rh   rq   r   r  s      r5   rD   z$ErrorOnGraphBreakVariable._call_func  s3     v;! #9#f+!GHH!&),r6   c                      yr  r/   rn   s    r5   r]   z%ErrorOnGraphBreakVariable.module_name  r  r6   c                      y)Nr  r/   rn   s    r5   r^   z!ErrorOnGraphBreakVariable.fn_name  r  r6   c                     ddl m} |S )Nr   )(ErrorOnGraphBreakDecoratorContextManager)r  r  )r3   r  s     r5   r  z%ErrorOnGraphBreakVariable.python_type  s    U77r6   )r   r   r   r   r   r   r1   r   rD   r   r]   r^   rs   r  r   r   s   @r5   r  r    se    7
T 
S 
T 
---7?~-	-S & &8T 8r6   r  c                        e Zd ZdZdedz  dedz  deddf fdZd fdZdd	deedf   ddfdZ	de
fdZde
fdZdefdZdefdZdd	dedd
fdZ xZS )CudagraphOverrideVariablez,represents torch._dynamo.override_cudagraphsfwdNbwdr+   r,   c                 .    t        |   d||fd d| y r   r  )r3   r  r  r+   r4   s       r5   r1   z"CudagraphOverrideVariable.__init__  s)     	
*	
 	
r6   r7   r$   r   c                     |j                   j                  }||j                  |j                  f| _        nd| _        t
        |   |      S )NrW   )rQ   cudagraph_annotationr  r  r)   r0   rJ   )r3   r7   prevr4   s      r5   rJ   zCudagraphOverrideVariable.enter  sD    yy--#'88TXX"6D")Dw}R  r6   r-  .c                 P   ddl m} t        |      dk(  r2|d   -d |j                  _        d |j                  j
                  _        y t        |      dk7  rt        dt        |             |\  }} |||      }||j                  _        ||j                  j
                  _        y )Nr   )_CudagraphAnnotationr   r   zexpected 2 values, got )r  r  )torch._inductorr  rh   rQ   r  tracing_contextrq   )r3   r7   r-  r  r  r  
annotations          r5   rD   z$CudagraphOverrideVariable._call_func  s     	9v;!q	 1-1BII*=ABII%%:6{a$'>s6{m%LMMHC-#3?J-7BII*=GBII%%:r6   c                      yr  r/   rn   s    r5   r]   z%CudagraphOverrideVariable.module_name  r  r6   c                      y)Noverride_cudagraphsr/   rn   s    r5   r^   z!CudagraphOverrideVariable.fn_name  r  r6   c                     ddl m} |S )Nr   )CudagraphOverrideContextManager)r  r  )r3   r  s     r5   r  z%CudagraphOverrideVariable.python_type  s    L..r6   c                      yr   r/   rn   s    r5   r{   z-CudagraphOverrideVariable.exit_on_graph_break  s     r6   rU   c                 @    t         j                  j                  d       S rW   r  rY   s      r5   rZ   zCudagraphOverrideVariable.exit  s     ))0066r6   )r7   r$   r,   r   )r   r   r   r   r   r   r1   rJ   r.  rD   r   r]   r^   rs   r  r{   r   rZ   r   r   s   @r5   r  r    s    6
D4K 
dTk 
S 
T 
!H-H7<S#XH	H"S % %/T /
T 
7-76E7	7r6   r  c                        e Zd Zdeez  deddf fdZddded	edefd
Z	de
fdZdddee   deeef   defdZddZ xZS )WithEnterFunctionVariablerj  r+   r,   Nc                 2    t        |   di | || _        y r.   )r0   r1   rj  )r3   rj  r+   r4   s      r5   r1   z"WithEnterFunctionVariable.__init__  s    
 	"6"r6   r7   r$   r8   r9   c                 $    ddl m}  || |||      S r;   r=   r?   s        r5   r@   z*WithEnterFunctionVariable.richcompare_impl  rA   r6   c                 "    t         j                  S rW   types
MethodTypern   s    r5   r  z%WithEnterFunctionVariable.python_type      r6   rU   c                     |rt        d      |rt        d      |j                  | j                  |j                        S )Nz7WithEnterFunctionVariable.call_function expects no argsz9WithEnterFunctionVariable.call_function expects no kwargs)rq   	enter_ctxrj  current_instructionrt   s       r5   ru   z'WithEnterFunctionVariable.call_function  sI      I   K  ||DHHb&<&<==r6   c                 \   	 | j                   j                          d| j                   j                          }t        dt	        | j                         d| ddgt        j                  t        j                         y # t        $ r! t	        t        | j                               }Y qw xY w)N.z;Attempted to reconstruct context manager's __enter__ methodz)Attempted to reconstruct context manager z while tracing `with ...:`zIt is likely there is a graph break while tracing `with ctx:` but outside the actual `ctx.__enter__()` method. `torch.compile` does not expect this to happen.r	  )
rj  r]   r^   rm   r   rs   r   r   	DIFFICULT
DYNAMO_BUG)r3   r`   type_strs      r5   rj   z%WithEnterFunctionVariable.reconstruct  s    	+((..014883C3C3E2FGH 	QMCH:MghB #,,	
 #--		
 # 	+4>*H	+s   7B 'B+*B+r~   )r   r   r   r&   r   r   r1   r   r   r@   rs   r  r   r   ru   rj   r   r   s   @r5   r  r    s    $'EE  
	7-76E7KN7	7 T  >'> ?#> S/)*	>
 
>&
r6   r  c                        e Zd Zdhej                  ZdddededefdZdeez  de	d	e	dd
f fdZ
defdZdddee   d	eeef   defdZddZ xZS )WithExitFunctionVariabletargetr7   r$   r8   r9   r,   c                 $    ddl m}  || |||      S r;   r=   r?   s        r5   r@   z)WithExitFunctionVariable.richcompare_impl  rA   r6   rj  r+   Nc                     t        |   di | t        |t        t        f      st        dt        |             || _        || _        y )NzMctx must be a ContextWrappingVariable or GenericContextWrappingVariable, got r/   )	r0   r1   rr   r&   r   rq   rs   rj  r  )r3   rj  r  r+   r4   s       r5   r1   z!WithExitFunctionVariable.__init__$  sZ     	"6")+IJ
 !_`deh`i_jk  r6   c                 "    t         j                  S rW   r  rn   s    r5   r  z$WithExitFunctionVariable.python_type4  r  r6   rU   c                 V    |rt        d       | j                  j                  |g| S )Nz8WithExitFunctionVariable.call_function expects no kwargs)rq   rj  rZ   rt   s       r5   ru   z&WithExitFunctionVariable.call_function7  s3      J  txx}}R'$''r6   c                 :    | j                   j                  |       y rW   )rj  ra   r_   s     r5   rj   z$WithExitFunctionVariable.reconstructC  s     	!!'*r6   r~   )r   r   r   r   r   r   r@   r&   r   r   r1   rs   r  r   r   ru   rj   r   r   s   @r5   r  r    s    		'	'N
7-76E7KN7	7$'EE  	
 
  T  
('
( ?#
( S/)*	
(
 

(+r6   r  )gr   r  r  loggingr  r%  collections.abcr   r   r   r   r   typingr   r	   torch._Cr   torch._dynamor
   torch._guardsr   torch._loggingr    r   r   bytecode_transformationr   excr   guardsr   r   r   r   r   utilsr   r   baser   	functionsr   r   r   r   r   r   r    r!   user_definedr"   torch._dynamo.codegenr#   torch._dynamo.symbolic_convertr$   	getLoggerr   r  r&   r   r   r   r   r   r   r   r  r  r  r4  rD  r`  ru  r  r  r  r  ry  r  r  r  r  r   rs   r  r  r  r  r  r  r  r   r   r$  r>  rO  ri  ry  r  r  r  r  r/   r6   r5   <module>r     s  (      5 5 8 %     ' + :  0 2 H !	 	 	 4 /Hg!no nb+%> +\.; .(")+I ")J)70G )7X%77N %7P*7,C *7Z*?&= *?Z*45 *4Z(7-D (7V.'&= .'b57-D 57pF&. F&RH$3 H$V/"3 /"d!. ! -  .%: .$ 
JJ)	II'	""$BH T$-B(C"CD ??(,-B(C?	?;;	
 4';S-#: S-l>3(? >3BI02 I0X&1 &6%
5 %
Ps.,C s.lL
%< L
^I$-D I$X]30 ]3@.
"9 .
b%& 7 %&P8 7 8::7 7 :7z6
 6
r0+ 0+r6   