
    qiz                        d 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mZmZ ddlZddlmZ ddlmZmZ dd	lmZmZ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.m/Z/m0Z0 ddl1m2Z2 erddl3m4Z4 ddl5m6Z6  G d de'      Z7 G d de2      Z8 G d de8      Z9 G d de7      Z: G d de7      Z; G d de7      Z< G d  d!e7      Z= G d" d#e7      Z> G d$ d%e7      Z? G d& d'e7      Z@ G d( d)e7      ZA G d* d+e7      ZB G d, d-e7      ZC G d. d/e7      ZD G d0 d1e7      ZE G d2 d3e7      ZF G d4 d5e7      ZG G d6 d7e7      ZH G d8 d9e7      ZI G d: d;e7      ZJ G d< d=e7      ZK G d> d?e7      ZL G d@ dAe7      ZM G dB dCe7      ZN G dD dEe7      ZO G dF dGe7      ZP G dH dIe'      ZQ G dJ dKe'      ZRy)La)  
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OptionalTYPE_CHECKINGUnion)Guard   )graph_break_hints	variables)create_call_functioncreate_instructioncreate_setup_with)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InstructionTranslatorc            	       "    e Zd Zddddhej                  Z	 ddedee   deddf fdZd	d
defdZ	 dd	d
dee	def      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       i/home/ubuntu/crypto_trading_bot/.venv/lib/python3.12/site-packages/torch/_dynamo/variables/ctx_manager.pyr4   z ContextWrappingVariable.__init__E   s%     	"6"*,    txr'   c                     t        | d      r| j                  || j                         | j                  |       t        j
                  j                  d       S N
_call_func)hasattrr=   r+   set_cleanup_hookr   ConstantVariablecreater6   r:   s     r8   enterzContextWrappingVariable.enterL   sE    4&OOB 2 23b!))0066r9   fn.c                 r     |d fd}| _         j                  j                   j                         y )Nc                  X    t         d      r j                   j                         y y r<   )r>   r=   r,   rB   s   r8   rD   z4ContextWrappingVariable.set_cleanup_hook.<locals>.fnW   s&    4.OOB(;(;< /r9   r/   N
cleanup_fnoutputadd_cleanup_hookcleanup)r6   r:   rD   s   `` r8   r?   z(ContextWrappingVariable.set_cleanup_hookR   s.     := 9;
		""4<<0r9   argsc                 `    | j                          t        j                  j                  d       S N)cleanup_assertr   r@   rA   r6   r:   rM   s      r8   exitzContextWrappingVariable.exit^   s'     	))0066r9   c                      |t        |j                  j                  | j                               | j	                                      y rO   )r   r:   import_sourcemodule_namefn_namer6   codegens     r8   reconstruct_typez(ContextWrappingVariable.reconstruct_typed   s2    wzz//0@0@0BCT\\^T	
r9   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 rO   )rY   )rX   r6   s   r8   <lambda>z5ContextWrappingVariable.reconstruct.<locals>.<lambda>j   s    d&;&;G&D r9   r2   F)add_push_nullr+   extend_outputcreate_load_constr   len)r6   rX   r+   vals   ``  r8   reconstructz#ContextWrappingVariable.reconstructi   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r6   s    r8   rU   z#ContextWrappingVariable.module_nameq   s    !">??r9   c                     t        d      )Nzfn_name called on baserd   rf   s    r8   rV   zContextWrappingVariable.fn_namet   s    !":;;r9   c                    t        |      dk(  sJ t        |d   t        t        t        t
        f      sJ 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   r   zUnexpected arg type)r`   
isinstancer   r   r   r   r    r!   r#   r"   AssertionErrorr6   r:   rM   r.   s       r8   call_functionz%ContextWrappingVariable.call_functionw   s     4yA~~G*$"$	
 	
 
 d1g9:4T!WdCCQ!56.tAw==Q!34,T!Wd;;Q!56.tAw== !677r9   c                      yNTr2   rf   s    r8   supports_graph_breaksz-ContextWrappingVariable.supports_graph_breaks       r9   c                      yrn   r2   rf   s    r8   exit_on_graph_breakz+ContextWrappingVariable.exit_on_graph_break   rp   r9   c                 L    | j                   | j                          d | _         y y rO   )rI   rf   s    r8   rL   zContextWrappingVariable.cleanup   s"    ??&OO"DO 'r9   c                 J    | j                   sJ d       | j                          y )Nzmultiple exits?)rI   rL   rf   s    r8   rP   z&ContextWrappingVariable.cleanup_assert   s    1 11r9   rO   rX   r%   r/   NrG   )__name__
__module____qualname__r   _nonvar_fieldsr   r	   r4   rC   r   r?   rR   rY   rb   strrU   rV   r   dictrl   boolro   rr   rL   rP   __classcell__r7   s   @r8   r)   r)   <   s:   	
 
	'	'N CG- -2:3--RU-	-7/ 7O 7 OS
1)
1/7c8J/K
1	
17)72A7	7

O@S @< <8#8 '8 S/)*	8
 
88t T #
r9   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                 T    |J t        |   d||j                  d| || _        y )N)value
value_typer2   )r3   r4   r7   r*   )r6   r*   r.   r7   s      r8   r4   z'GenericContextWrappingVariable.__init__   s@    !!! 	
''	
 	

 r9   c                 .    | j                   j                  S rO   )r*   rw   rf   s    r8   rU   z*GenericContextWrappingVariable.module_name   s    {{%%%r9   c                 @    t        | j                        j                  S rO   )typer*   rv   rf   s    r8   rV   z&GenericContextWrappingVariable.fn_name   s    DKK )))r9   r:   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__rl   )r6   r:   r   s      r8   rC   z$GenericContextWrappingVariable.enter   sY    ,*T[[+2V++KK!!**
 -B
#		$r9   rM   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   rl   listactive_generic_context_managerspop)r6   r:   rM   r   xs        r8   rR   z#GenericContextWrappingVariable.exit   sx     ,*T[[*2U((KK  ))
 -DJ
+	 	

 	**..0r9   c                      yNFr2   rf   s    r8   ro   z4GenericContextWrappingVariable.supports_graph_breaks   s    r9   c                      yrn   r2   rf   s    r8   rr   z2GenericContextWrappingVariable.exit_on_graph_break   rp   r9   )rv   rw   rx   r   r   r4   rz   rU   rV   r   rC   rR   r|   ro   rr   r}   r~   s   @r8   r   r      s    5c: c d &S &* *$/ $O $
)
2A
	
t T r9   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 rO   )cm_vtr   )r6   r   r   s      r8   r4   z-RepararametrizeModuleContextVariable.__init__   s    #
r9   r:   r'   c                    | j                   j                  |d      j                         | _        | j                   j                  |d      j                         | _        |j
                  j                  j                  | j                         |j
                  j                  j                  | j                         | j                  j                  |      S )N_parameters_buffers)
r   var_getattrrealizeold_parameters_varold_buffer_varrJ   side_effectsignore_mutations_onr   rC   rB   s     r8   rC   z*RepararametrizeModuleContextVariable.enter   s     #'(("6"6r="I"Q"Q"S"hh222zBJJL
		2243J3JK
		2243F3FGzz##r9   rM   c                      | j                   j                  |g| }|j                  j                  j	                  | j
                         |j                  j                  j	                  | j                         |S rO   )r   rR   rJ   r   stop_ignoring_mutations_onr   r   )r6   r:   rM   r   s       r8   rR   z)RepararametrizeModuleContextVariable.exit   s^     DJJOOB&&
		99$:M:MN
		99$:Q:QRr9   namec                 .    t        | j                  |      S rO   )getattrr   )r6   r   s     r8   __getattr__z0RepararametrizeModuleContextVariable.__getattr__   s    tzz4((r9   )rv   rw   rx   r)   r   r4   r   rC   rR   rz   r   r2   r9   r8   r   r      sa    '> S T 
$/ $O $)2A	) ) )r9   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 gradr:   r'   r+   r.   r/   c                     t        d|d d|S Nr+   r,   r2   )r   r:   r+   r.   s      r8   rA   z0GradInplaceRequiresGradCtxManagerVariable.create   s&     9 
'
 
 	
r9   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 rO   )torch_C
_functorch!set_inplace_requires_grad_allowed
prev_staterf   s   r8   r\   zAGradInplaceRequiresGradCtxManagerVariable.enter.<locals>.<lambda>  s#    EHH''II r9   rl   )r+   r   r   r   !get_inplace_requires_grad_allowedr   r   r?   rJ   create_nodeproxyr   r@   rA   )r6   r:   enableds   `  r8   rC   z/GradInplaceRequiresGradCtxManagerVariable.enter   s    &&	((--OOQ==gF	
 YY**HHAAJ	

 ))0066r9   rM   c                     | j                          |j                  j                  dt        j                  j
                  j                  | j                  fi        t        j                  j                  d       S Nrl   )rL   rJ   r   r   r   r   r   r   r   r@   rA   rQ   s      r8   rR   z.GradInplaceRequiresGradCtxManagerVariable.exit  s[     	
		HHAA__		
 ))0066r9   N
rv   rw   rx   __doc__staticmethodr   rA   r   rC   rR   r2   r9   r8   r   r      sh    -
#
47
CF
	4
 
7/ 7O 7$
7)
72A
7	
7r9   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()r:   r'   r+   r.   r/   c                     t        d|d d|S r   )r   r   s      r8   rA   z7TemporarilyPopInterpreterStackCtxManagerVariable.create  s'     @ 
'
 
 	
r9   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 rO   )r   r   r   push_dynamic_layer_stacksavedrf   s   r8   r\   zHTemporarilyPopInterpreterStackCtxManagerVariable.enter.<locals>.<lambda>+  s     EHH''@@L r9   rl   r2   )r   r   r   pop_dynamic_layer_stackr   r?   rJ   r   r   r   r@   rA   rB   s   ` r8   rC   z6TemporarilyPopInterpreterStackCtxManagerVariable.enter'  s~    XX((@@B
L	
 YY**HH77	

 ))0066r9   rM   c                     | j                          |j                  j                  dt        j                  j
                  j                  | j                  fi        t        j                  j                  d       S r   )rL   rJ   r   r   r   r   r   r   r   r@   rA   rQ   s      r8   rR   z5TemporarilyPopInterpreterStackCtxManagerVariable.exit5  sZ     	
		HH88ZZM		
 ))0066r9   Nr   r2   r9   r8   r   r     sh    T
#
47
CF
	;
 
7/ 7O 7
7)
72A
7	
7r9   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 nestingr:   r'   r.   r/   c                 "    t        dd d d|}|S r   )r   r:   r.   vars      r8   rA   z,JvpIncrementNestingCtxManagerVariable.createL  s*     4 

 

 
r9   c                 j   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 rO   )r   r   eager_transformsexit_jvp_nestingr2   r9   r8   r\   z=JvpIncrementNestingCtxManagerVariable.enter.<locals>.<lambda>[  s    ((99JJL r9   rl   r2   )r   _guards_singletonr   r   r   enter_jvp_nestingr?   rJ   r   r   _jvp_increment_nestingr   r   r@   rA   )r6   r:   	jvp_levels      r8   rC   z+JvpIncrementNestingCtxManagerVariable.enterW  s    d,,-$$55GGI	L	
 YY**HH66	

 ))00;;r9   rM   c                     | j                          |j                  j                  dt        j                  j
                  j                  di        t        j                  j                  d       S Nrl   r2   )
rL   rJ   r   r   r   r   _jvp_decrement_nestingr   r@   rA   rQ   s      r8   rR   z*JvpIncrementNestingCtxManagerVariable.exite  sQ     	
		UXX00GGR	
 ))0066r9   Nrv   rw   rx   r   r   r   r   FUNCTORCH_STACK_MATCHr   r   r   rA   r   rC   rR   r2   r9   r8   r   r   B  sy    ? /1<3U3UV#/2	0 </ <O <7)72A7	7r9   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)SetFwdGradEnabledContextManagerzWrepresents torch.autograd.forward_ad._set_fwd_grad_enabled() to enable/disable fwd gradr:   r'   r+   r.   r/   c                     t        d|d d|S r   )r   r   s      r8   rA   z&SetFwdGradEnabledContextManager.creater  s&     / 
'
 
 	
r9   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 rO   )r   r   _set_fwd_grad_enabledr   rf   s   r8   r\   z7SetFwdGradEnabledContextManager.enter.<locals>.<lambda>  s    EHH224??C r9   rl   )r+   r   r   _is_fwd_grad_enabledr   r   r?   rJ   r   r   r   r@   rA   )r6   r:   modes   `  r8   rC   z%SetFwdGradEnabledContextManager.enter|  s    ##((779&&t,C	
 YY**HH**G	

 ))0066r9   rM   c                     | j                          |j                  j                  dt        j                  j
                  | j                  fi        t        j                  j                  d       S r   )
rL   rJ   r   r   r   r   r   r   r@   rA   rQ   s      r8   rR   z$SetFwdGradEnabledContextManager.exit  sU     	
		HH**__		
 ))0066r9   Nr   r2   r9   r8   r   r   o  sh    a
#
47
CF
	*
 
7/ 7O 7 
7)
72A
7	
7r9   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
)DualLevelContextManagerz;Represents torch.autograd.forward_ad.dual_level ctx managerr:   r'   r.   r/   c                     t        dd d d|S r   )r   )r:   r.   s     r8   rA   zDualLevelContextManager.create  s$    & 

 
 	
r9   c                 z    t         j                         t        j                  j                  j                          _         j                  | fd       |j                  j                  dt        j                  j                  di        _        t        j                  j                   j                        S )Nc                  l    t         j                  j                  j                   j                        S )N)level)r   autograd
forward_adexit_dual_level	new_levelrf   s   r8   r\   z/DualLevelContextManager.enter.<locals>.<lambda>  s#    11AAAW r9   rl   r2   )r   r   r   r   r   enter_dual_levelr   r?   rJ   r   r   _enter_dual_levelr   r   r@   rA   rB   s   ` r8   rC   zDualLevelContextManager.enter  s    d,,-22CCEW	
 YY**HH&&	

 ))00@@r9   rM   c                     | j                          |j                  j                  dt        j                  j
                  | j                  fi        t        j                  j                  d       S r   )
rL   rJ   r   r   r   _exit_dual_levelr   r   r@   rA   rQ   s      r8   rR   zDualLevelContextManager.exit  sU     	
		HH%%^^		
 ))0066r9   N)rv   rw   rx   r   r   r   r   
DUAL_LEVELr   r   r   rA   r   rC   rR   r2   r9   r8   r   r     sy    E/1<3J3JK
* 
c 
>W 
 
A/ AO A
7)
72A
7	
7r9   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 nestingr:   r'   r.   r/   c                 "    t        dd d d|}|S r   )r   r   s      r8   rA   z-GradIncrementNestingCtxManagerVariable.create  s*     5 

 

 
r9   c                 j   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 rO   )r   r   r   _grad_decrement_nestingr2   r9   r8   r\   z>GradIncrementNestingCtxManagerVariable.enter.<locals>.<lambda>      %((*=*=*U*U*W r9   rl   r2   )r   r   r   r   r   _grad_increment_nestingr?   rJ   r   r   r   r@   rA   )r6   r:   
grad_levels      r8   rC   z,GradIncrementNestingCtxManagerVariable.enter  s    d,,-XX((@@B
b"WXYY**HH77	

 ))00<<r9   rM   c                     | j                          |j                  j                  dt        j                  j
                  j                  di        t        j                  j                  d       S r   )
rL   rJ   r   r   r   r   r   r   r@   rA   rQ   s      r8   rR   z+GradIncrementNestingCtxManagerVariable.exit  sQ     	
		UXX00HH"b	
 ))0066r9   Nr   r2   r9   r8   r   r     sy    @ /1<3U3UV#/2	1 
=/ 
=O 
=7)72A7	7r9   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	e
   d	e	e
   d
e
ddf
 fdZdddefdZddZ xZS )CatchWarningsCtxManagerVariablez'Delay a call to warnings.catch_warningsr:   r'   catch_warnings_argsr/   c                     t        |d d       S )N)r   r+   r,   )r   )r:   r   s     r8   rA   z&CatchWarningsCtxManagerVariable.create  s     / 3
 	
r9   Nr+   r,   r.   c                 f    t        |t              sJ |       t        |   d||d| || _        y r   )ri   r{   r3   r4   r   )r6   r   r+   r,   r.   r7   s        r8   r4   z(CatchWarningsCtxManagerVariable.__init__  sE     -t4I6II4 	
'	
JP	
 $7 r9   c                 4   | 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 rO   )r   )ctx_vals   r8   r\   z7CatchWarningsCtxManagerVariable.enter.<locals>.<lambda>  s    '*:*:4t*L r9   r2   )
r   itemsas_python_constantwarningscatch_warningsr?   r   r@   rA   r   )r6   r:   kvr.   r  s        @r8   rC   z%CatchWarningsCtxManagerVariable.enter  s    262J2J2P2P2R
*.!QAq##%%
 
 ))3F3b"LM))001B1B1DEE
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)cgs   r8   r\   z=CatchWarningsCtxManagerVariable.reconstruct.<locals>.<lambda>  s    !4!4ZAQ!R r9   F)	r]   foreachr   valuestuplekeysr^   create_call_function_kwr`   )r6   r  r  s    ` r8   rb   z+CatchWarningsCtxManagerVariable.reconstruct  sg    
RS


4++2245T--2245
33CItUKLr9   )NNr  r%   r/   N)rv   rw   rx   r   r   r{   rz   r   rA   r	   r   r4   rC   rb   r}   r~   s   @r8   r   r     s    1
#
:>sO?S:T
	*
 
 (,(,	7!#"677  }7 !	7
 7 
7F/ FO FMr9   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 nestingr:   r'   r+   r.   r/   c                 "    t        d|d d|}|S r   )r  )r:   r+   r.   r   s       r8   rA   z-VmapIncrementNestingCtxManagerVariable.create  s*     5 
'
 

 
r9   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 rO   )r   r   r   _vmap_decrement_nestingr2   r9   r8   r\   z>VmapIncrementNestingCtxManagerVariable.enter.<locals>.<lambda>7  r   r9   rl   )r   r   r+   ri   r   SymNodeVariablesym_numr  r   r   r   _vmap_increment_nestingr?   rJ   create_proxypredispatchas_proxyr   r@   rA   )r6   r:   
batch_size
randomnessbatch_size_value
vmap_levels         r8   rC   z,VmapIncrementNestingCtxManagerVariable.enter,  s    d,,-!%!3!3
Jj)";";<)11)<<>224
XX((@@j

 	b"WXYY++((@@  "J/	

 ))00<<r9   rM   c                     | j                          |j                  j                  dt        j                  j
                  j                  di        t        j                  j                  d       S r   )
rL   rJ   r   r   r   r  r  r   r@   rA   rQ   s      r8   rR   z+VmapIncrementNestingCtxManagerVariable.exit@  sV     	
		((@@		
 ))0066r9   N)rv   rw   rx   r   r   r   r   r   r   r   r   r   r   rA   rC   rR   r2   r9   r8   r  r    s    ; /1<3U3UV
#
0
 
 
2	
 
=/ =O =(
7)
72A
7	
7r9   r  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e      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 xZS )GradModeVariablez6represents torch.{no_grad,enable_grad,set_grad_mode}()r:   r'   target_valueinitializedr.   r/   c                     t        d|gt        j                         gd|}|r|j                  | |j                         |S r   )r'  r   is_grad_enabledr=   r+   )r:   r(  r)  r.   r   s        r8   rA   zGradModeVariable.createR  sO      
'.!1134
 

 NN2s001
r9   Nr+   r,   c                 T    t        |   d||d| t        | j                         y r   r3   r4   r   r   )r6   r+   r,   r)  r.   r7   s        r8   r4   zGradModeVariable.__init__b  s4     	 	
'	
JP	
 	d,,-r9   c                 x    | j                  || j                         t        j                  j	                  d       S rO   r=   r+   r   r@   rA   rB   s     r8   rC   zGradModeVariable.entern  -    D../))0066r9   rM   c                 x    | j                  || j                         t        j                  j	                  d       S rO   r=   r,   r   r@   rA   rQ   s      r8   rR   zGradModeVariable.exitr  /     	D//0))0066r9   c                 ^    | j                  || j                         t        |   |||      S rO   r=   r,   r3   rl   r6   r:   rM   r.   r7   s       r8   rl   zGradModeVariable.call_functionx  s-     	D//0w$Rv66r9   r  c                 
   t        |      dk(  sJ |d   }t        j                         |k7  rW|j                  j	                  dt        j
                  j                  |fi        t        j
                  j                  |       y y Nr   r   rl   )r`   r   r+  rJ   r   r   _set_grad_enabledr6   r:   r  r   s       r8   r=   zGradModeVariable._call_func  sn    6{aq	  "e+II!!!;!;eXr HH&&u-	 ,r9   c                      yNr   r2   rf   s    r8   rU   zGradModeVariable.module_name      r9   c                      y)Nset_grad_enabledr2   rf   s    r8   rV   zGradModeVariable.fn_name  s    !r9   Frn   )rv   rw   rx   r   r   r   r   	GRAD_MODEr   r   r   r|   rA   r	   r   r4   r   rC   rR   r{   rz   rl   r=   rU   rV   r}   r~   s   @r8   r'  r'  M  sF   @/1<3I3IJ "#  	
 
 $ 48 	
.
. !$0
. 	
.
 
. 

.7/ 7O 77)72A7	77#7 '7 S/)*	7
 
7.4 .c .d .S " "r9   r'  c            	            e Zd Zedddededd fd       Z	 dded	ee   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 xZS )InferenceModeVariabler:   r'   r(  r.   r/   c                 H    t        |gfdt        j                         i|}|S )Nr,   )rC  r   is_inference_mode_enabledr:   r(  r.   r   s       r8   rA   zInferenceModeVariable.create  s3     $N
+0+J+J+L
PV
 
r9   Nr+   r,   c                 V    |t        j                         }t        |   d||d| y r   )r   rE  r3   r4   r5   s       r8   r4   zInferenceModeVariable.__init__  s8     !"<<>N 	
'	
JP	
r9   rM   c                     | j                          |j                  j                  dt        j                  j
                  j                  | j                  fi        t        j                  j                  d       S r   )rP   rJ   r   r   r   	grad_mode_exit_inference_moder   r   r@   rA   rQ   s      r8   rR   zInferenceModeVariable.exit  s]     	
		NN$$99ZZM		
 ))0066r9   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 rO   )r   r   r9  r   rI  rJ  )ctx disabled_inference_mode_forciblypriors   r8   cleanup_hookz1InferenceModeVariable.enter.<locals>.cleanup_hook  s0    /**51((==cBr9   rl   rG   )r   _dynamoconfig"fake_tensor_disable_inference_moder+   r+  r   r9  r   rI  _enter_inference_moder?   rJ   r   r   r   r@   rA   )r6   r:   rP  rM  rN  rO  s      @@@r8   rC   zInferenceModeVariable.enter  s    +0(MM  CC""1%
 04,))+EHH&&u-..**@@$BTBTUC	C 	b,/YY**NN$$::"d  "	

 ))0066r9   c                      yr<  r2   rf   s    r8   rU   z!InferenceModeVariable.module_name  r=  r9   c                      y)Ninference_moder2   rf   s    r8   rV   zInferenceModeVariable.fn_name  s    r9   rO   )rv   rw   rx   r   r   rA   r	   r|   r4   r   rR   rC   rz   rU   rV   r}   r~   s   @r8   rC  rC    s    #36BE	   *.

 !
 	

 


7)
72A
7	
77/ 7O 7<S    r9   rC  c            	            e Zd ZdZedddededd fd       Z	 dd	ed
ee   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 xZS )CUDADeviceVariablezrepresents torch.cuda.devicer:   r'   devicer.   r/   c                 b    t        dt        j                  j                  |d      gd d|}|S )NT)optionalr   r2   )rY  r   cuda_get_device_index)r:   rZ  r.   r   s       r8   rA   zCUDADeviceVariable.create  sA     ! 
 ::777NO
 

 
r9   Nr+   r,   c                 *    t        |   d||d| y r   r3   r4   r5   s       r8   r4   zCUDADeviceVariable.__init__  $     	 	
'	
JP	
r9   rM   c                     | j                          |j                  j                  dt        j                  j
                  | j                  fi        t        j                  j                  d      S )Nrl   F)
rP   rJ   r   r   r]  _maybe_exchange_devicer   r   r@   rA   rQ   s      r8   rR   zCUDADeviceVariable.exit  sW     	
		JJ--ZZM		
 ))0077r9   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 rO   )r   r]  rc  )prev_idxs   r8   r\   z*CUDADeviceVariable.enter.<locals>.<lambda>   s    %***K*KH*U r9   rl   )r   r]  _exchange_devicer+   r?   rJ   r   r   r   r@   rA   )r6   r:   rf  s     @r8   rC   zCUDADeviceVariable.enter  s~    ::..0B0BCb"UVYY**JJ''"d  "	

 ))0066r9   c                      y)Nz
torch.cudar2   rf   s    r8   rU   zCUDADeviceVariable.module_name	      r9   c                      y)NrZ  r2   rf   s    r8   rV   zCUDADeviceVariable.fn_name  s    r9   rO   )rv   rw   rx   r   r   r   rA   r	   r4   r   rR   rC   rz   rU   rV   r}   r~   s   @r8   rY  rY    s    &#-0<?	  )-

 !
 	

 


8)
82A
8	
8	7/ 	7O 	7S  r9   rY  c                        e Zd ZdZ e e       ej                        Ze	ddde
dd fd       Z	 	 dded	ee   d
ede
ddf
 fdZ	 ddddeede
f      ddfdZdddedd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 notr:   r'   r.   r/   c                 "    t        dg g d|}|S r   )rl  r   s      r8   rA   z#TorchFunctionDisableVariable.create  s*     + 

 

 
r9   Nr+   r,   only_subclassc                 @   t        |      dk(  sJ |t        |      dk(  sJ ddlm}  |j                         }|| _        |j
                  j                  | _        |j
                  j                  | _	        t        | ,  d||d| t        | j                         y )Nr   r   r&   r   r2   )r`   symbolic_convertr'   
current_txrn  symbolic_torch_function_statetorch_function_subclass_enabled'initial_torch_function_subclass_enabledtorch_function_mode_enabled#initial_torch_function_mode_enabledr3   r4   r   r   )r6   r+   r,   rn  r.   r'   r:   r7   s          r8   r4   z%TorchFunctionDisableVariable.__init__   s     =!Q&&&)c..AQ.FFF<-"--/*,,LL 	4 ,,HH 	0 	 	
'	
JP	
 	d,,-r9   rI   .c                 r     |d fd}| _         j                  j                   j                         y )Nc                       j                   j                  _         j                  s j                   j                  _        y y rO   )rt  rr  rs  rn  ru  rB   s   r8   rI   zATorchFunctionDisableVariable.set_cleanup_hook.<locals>.cleanup_fn@  sA    @@ 00P ))DD 44P *r9   rG   rH   )r6   r:   rI   s   `` r8   r?   z-TorchFunctionDisableVariable.set_cleanup_hook9  s/    
  %
		""4<<0r9   r  c                     t        |      dk(  sJ d|j                  _        | j                  sd|j                  _        y y )Nr   F)r`   rr  rs  rn  ru  r6   r:   r  s      r8   r=   z'TorchFunctionDisableVariable._call_funcL  s>    6{aKP((H!!KPB,,H "r9   c                      y)Nztorch._Cr2   rf   s    r8   rU   z(TorchFunctionDisableVariable.module_nameR      r9   c                     | j                   ryy)NDisableTorchFunctionSubclassDisableTorchFunction)rn  rf   s    r8   rV   z$TorchFunctionDisableVariable.fn_nameU  s    1%r9   rn   rO   )rv   rw   rx   r   r   r   r   TORCH_FUNCTION_STATEr   r   r   rA   r   r	   r|   r4   r   r?   r=   rz   rU   rV   r}   r~   s   @r8   rl  rl    s    H/1<3T3TU#/2	'  +/"	.. !. 	.
 . 
.8 481#1 Xc3h/01 
	1&Q4 Qe Q QS & &r9   rl  c            	            e Zd ZdZ e e       ej                        Ze	ddde
dedd fd       Z	 dd	ee
   d
eee
      deddf fdZddde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 )DeterministicAlgorithmsVariablezVrepresents torch.{are_deterministic_algorithms_enabled,use_deterministic_algorithms}()r:   r'   r(  r.   r/   c                     t        d|gt        j                         gd|}|j                  | |g       |j	                  |        |S r   )r  r   $are_deterministic_algorithms_enabledr=   r?   rF  s       r8   rA   z&DeterministicAlgorithmsVariable.createc  sV     . 
'.!FFHI
 

 	rL>*R 
r9   Nr+   r,   c                 T    t        |   d||d| t        | j                         y r   r-  r5   s       r8   r4   z(DeterministicAlgorithmsVariable.__init__p  s4     	 	
'	
JP	
 	d,,-r9   c                 @    t         j                  j                  d       S rO   r   r@   rA   rB   s     r8   rC   z%DeterministicAlgorithmsVariable.enter{      ))0066r9   r  c                     t        |      dk(  sJ |d   }|j                  j                  dt        j                  j
                  |fi        t        j                  j                  |       y r8  )r`   rJ   r   r   r   _set_deterministic_algorithmsr:  s       r8   r=   z*DeterministicAlgorithmsVariable._call_func~  sX    6{aq	
		UXXCCeXr	
 	..u5r9   c                      yr<  r2   rf   s    r8   rU   z+DeterministicAlgorithmsVariable.module_name  r=  r9   c                      y)Nuse_deterministic_algorithmsr2   rf   s    r8   rV   z'DeterministicAlgorithmsVariable.fn_name  s    -r9   rO   )rv   rw   rx   r   r   r   r   DETERMINISTIC_ALGORITHMSr   r   r|   r   rA   r   r	   r4   r   rC   r=   rz   rU   rV   r}   r~   s   @r8   r  r  [  s    `--
 
#
37
CF
	*
 
 48	.~	. !$0	. 		.
 
	.7/ 7O 764 6htn 6QU 6S . .r9   r  c            	            e Zd ZdZedddee   dedd fd       Z	 dd	e	ee      d
ee	ee         deddf fdZ
dddefdZddde	ee      dd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.r:   r'   r(  r.   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_messager=   r?   rF  s       r8   rA   z(DisabledSavedTensorsHooksVariable.create  sb     0 
'.""RRT

 
 	rL>*R 
r9   Nr+   r,   c                 *    t        |   d||d| y r   r`  r5   s       r8   r4   z*DisabledSavedTensorsHooksVariable.__init__  ra  r9   c                 @    t         j                  j                  d       S rO   r  rB   s     r8   rC   z'DisabledSavedTensorsHooksVariable.enter  r  r9   r  c                    t        |      dk(  sJ |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   r   rl   r2   )r`   rJ   r   r   r   r  _saved_tensors_hooks_disable_saved_tensors_hooks_enabler:  s       r8   r=   z,DisabledSavedTensorsHooksVariable._call_func  s     6{aq	 II!!""??	 HH;;EB II!!!3!3!O!OQSUW HH::<r9   c                      y)Nztorch.autograd.graphr2   rf   s    r8   rU   z-DisabledSavedTensorsHooksVariable.module_name      %r9   c                      y)Ndisable_saved_tensors_hooksr2   rf   s    r8   rV   z)DisabledSavedTensorsHooksVariable.fn_name  s    ,r9   rO   )rv   rw   rx   r   r   r	   rz   r   rA   r   r4   r   rC   r=   rU   rV   r}   r~   s   @r8   r  r    s    E#3;C=LO	, " =A
.
 !(3-!89
 	

 

7/ 7O 7=)=3;HSM3J=	=.&S &- -r9   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e	   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 xZS )AutocastModeVariablefuncrM   r.   r/   c                 0   | t         j                  j                  j                  t         j                  j                  j                  t         j
                  j                  j                  fv sJ  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 )N)device_typedtyper   cache_enabledr  r]  cpur,   )r   ampautocast_modeautocastr]  r  inspect	signaturebindapply_defaultsclear	argumentsri   r   appendr  r  )r  rM   r.   
bound_argsr+   keyargr   s           r8   rA   zAutocastModeVariable.create  sK    II##,,JJNN##IIMM""
 
 	
 
 2W&&t,114B6B
!!#G 	*Cm#

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

(?(? ?fU **3/#/$$S%;%;%=>$$S)	* #=PPP
r9   Nr+   r,   c                 *    t        |   d||d| y r   r`  r5   s       r8   r4   zAutocastModeVariable.__init__  ra  r9   r:   r'   c                     | j                          |j                  j                  dt        j                  j
                  | j                  fi        t        j                  j                  d       S r   )
rP   rJ   r   r   r  _exit_autocastr   r   r@   rA   rQ   s      r8   rR   zAutocastModeVariable.exit  sT     	
		UYY55

}b	
 ))0066r9   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 rO   )r   r  r  )rM  s   r8   r\   z,AutocastModeVariable.enter.<locals>.<lambda>  s    %))*B*B3*G r9   rl   )r   r  _enter_autocastr+   r?   rJ   r   r   r   r@   rA   )r6   r:   rM  s     @r8   rC   zAutocastModeVariable.enter  s}    ii''););<b"GHYY**UYY668N$:L:L8NPR

 ))0066r9   c                      y)Nztorch.amp.autocast_moder2   rf   s    r8   rU   z AutocastModeVariable.module_name
  s    (r9   c                      y)Nr  r2   rf   s    r8   rV   zAutocastModeVariable.fn_name  r|  r9   rO   )rv   rw   rx   r   r   r  r  r  r   r   r{   rz   rA   r	   r4   r   rR   rC   rU   rV   r}   r~   s   @r8   r  r    s    !ii%%..!sm! S#X! 
 	! !L )-
}
 !
 	

 

7)72A7	77/ 7O 7)S ) r9   r  c                   t     e Zd ZdZdde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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+   r2   r`  )r6   r+   r.   r7   s      r8   r4   zNullContextVariable.__init__  s    ?}??r9   r:   r'   c                 t    t         j                  j                  d       }| j                  r| j                  S |S rO   )r   r@   rA   r+   )r6   r:   nones      r8   rC   zNullContextVariable.enter  s1    ))006%)%7%7t!!ATAr9   rM   c                 @    t         j                  j                  d       S rO   r  rQ   s      r8   rR   zNullContextVariable.exit       ))0066r9   c                      yN
contextlibr2   rf   s    r8   rU   zNullContextVariable.module_name"  ri  r9   c                      yNnullcontextr2   rf   s    r8   rV   zNullContextVariable.fn_name%      r9   rO   )rv   rw   rx   r   r	   r   r4   r   rC   rR   rz   rU   rV   r}   r~   s   @r8   r  r    sv    @hsm @c @d @B/ BO B7)72A7	7
S  r9   r  c                   p     e Zd Z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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`  )r6   r.   r7   s     r8   r4   z ProfilerContextVariable.__init__2  s    6t6v6r9   r:   r'   c                     | S rO   r2   rB   s     r8   rC   zProfilerContextVariable.enter5  s    r9   rM   c                 @    t         j                  j                  d       S rO   r  rQ   s      r8   rR   zProfilerContextVariable.exit8  r  r9   c                      yr  r2   rf   s    r8   rU   z#ProfilerContextVariable.module_name=  ri  r9   c                      yr  r2   rf   s    r8   rV   zProfilerContextVariable.fn_name@  r  r9   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   rz   r   SUPPORTABLE)r6   r  s     r8   rb   z#ProfilerContextVariable.reconstructC  s*    HIr"..		
r9   r  )rv   rw   rx   r   r   r4   r   rC   rR   rz   rU   rV   rb   r}   r~   s   @r8   r  r  )  si    7 7 7/ O 7)72A7	7
S  
r9   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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
    r:   r'   tensorsr/   c           	         |j                         rKt        j                  |fD cg c]  }|j                  | d       c}      }t        j                  |g      }n[t	        |t        j                        sJ t        j                  |j
                  D cg c]  }|j                  | d       c}      }|}t        ||      S c c}w c c}w )N_version)	is_tensorr   TupleVariabler   ri   r  r  )r:   r  r   versionstensors_tuples        r8   _create_lambda_from_tensorsz:PreserveVersionContextVariable._create_lambda_from_tensorsS  s    
  ..9@	B1r:.BH &33WI>Mgy'>'>??? ..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 rO   )r  r  )r  r:   s    r8   r\   z<PreserveVersionContextVariable.constructor.<locals>.<lambda>h  s    :VVG r9   )r   LambdaVariable)r:   s   `r8   constructorz*PreserveVersionContextVariable.constructore  s    ''
 	
r9   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  )	
setdefaultr3   r4   r  r  r  r   r  is_symnode_like)r6   r  r  r.   r7   s       r8   r4   z'PreserveVersionContextVariable.__init__m  s     	/40"6"*<<!!#$22DLL>BDL--/!*!8!8$:L:L9M!ND 0r9   c                 @    t         j                  j                  d       S rO   r  rB   s     r8   rC   z$PreserveVersionContextVariable.enter}  r  r9   rM   c                     ddl m} t        j                  |      j	                  || j
                  | j                  gi       S )Nr   )_unsafe_set_version_counter)tensor_version_opr  r   TorchInGraphFunctionVariablerl   r  r  )r6   r:   rM   r  s       r8   rR   z#PreserveVersionContextVariable.exit  s<     	D55'

-T\\4+=+=>
C	Dr9   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  rW   s     r8   rb   z*PreserveVersionContextVariable.reconstruct  s-    bIU"..
	
r9   ru   )rv   rw   rx   r   r   r   r  r  r   r4   rC   rR   rb   r}   r~   s   @r8   r  r  N  s     G#G G 
*G G" 
/ 
O 
 
O O 'O 	O
 
O 7/ 7O 7D)D2AD	D
r9   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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e	   ddfdZdefdZdefdZ xZS )&FSDPParamGroupUseTrainingStateVariabler:   r'   param_group_varr(  r.   r/   c                 P    t        d||g|j                  j                  gd|}|S )N)r  r+   r,   r2   )r  r   _training_state)r:   r  r(  r.   r   s        r8   rA   z-FSDPParamGroupUseTrainingStateVariable.create  s>     5 
+'.+11AAB
 	
 
r9   Nr+   r,   c                 b    t        |   d||d| || _        t        | j                         y r   )r3   r4   r  r   r   )r6   r  r+   r,   r.   r7   s        r8   r4   z/FSDPParamGroupUseTrainingStateVariable.__init__  s<     	 	
'	
JP	
  /d,,-r9   c                 x    | j                  || j                         t        j                  j	                  d       S rO   r/  rB   s     r8   rC   z,FSDPParamGroupUseTrainingStateVariable.enter  r0  r9   rM   c                 x    | j                  || j                         t        j                  j	                  d       S rO   r2  rQ   s      r8   rR   z+FSDPParamGroupUseTrainingStateVariable.exit  r3  r9   c                 ^    | j                  || j                         t        |   |||      S rO   r5  r6  s       r8   rl   z4FSDPParamGroupUseTrainingStateVariable.call_function  s-     	D//0w$Rv66r9   r  c                 L   t        |      dk(  sJ |d   }| j                  j                  j                  |k7  rl| j                  j	                  |dt
        j                  j                  d      t        j                  |      fi        || j                  j                  _        y y )Nr   r   __setattr__r  )	r`   r  r   r  call_methodr   r@   rA   EnumVariabler:  s       r8   r=   z1FSDPParamGroupUseTrainingStateVariable._call_func  s    6{aq	%%55>  ,,..556GH**51  :?D  &&6 ?r9   c                      y)NzDtorch.distributed.fsdp._fully_shard._fsdp_param_group.FSDPParamGroupr2   rf   s    r8   rU   z2FSDPParamGroupUseTrainingStateVariable.module_name  s    Ur9   c                      y)Nuse_training_stater2   rf   s    r8   rV   z.FSDPParamGroupUseTrainingStateVariable.fn_name      #r9   rO   )rv   rw   rx   r   r   r   FSDP_TRAINING_STATEr   r   r   rA   r   r	   r4   r   rC   rR   r{   rz   rl   r=   rU   rV   r}   r~   s   @r8   r  r    sF   /1<3S3ST#  	
 
2 $ 37	..  }. !#/	.
 . 
.7/ 7O 77)72A7	77#7 '7 S/)*	7
 
7?4 ?hsm ?PT ?VS V$ $r9   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 xZS )SDPAKernelVariablez)represents torch.nn.attention.sdpa_kernelr:   r'   backendsset_priorityr.   r/   c                     t        |t        j                  j                  j                        r|g}t        d|d |d|}|S )N)r+   r,   r  r2   )ri   r   nn	attention
SDPBackendr  )r:   r  r  r.   r   s        r8   rA   zSDPAKernelVariable.create  sN     h 2 2 = => zH  
"%
 	
 
r9   Nr+   r,   c                 8    t        |   d||d| || _        y r   )r3   r4   r  )r6   r+   r,   r  r.   r7   s        r8   r4   zSDPAKernelVariable.__init__  s.     	 	
'	
JP	
 )r9   c           	          |D cg c]M  }| j                   j                  dt        j                  j                  j
                  |j                  fi       O }}|S c c}w r   )rJ   r   r   r  r  _backend_from_stringr   )r:   r  backendnodess       r8   _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r  )r   r  r  _sdpa_kernelprev_backendsr  rf   s   r8   r\   z*SDPAKernelVariable.enter.<locals>.<lambda>  s2    EHH&&33""1B1B 4  r9   r  rl   )r   r  r  _cur_sdpa_kernel_backendsr  r  r?   r  r+   r  rJ   r   r|   r   r@   rA   )r6   r:   r  s   `  r8   rC   zSDPAKernelVariable.enter  s    "XX//II++ J 
 		
 	''T->-> 	( 	
 %%b$*<*<=
		HH++$t(()*		
 ))0066r9   rM   c                 B   | j                          | j                  || j                        }|j                  j	                  dt
        j                  j                  j                  |t        | j                        fi        t        j                  j                  d       S r   )rP   r  r  rJ   r   r   r  r  r  r|   r  r   r@   rA   )r6   r:   rM   r  s       r8   rR   zSDPAKernelVariable.exit'  s     	%%b$*<*<=
		HH++$t(()*		
 ))0066r9   c                      y)Nztorch.nn.attentionr2   rf   s    r8   rU   zSDPAKernelVariable.module_name4  r   r9   c                      y)N_sdpa_kernel_variadicr2   rf   s    r8   rV   zSDPAKernelVariable.fn_name9  s    &r9   r@  r   )rv   rw   rx   r   r   r   r|   rA   r   r   r  r  r	  r4   r  r   rC   rR   rz   rU   rV   r}   r~   s   @r8   r  r    s   3 ##  	
 
 & #"	
)EHH..99:
) 
) 	
)
 
) 

) #s) 
c  7/ 7O 7,7)72A7	7$S $
' 'r9   r  c            	       l     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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`  r5   s       r8   r4   z$FxTracebackAnnotateVariable.__init__G  s$     	 	
'	
JP	
r9   r:   r'   rM   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 rO   )close)stacks   r8   r\   z3FxTracebackAnnotateVariable.enter.<locals>.<lambda>W  s    %++- r9   )r   enter_contextr   fx	tracebackannotater+   preserve_node_metar?   r   r@   rA   )r6   r:   rM   r!  s      @r8   rC   z!FxTracebackAnnotateVariable.enterN  s~     EHH..778J8JKLEHH..AACDb"78))0066r9   c                      y)Nztorch.fx.tracebackr2   rf   s    r8   rU   z'FxTracebackAnnotateVariable.module_nameZ  r   r9   c                      y)Nr%  r2   rf   s    r8   rV   z#FxTracebackAnnotateVariable.fn_name]  r|  r9   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  rW   s     r8   rY   z,FxTracebackAnnotateVariable.reconstruct_type`  s*    NI\"..		
r9   rO   ru   )rv   rw   rx   r   r   r4   r   rC   rz   rU   rV   rY   r}   r~   s   @r8   r  r  =  sl     9=
 
25
HK
	

7)
72A
7	
7$S $ 
r9   r  c                   f     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
 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  r3   r4   r   rQ  rR  r   r,   )r6   r+   r.   target_values_tupleinitial_values_dictr  _r7   s          r8   r4   z"DynamoConfigPatchVariable.__init__p  s    #M$7$7$9: 	
.0	
IO	
 !) 	MFC',}}';';'G'G'L$	M$%8%>%>%@ACr9   r:   r'   r  c                     t        |      dk(  sJ |d   }|D ]/  \  }}t        j                  j                  j	                  ||       1 y Nr   r   )r`   r   rQ  rR  r  )r6   r:   r  r   r  ra   s         r8   r=   z$DynamoConfigPatchVariable._call_funcz  sJ    6{aq	 	7HCMM  ,,S#6	7r9   c                      yNztorch._dynamor2   rf   s    r8   rU   z%DynamoConfigPatchVariable.module_name      r9   c                      y)Npatch_dynamo_configr2   rf   s    r8   rV   z!DynamoConfigPatchVariable.fn_name  s    $r9   )rv   rw   rx   r   r{   rz   r   r4   r=   rU   rV   r}   r~   s   @r8   r+  r+  k  s_    6Dd38n D D D74 7c 7d 7S % %r9   r+  c                   b     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 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   )r3   r4   r   )r6   r9  r.   r7   s      r8   r4   z"ErrorOnGraphBreakVariable.__init__  s.     	
/1579	
 	
r9   r:   r'   r  c                 @    t        |      dk(  sJ t        |d          y r1  )r`   r   rz  s      r8   r=   z$ErrorOnGraphBreakVariable._call_func  s     6{a!&),r9   c                      yr3  r2   rf   s    r8   rU   z%ErrorOnGraphBreakVariable.module_name  r4  r9   c                      y)Nr9  r2   rf   s    r8   rV   z!ErrorOnGraphBreakVariable.fn_name  r  r9   )rv   rw   rx   r   r|   r   r4   r   r=   rz   rU   rV   r}   r~   s   @r8   r8  r8    sX    7
T 
S 
T 
-4 -htn -QU -S & &r9   r8  c                   f     e Zd Zdeeef   deddf fdZdddee	   de
ee	f   de	fd	Zdd
Z xZS )WithEnterFunctionVariablerM  r.   r/   Nc                 2    t        |   di | || _        y r1   )r3   r4   rM  )r6   rM  r.   r7   s      r8   r4   z"WithEnterFunctionVariable.__init__  s    
 	"6"r9   r:   r'   rM   c                 ^    |rJ |rJ |j                  | j                  |j                        S rO   )	enter_ctxrM  current_instructionrk   s       r8   rl   z'WithEnterFunctionVariable.call_function  s0     xz ||DHHb&<&<==r9   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  )
rM  rU   rV   re   rz   r   r   r   	DIFFICULT
DYNAMO_BUG)r6   rX   type_strs      r8   rb   z%WithEnterFunctionVariable.reconstruct  s    	+((..014883C3C3E2FGH 	QMCH:MghB #,,	
 #--		
 # 	+4>*H	+s   7B 'B+*B+ru   )rv   rw   rx   r   r)   r   r   r4   r   r   r{   rz   rl   rb   r}   r~   s   @r8   r?  r?    so    *,JJK  
	>#> '> S/)*	>
 
>
r9   r?  c                        e Zd Zdhej                  Zdeeef   dededdf 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targetrM  r.   r/   Nc                 p    t        |   di | t        |t        t        f      sJ || _        || _        y r1   )r3   r4   ri   r)   r   rM  rK  )r6   rM  rK  r.   r7   s       r8   r4   z!WithExitFunctionVariable.__init__  sC     	"6")+IJ
 	
 
 r9   r:   r'   rM   c                 D    |rJ  | j                   j                  |g| S rO   )rM  rR   rk   s       r8   rl   z&WithExitFunctionVariable.call_function  s&     ztxx}}R'$''r9   c                    | j                   j                  |       |j                  j                  j                  rt
        j                  dk\  rI|j                  t        d             t
        j                  dk  r|j                  t        dd             |j                  | j                   j                  D cg c]  }|j                  |       c}       |j                  t        t        | j                   j                        d             |j                  t        | j                               |j                  t        d             y y c c}w )	N)      	PUSH_NULL)rO     SWAPr   )r  FPOP_TOP)rM  rY   r:   rJ   partial_convertsysversion_infoappend_outputr   r^   r+   r_   r   r`   r   rK  )r6   rX   ra   s      r8   rb   z$WithExitFunctionVariable.reconstruct  s    	!!'*::,,7*%%&8&EF##g-))*<V*KL !!;?88;Q;QRC**3/R !!$S)?)?%@%H !!"3DKK"@A!!"4Y"?@ - Ss   <Eru   )rv   rw   rx   r   ry   r   r)   r   r   r4   r   r{   rz   rl   rb   r}   r~   s   @r8   rJ  rJ    s    		'	'N
*,JJK  	
 
(#( '( S/)*	(
 
(Ar9   rJ  )Sr   r  rV  r  collections.abcr   r   r   r  r   r   typingr   r	   r
   r   torch._Cr   torch._guardsr    r   r   bytecode_transformationr   r   r   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'   r)   r   r   r   r   r   r   r   r   r   r  r'  rC  rY  rl  r  r  r  r  r  r  r  r  r  r+  r8  r?  rJ  r2   r9   r8   <module>rg     s  (  
  5 5 8 6 6   + 
   0 2 H !	 	 	 4 /Ddo dN*%> *Z)+I )<)70G )7X%77N %7P*7,C *7Z'7&= '7T%75 %7P(7-D (7V&M&= &MR57-D 57pB". B"JE 3 E P30 3lH&#: H&V/.&= /.d:-(? :-zD2 DN1 0"
5 "
JF
%< F
RF$-D F$RZ'0 Z'z+
"9 +
\% 7 %B& 7 &*&
 &
R/A /Ar9   