
    Vh,                     b   d 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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 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& ddl'm(Z( erddl)m*Z* ejV                   G d d             Z, G d de       Z- G d de(      Z. G d de-      Z/ G d de-      Z0 G d de-      Z1 G d de-      Z2 G d d e-      Z3 G d! d"e-      Z4 G d# d$e-      Z5 G d% d&e-      Z6 G d' d(e-      Z7 G d) d*e-      Z8 G d+ d,e-      Z9 G d- d.e-      Z: G d/ d0e-      Z; G d1 d2e-      Z< G d3 d4e-      Z= G d5 d6e-      Z> G d7 d8e-      Z? G d9 d:e-      Z@ G d; d<e-      ZA G d= d>e-      ZB G d? d@e-      ZC G dA dBe       ZD G dC dDe       ZE G dE dFe       ZFy)Ga)  
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OptionalTYPE_CHECKINGUnion)Guard   )graph_break_hints	variables)create_call_functioncreate_instructioncreate_setup_with)get_interface_for_device)unimplemented_v2)GuardBuilderinstall_guard)
AttrSourceGlobalStateSource   )VariableTracker)NestedUserFunctionVariableUserFunctionVariableUserMethodVariableWrappedUserFunctionVariableWrappedUserMethodVariable)UserDefinedObjectVariable)InstructionTranslatorc                   n    e Zd ZU dZdZee   ed<   dZee	j                  j                     ed<   d Zd Zy)ContextManagerStatez
    Mutating `self` in VariableTracker is not allowed because we copy
    them.  This is a mutable container pointed to by context managers
    that won't get copied, so it is safe to mutate.
    N
cleanup_fnproxyc                 L    | j                   | j                          d | _         y y N)r   selfs    S/home/dcms/DCMS/lib/python3.12/site-packages/torch/_dynamo/variables/ctx_manager.pycleanupzContextManagerState.cleanupD   s"    ??&OO"DO '    c                 J    | j                   sJ d       | j                          y )Nzmultiple exits?)r   r&   r#   s    r%   cleanup_assertz"ContextManagerState.cleanup_assertI   s    1 11r'   )__name__
__module____qualname____doc__r   r   r   __annotations__r    torchfxProxyr&   r)    r'   r%   r   r   9   s9     &*J")&*E8EHHNN#*#
r'   r   c                        e Zd Zddddhej                  Z	 ddd	 d fdZd Zddd	Zdd
Zd Z	d Z
d Zd Z	 	 	 	 	 	 	 	 ddZd Zd Z xZS )ContextWrappingVariablecm_objtarget_valuesinitial_valuesstateN)r8   c                r    t        |   di | || _        || _        |t	               | _        y || _        y Nr2   )super__init__r6   r7   r   r8   )r$   r6   r7   r8   kwargs	__class__s        r%   r<   z ContextWrappingVariable.__init__W   s:     	"6"*,.3m(*

r'   c                     | j                  || j                         | j                  |       t        j                  j                  d       S r"   )
_call_funcr6   set_cleanup_hookr
   ConstantVariablecreater$   txs     r%   enterzContextWrappingVariable.enter_   s;    D../b!))0066r'   c                      | fd}| j                   _        j                  j                   j                   j                         y )Nc                  >     j                   j                         y r"   )r@   r7   rD   s   r%   fnz4ContextWrappingVariable.set_cleanup_hook.<locals>.fng   s    D$7$78r'   )r8   r   outputadd_cleanup_hookr&   )r$   rE   rI   s   `` r%   rA   z(ContextWrappingVariable.set_cleanup_hookd   s7    :9 !#


		""4::#5#56r'   c                 t    | j                   j                          t        j                  j	                  d       S r"   )r8   r)   r
   rB   rC   r$   rE   argss      r%   exitzContextWrappingVariable.exitm   s)    

!!#))0066r'   c                      |t        |j                  j                  | j                               | j	                                      y r"   )r   rE   import_sourcemodule_namefn_namer$   codegens     r%   reconstruct_typez(ContextWrappingVariable.reconstruct_typeq   s2    wzz//0@0@0BCT\\^T	
r'   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 r"   )rV   )rU   r$   s   r%   <lambda>z5ContextWrappingVariable.reconstruct.<locals>.<lambda>w   s    d&;&;G&D r'   r2   F)add_push_nullr6   extend_outputcreate_load_constr   len)r$   rU   r6   vals   ``  r%   reconstructz#ContextWrappingVariable.reconstructv   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NotImplementedErrorr#   s    r%   rR   z#ContextWrappingVariable.module_name~   s    !">??r'   c                     t        d      )Nzfn_name called on basera   r#   s    r%   rS   zContextWrappingVariable.fn_name   s    !":;;r'   c                 F   t        |      dk(  sJ t        |d   t              rt        |d   j	                               |d<   t        |d   t
        t        f      sJ t        |d   t
              rt        |d   |       S t        |d   t              rt        |d   |       S y Nr   r   )r]   
isinstancer   r   get_functionr   r   r   r$   rE   rN   r=   s       r%   call_functionz%ContextWrappingVariable.call_function   s     4yA~~d1g9:*47+?+?+ABDG$q'$68L#MNNNd1g12,T!Wd;;d1g34.tAw== 5r'   c                      yNTr2   r#   s    r%   supports_graph_breaksz-ContextWrappingVariable.supports_graph_breaks       r'   c                      yrk   r2   r#   s    r%   exit_on_graph_breakz+ContextWrappingVariable.exit_on_graph_break   rm   r'   r"   returnNrE   r   rE   r   rN   list[VariableTracker]r=   dict[str, VariableTracker]rq   r   )r*   r+   r,   r   _nonvar_fieldsr<   rF   rA   rO   rV   r_   rR   rS   ri   rl   ro   __classcell__r>   s   @r%   r4   r4   N   s    	
 
	'	'N -1G;?G	G7
77

O@<>#> &> -	>
 
>"r'   r4   c                   F     e Zd Zd fdZd Zd Zd Zd	dZd Zd Z	 xZ
S )
GenericContextWrappingVariablec                 T    |J t        |   d||j                  d| || _        y )N)value
value_typer2   )r;   r<   r>   r5   )r$   r5   r=   r>   s      r%   r<   z'GenericContextWrappingVariable.__init__   s@    !!! 	
''	
 	

 r'   c                 .    | j                   j                  S r"   )r5   r+   r#   s    r%   rR   z*GenericContextWrappingVariable.module_name   s    {{%%%r'   c                 @    t        | j                        j                  S r"   )typer5   r*   r#   s    r%   rS   z&GenericContextWrappingVariable.fn_name   s    DKK )))r'   c                     | j                   d nt        | j                   d      }t        j                  | j                  j
                  j                  | |      j                  |g i       S )N	__enter__source)r   r   r
   r   r5   r   __func__ri   )r$   rE   r   s      r%   rF   z$GenericContextWrappingVariable.enter   sY    ,*T[[+2V++KK!!**
 -B
#		$r'   c                    | j                   d nt        | j                   d      }t        j                  | j                  j
                  j                  | |      j                  ||i       }|j                  j                          |S )N__exit__r   )
r   r   r
   r   r5   r   r   ri   active_generic_context_managerspop)r$   rE   rN   r   xs        r%   rO   z#GenericContextWrappingVariable.exit   sr    ,*T[[*2U((KK  ))
 -D"
%	 	

 	**..0r'   c                      y)NFr2   r#   s    r%   rl   z4GenericContextWrappingVariable.supports_graph_breaks   s    r'   c                      yrk   r2   r#   s    r%   ro   z2GenericContextWrappingVariable.exit_on_graph_break   rm   r'   rp   rr   )r*   r+   r,   r<   rR   rS   rF   rO   rl   ro   rw   rx   s   @r%   rz   rz      s&    &*$r'   rz   c                   0    e Zd ZdZedd       Zd ZddZy))GradInplaceRequiresGradCtxManagerVariablez#represents torch grad requries gradc                     t        d|d d|S Nr6   r7   r2   )r   rE   r6   r=   s      r%   rC   z0GradInplaceRequiresGradCtxManagerVariable.create   s$    8 
'
 
 	
r'   c                      j                   \  }t        j                  j                  j	                          _        t        j                  j                  j                  |        j                  | fd       |j                  j                  dt        j                  j                  j                  |fi        j                  _        t        j                  j                  d       S )Nc                  j    t         j                  j                  j                   j                        S r"   )r/   _C
_functorch!set_inplace_requires_grad_allowed
prev_stater#   s   r%   rY   zAGradInplaceRequiresGradCtxManagerVariable.enter.<locals>.<lambda>   s#    EHH''II r'   ri   )r6   r/   r   r   !get_inplace_requires_grad_allowedr   r   rA   rJ   create_noder8   r    r
   rB   rC   )r$   rE   enableds   `  r%   rF   z/GradInplaceRequiresGradCtxManagerVariable.enter   s    &&	((--OOQ==gF	
 9900HHAAJ	


 ))0066r'   c                 
   | j                   j                          |j                  j                  dt        j
                  j                  j                  | j                  fi        t        j                  j                  d       S Nri   )r8   r&   rJ   r   r/   r   r   r   r   r
   rB   rC   rM   s      r%   rO   z.GradInplaceRequiresGradCtxManagerVariable.exit   s`    


		HHAA__		
 ))0066r'   Nrr   r*   r+   r,   r-   staticmethodrC   rF   rO   r2   r'   r%   r   r      s!    -
 
7$7r'   r   c                   0    e Zd ZdZedd       Zd ZddZy)0TemporarilyPopInterpreterStackCtxManagerVariablezJrepresents torch._functorch.pyfunction.temporarily_pop_interpreter_stack()c                     t        d|d d|S r   )r   r   s      r%   rC   z7TemporarilyPopInterpreterStackCtxManagerVariable.create   s$    ? 
'
 
 	
r'   c                 d    t         j                  j                  j                          _         j                  | fd       |j                  j                  dt         j                  j                  j                  di        j                  _	        t        j                  j                  d       S )Nc                  j    t         j                  j                  j                   j                        S r"   )r/   r   r   push_dynamic_layer_stacksavedr#   s   r%   rY   zHTemporarilyPopInterpreterStackCtxManagerVariable.enter.<locals>.<lambda>   s     EHH''@@L r'   ri   r2   )r/   r   r   pop_dynamic_layer_stackr   rA   rJ   r   r8   r    r
   rB   rC   rD   s   ` r%   rF   z6TemporarilyPopInterpreterStackCtxManagerVariable.enter   s    XX((@@B
L	
 9900HH77	


 ))0066r'   c                    | j                   j                          |j                  j                  dt        j
                  j                  j                  | j                   j                  fi        t        j                  j                  d       S r   )r8   r&   rJ   r   r/   r   r   r   r    r
   rB   rC   rM   s      r%   rO   z5TemporarilyPopInterpreterStackCtxManagerVariable.exit  sf    


		HH88ZZ		
 ))0066r'   Nrr   r   r2   r'   r%   r   r      s!    T
 
77r'   r   c                   `    e Zd ZdZ e e       ej                        Ze	dd       Z
d ZddZy)%JvpIncrementNestingCtxManagerVariablez5represents torch.func.jvp increment/decrement nestingc                 "    t        dd d d|}|S r   )r   rE   r=   vars      r%   rC   z,JvpIncrementNestingCtxManagerVariable.create  s(    3 

 

 
r'   c                 ~   t        | j                         t        j                  j                  j                         }| j                  |d        |j                  j                  dt        j                  j                  j                  di       | j                  _        t        j                  j                  |      S )Nc                  R    t         j                  j                  j                         S r"   )r/   r   eager_transformsexit_jvp_nestingr2   r'   r%   rY   z=JvpIncrementNestingCtxManagerVariable.enter.<locals>.<lambda>*  s    ((99JJL r'   ri   r2   )r   _guards_singletonr/   r   r   enter_jvp_nestingrA   rJ   r   r   _jvp_increment_nestingr8   r    r
   rB   rC   )r$   rE   	jvp_levels      r%   rF   z+JvpIncrementNestingCtxManagerVariable.enter&  s    d,,-$$55GGI	L	
 9900HH66	


 ))00;;r'   c                     | j                   j                          |j                  j                  dt        j
                  j                  j                  di        t        j                  j                  d       S Nri   r2   )r8   r&   rJ   r   r/   r   r   _jvp_decrement_nestingr
   rB   rC   rM   s      r%   rO   z*JvpIncrementNestingCtxManagerVariable.exit4  sV    


		UXX00GGR	
 ))0066r'   Nrr   r*   r+   r,   r-   r   r   r   FUNCTORCH_STACK_MATCHr   r   rC   rF   rO   r2   r'   r%   r   r     s:    ? /1<3U3UV <7r'   r   c                   0    e Zd ZdZedd       Zd ZddZy)SetFwdGradEnabledContextManagerzWrepresents torch.autograd.forward_ad._set_fwd_grad_enabled() to enable/disable fwd gradc                     t        d|d d|S r   )r   r   s      r%   rC   z&SetFwdGradEnabledContextManager.create?  s$    . 
'
 
 	
r'   c                      j                   \  }t        j                  j                          _        t        j                  j                  |        j                  | fd       |j                  j                  dt        j                  j
                  |fi        j                  _
        t        j                  j                  d       S )Nc                  V    t         j                  j                   j                        S r"   )r/   r   _set_fwd_grad_enabledr   r#   s   r%   rY   z7SetFwdGradEnabledContextManager.enter.<locals>.<lambda>M  s    EHH224??C r'   ri   )r6   r/   r   _is_fwd_grad_enabledr   r   rA   rJ   r   r8   r    r
   rB   rC   )r$   rE   modes   `  r%   rF   z%SetFwdGradEnabledContextManager.enterG  s    ##((779&&t,C	
 9900HH**G	


 ))0066r'   c                     | j                   j                          |j                  j                  dt        j
                  j                  | j                  fi        t        j                  j                  d       S r   )r8   r&   rJ   r   r/   r   r   r   r
   rB   rC   rM   s      r%   rO   z$SetFwdGradEnabledContextManager.exitW  sZ    


		HH**__		
 ))0066r'   Nrr   r   r2   r'   r%   r   r   <  s!    a
 
7 7r'   r   c                   `    e Zd ZdZ e e       ej                        Ze	dd       Z
d ZddZy)DualLevelContextManagerz;Represents torch.autograd.forward_ad.dual_level ctx managerc                     t        dd d d|S r   )r   )rE   r=   s     r%   rC   zDualLevelContextManager.createg  s$    & 

 
 	
r'   c                     t         j                         t        j                  j                  j                          _         j                  | fd       |j                  j                  dt        j                  j                  di        j                  _        t        j                  j!                   j                        S )Nc                  l    t         j                  j                  j                   j                        S )N)level)r/   autograd
forward_adexit_dual_level	new_levelr#   s   r%   rY   z/DualLevelContextManager.enter.<locals>.<lambda>s  s#    11AAAW r'   ri   r2   )r   r   r/   r   r   enter_dual_levelr   rA   rJ   r   r   _enter_dual_levelr8   r    r
   rB   rC   rD   s   ` r%   rF   zDualLevelContextManager.entero  s    d,,-22CCEW	
 9900HH&&	


 ))00@@r'   c                     | j                   j                          |j                  j                  dt        j
                  j                  | j                  fi        t        j                  j                  d       S r   )r8   r&   rJ   r   r/   r   _exit_dual_levelr   r
   rB   rC   rM   s      r%   rO   zDualLevelContextManager.exit}  sZ    


		HH%%^^		
 ))0066r'   Nrr   )r*   r+   r,   r-   r   r   r   
DUAL_LEVELr   r   rC   rF   rO   r2   r'   r%   r   r   b  s9    E/1<3J3JK
 
A7r'   r   c                   `    e Zd ZdZ e e       ej                        Ze	dd       Z
d ZddZy)&GradIncrementNestingCtxManagerVariablez6represents torch.func.grad increment/decrement nestingc                 "    t        dd d d|}|S r   )r   r   s      r%   rC   z-GradIncrementNestingCtxManagerVariable.create  s(    4 

 

 
r'   c                 ~   t        | j                         t        j                  j                  j                         }| j                  |d        |j                  j                  dt        j                  j                  j
                  di       | j                  _
        t        j                  j                  |      S )Nc                  R    t         j                  j                  j                         S r"   )r/   r   r   _grad_decrement_nestingr2   r'   r%   rY   z>GradIncrementNestingCtxManagerVariable.enter.<locals>.<lambda>      %((*=*=*U*U*W r'   ri   r2   )r   r   r/   r   r   _grad_increment_nestingrA   rJ   r   r8   r    r
   rB   rC   )r$   rE   
grad_levels      r%   rF   z,GradIncrementNestingCtxManagerVariable.enter  s    d,,-XX((@@B
b"WX9900HH77	


 ))00<<r'   c                     | j                   j                          |j                  j                  dt        j
                  j                  j                  di        t        j                  j                  d       S r   )r8   r&   rJ   r   r/   r   r   r   r
   rB   rC   rM   s      r%   rO   z+GradIncrementNestingCtxManagerVariable.exit  V    


		UXX00HH"b	
 ))0066r'   Nrr   r   r2   r'   r%   r   r     s:    @ /1<3U3UV 
=7r'   r   c                   B     e Zd ZdZedd       Zd fdZd Zd Z xZ	S )CatchWarningsCtxManagerVariablez'Delay a call to warnings.catch_warningsc                     t        |d d       S )N)catch_warnings_argsr6   r7   )r   )rE   r   s     r%   rC   z&CatchWarningsCtxManagerVariable.create  s    . 3
 	
r'   c                 `    t        |t              sJ |       t        |   di | || _        y r:   )rf   dictr;   r<   r   )r$   r   r=   r>   s      r%   r<   z(CatchWarningsCtxManagerVariable.__init__  s2    -t4I6II4"6"#6 r'   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 r"   )r   )ctx_vals   r%   rY   z7CatchWarningsCtxManagerVariable.enter.<locals>.<lambda>  s    '*:*:4t*L r'   r2   )
r   itemsas_python_constantwarningscatch_warningsrA   r
   rB   rC   r   )r$   rE   kvr=   r   s        @r%   rF   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   r%   rY   z=CatchWarningsCtxManagerVariable.reconstruct.<locals>.<lambda>  s    !4!4ZAQ!R r'   F)	rZ   foreachr   valuestuplekeysr[   create_call_function_kwr]   )r$   r   r   s    ` r%   r_   z+CatchWarningsCtxManagerVariable.reconstruct  sg    
RS


4++2245T--2245
33CItUKLr'   rr   rp   )
r*   r+   r,   r-   r   rC   r<   rF   r_   rw   rx   s   @r%   r   r     s)    1
 
7
FMr'   r   c                   `    e Zd ZdZ e e       ej                        Ze	dd       Z
d ZddZy)&VmapIncrementNestingCtxManagerVariablez1represents torch VMap increment/decrement nestingc                 "    t        d|d d|}|S r   )r   )rE   r6   r=   r   s       r%   rC   z-VmapIncrementNestingCtxManagerVariable.create  s(    4 
'
 

 
r'   c                    t        | j                         | j                  \  }}t        |t        j
                        r'|j                  }|j                         j                  }n |j                         }|j                         }|j                         }t        j                  j                  j                  ||      }| j                  |d        |j                  j!                  dt        j                  j                  j                  ||fi       | j"                  _        t        j&                  j)                  |      S )Nc                  R    t         j                  j                  j                         S r"   )r/   r   r   _vmap_decrement_nestingr2   r'   r%   rY   z>VmapIncrementNestingCtxManagerVariable.enter.<locals>.<lambda>  r   r'   ri   )r   r   r6   rf   r
   SymNodeVariablesym_numas_proxynoder   r/   r   r   _vmap_increment_nestingrA   rJ   r   r8   r    rB   rC   )r$   rE   
batch_size
randomnessbatch_size_valuebatch_size_node
vmap_levels          r%   rF   z,VmapIncrementNestingCtxManagerVariable.enter  s   d,,-!%!3!3
Jj)";";<)11(11388O)<<>(;;=O224
XX((@@j

 	b"WX9900HH77j)	


 ))00<<r'   c                     | j                   j                          |j                  j                  dt        j
                  j                  j                  di        t        j                  j                  d       S r   )r8   r&   rJ   r   r/   r   r   r   r
   rB   rC   rM   s      r%   rO   z+VmapIncrementNestingCtxManagerVariable.exit  r   r'   Nrr   r   r2   r'   r%   r   r     s:    ; /1<3U3UV =,7r'   r   c                        e Zd ZdZ e e       ej                        Ze	d
dd       Z
	 d	 d fdZd ZddZ	 	 	 	 	 	 d fdZddZd Zd	 Z xZS )GradModeVariablez6represents torch.{no_grad,enable_grad,set_grad_mode}()c                     t        d|gt        j                         gd|}|r|j                  | |j                         |S r   )r  r/   is_grad_enabledr@   r6   )rE   target_valueinitializedr=   r   s        r%   rC   zGradModeVariable.create  sM     
'.!1134
 

 NN2s001
r'   c                 T    t        |   d||d| t        | j                         y r   r;   r<   r   r   )r$   r6   r7   r  r=   r>   s        r%   r<   zGradModeVariable.__init__  s4     	 	
'	
JP	
 	d,,-r'   c                 x    | j                  || j                         t        j                  j	                  d       S r"   r@   r6   r
   rB   rC   rD   s     r%   rF   zGradModeVariable.enter  -    D../))0066r'   c                 x    | j                  || j                         t        j                  j	                  d       S r"   r@   r7   r
   rB   rC   rM   s      r%   rO   zGradModeVariable.exit  -    D//0))0066r'   c                 ^    | j                  || j                         t        |   |||      S r"   r@   r7   r;   ri   r$   rE   rN   r=   r>   s       r%   ri   zGradModeVariable.call_function  -     	D//0w$Rv66r'   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   ri   )r]   r/   r
  rJ   r   r   _set_grad_enabledr$   rE   r   r|   s       r%   r@   zGradModeVariable._call_func(  sn    6{aq	  "e+II!!!;!;eXr HH&&u-	 ,r'   c                      yNr/   r2   r#   s    r%   rR   zGradModeVariable.module_name2      r'   c                      y)Nset_grad_enabledr2   r#   s    r%   rS   zGradModeVariable.fn_name5  s    !r'   )Frr   rk   rp   rE   r   rN   rt   r=   ru   )r*   r+   r,   r-   r   r   r   	GRAD_MODEr   r   rC   r<   rF   rO   ri   r@   rR   rS   rw   rx   s   @r%   r  r    s|    @/1<3I3IJ  ?C.	.777#7 &7 -	7."r'   r  c                   R     e Zd Zedd       Z	 d	 d	 fdZddZd Zd Zd Z	 xZ
S )
InferenceModeVariablec                 H    t        |gfdt        j                         i|}|S )Nr7   )r%  r/   is_inference_mode_enabledrE   r  r=   r   s       r%   rC   zInferenceModeVariable.create:  s1    #N
+0+J+J+L
PV
 
r'   c                 d    |t        j                         }t        |   d||d| || _        y r   )r/   r'  r;   r<   r6   r$   r6   r7   r=   r>   s       r%   r<   zInferenceModeVariable.__init__A  sB     !"<<>N 	
'	
JP	
 +r'   c                     | j                   j                          |j                  j                  dt        j
                  j                  j                  | j                   j                  fi        y r   )	r8   r)   rJ   r   r/   r   	grad_mode_exit_inference_moder    rM   s      r%   rO   zInferenceModeVariable.exitO  sM    

!!#
		NN$$99ZZ		
r'   c                 H   t        j                  j                  j                  | j                   | j                  |fd       |j                  j                  dt         j                  j                  j                  g | j                  i       | j                  _	        y )Nc                  V    t         j                  j                  j                         S r"   )r/   r   r,  r-  ctxs   r%   rY   z-InferenceModeVariable.enter.<locals>.<lambda>[  s    00EEcJ r'   ri   )
r/   r   r,  _enter_inference_moder6   rA   rJ   r   r8   r    r$   rE   r1  s     @r%   rF   zInferenceModeVariable.enterX  s{    nn&&<<d>P>PQJ	
 9900NN$$::"d  "	


r'   c                      yr  r2   r#   s    r%   rR   z!InferenceModeVariable.module_named  r  r'   c                      y)Ninference_moder2   r#   s    r%   rS   zInferenceModeVariable.fn_nameg  s    r'   rr   r"   rp   r*   r+   r,   r   rC   r<   rO   rF   rR   rS   rw   rx   s   @r%   r%  r%  9  s=      +
 
+


 r'   r%  c                   V     e Zd ZdZedd       Z	 d		 d
 fdZddZd Zd Z	d Z
 xZS )CUDADeviceVariablezrepresents torch.cuda.devicec                 b    t        dt        j                  j                  |d      gd d|}|S )NT)optionalr   r2   )r9  r/   cuda_get_device_index)rE   devicer=   r   s       r%   rC   zCUDADeviceVariable.createn  s?      
 ::777NO
 

 
r'   c                 8    t        |   d||d| || _        y r   r;   r<   r6   r*  s       r%   r<   zCUDADeviceVariable.__init__w  s.     	 	
'	
JP	
 +r'   c                 
   | j                   j                          |j                  j                  dt        j
                  j                  | j                   j                  fi        t        j                  j                  d      S )Nri   F)r8   r)   rJ   r   r/   r<  _maybe_exchange_devicer    r
   rB   rC   rM   s      r%   rO   zCUDADeviceVariable.exit  s`    

!!#
		JJ--ZZ		
 ))0077r'   c                     t        j                  j                  | j                   | j	                  |fd       |j
                  j                  dt         j                  j                  g | j                  i       | j                  _        y )Nc                  B    t         j                  j                         S r"   )r/   r<  rB  )prev_idxs   r%   rY   z*CUDADeviceVariable.enter.<locals>.<lambda>  s    %***K*KH*U r'   ri   )	r/   r<  _exchange_devicer6   rA   rJ   r   r8   r    )r$   rE   rE  s     @r%   rF   zCUDADeviceVariable.enter  sj    ::..0B0BCb"UV9900JJ''"d  "	


r'   c                      y)Nz
torch.cudar2   r#   s    r%   rR   zCUDADeviceVariable.module_name      r'   c                      y)Nr>  r2   r#   s    r%   rS   zCUDADeviceVariable.fn_name  s    r'   rr   r"   rp   )r*   r+   r,   r-   r   rC   r<   rO   rF   rR   rS   rw   rx   s   @r%   r9  r9  k  s@    &  	+
 
	+8
r'   r9  c                   v     e Zd ZdZ e e       ej                        Ze	dd       Z
dd fdZd ZddZ xZS )	TorchFunctionDisableVariablez>represents whether torch function overrides are enabled or notc                     t        ddg| j                  j                  gd|}|j                  | dg       |j	                  |        |S )NFr   r2   )rK  rJ   torch_function_enabledr@   rA   r   s      r%   rC   z#TorchFunctionDisableVariable.create  sU    * 
 'II<<=
 
 	rE7#R 
r'   c                 T    t        |   d||d| t        | j                         y r   r  r*  s       r%   r<   z%TorchFunctionDisableVariable.__init__  2     	
'	
JP	
 	d,,-r'   c                 @    t         j                  j                  d       S r"   r
   rB   rC   rD   s     r%   rF   z"TorchFunctionDisableVariable.enter      ))0066r'   c                     t        |      dk(  sJ |d   |j                  _        |d   |j                  _        |j                  j                  |d          y re   )r]   symbolic_torch_function_statetorch_function_subclass_enabledtorch_function_mode_enabledrJ   set_torch_function_state)r$   rE   r   s      r%   r@   z'TorchFunctionDisableVariable._call_func  sO    6{aKQRS9((HGMay((D
		**6!95r'   rr   r"   rp   )r*   r+   r,   r-   r   r   r   TORCH_FUNCTION_STATEr   r   rC   r<   rF   r@   rw   rx   s   @r%   rK  rK    s>    H/1<3T3TU	 	.76r'   rK  c                        e Zd ZdZ e e       ej                        Ze	dd       Z
d	d
 fdZd ZddZd Zd Z xZS )DeterministicAlgorithmsVariablezVrepresents torch.{are_deterministic_algorithms_enabled,use_deterministic_algorithms}()c                     t        d|gt        j                         gd|}|j                  | |g       |j	                  |        |S r   )rZ  r/   $are_deterministic_algorithms_enabledr@   rA   r(  s       r%   rC   z&DeterministicAlgorithmsVariable.create  sT    - 
'.!FFHI
 

 	rL>*R 
r'   c                 T    t        |   d||d| t        | j                         y r   r  r*  s       r%   r<   z(DeterministicAlgorithmsVariable.__init__  rO  r'   c                 @    t         j                  j                  d       S r"   rQ  rD   s     r%   rF   z%DeterministicAlgorithmsVariable.enter  rR  r'   c                     t        |      dk(  sJ |d   }|j                  j                  dt        j                  j
                  |fi       f t        j                  j                  |       y r  )r]   rJ   r   r/   r   _set_deterministic_algorithmsr  s       r%   r@   z*DeterministicAlgorithmsVariable._call_func  s^    6{aq	II!!!G!G%SU	

 	..u5r'   c                      yr  r2   r#   s    r%   rR   z+DeterministicAlgorithmsVariable.module_name  r  r'   c                      y)Nuse_deterministic_algorithmsr2   r#   s    r%   rS   z'DeterministicAlgorithmsVariable.fn_name  s    -r'   rr   r"   rp   )r*   r+   r,   r-   r   r   r   DETERMINISTIC_ALGORITHMSr   r   rC   r<   rF   r@   rR   rS   rw   rx   s   @r%   rZ  rZ    sL    `\BB  .76.r'   rZ  c                   R     e Zd ZdZedd       Zd	d
 fdZd ZddZd Z	d Z
 xZS )!DisabledSavedTensorsHooksVariablez;represents torch.autograd.graph.disable_saved_tensors_hook.c                     t        d|gt        j                  j                  j	                         gd|}|j                  | |g       |j                  |        |S r   )rf  r/   r   	_autograd/_saved_tensors_hooks_get_disabled_error_messager@   rA   r(  s       r%   rC   z(DisabledSavedTensorsHooksVariable.create  s`    / 
'.""RRT

 
 	rL>*R 
r'   c                 *    t        |   d||d| y r   r;   r<   r*  s       r%   r<   z*DisabledSavedTensorsHooksVariable.__init__  s"     	
'	
JP	
r'   c                 @    t         j                  j                  d       S r"   rQ  rD   s     r%   rF   z'DisabledSavedTensorsHooksVariable.enter  rR  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   ri   r2   )r]   rJ   r   r/   r   rh  _saved_tensors_hooks_disable_saved_tensors_hooks_enabler  s       r%   r@   z,DisabledSavedTensorsHooksVariable._call_func  s    6{aq	 II!!""??	 HH;;EB II!!!3!3!O!OQSUW HH::<r'   c                      y)Nztorch.autograd.graphr2   r#   s    r%   rR   z-DisabledSavedTensorsHooksVariable.module_name  s    %r'   c                      y)Ndisable_saved_tensors_hooksr2   r#   s    r%   rS   z)DisabledSavedTensorsHooksVariable.fn_name  s    ,r'   rr   r"   rp   )r*   r+   r,   r-   r   rC   r<   rF   r@   rR   rS   rw   rx   s   @r%   rf  rf    s1    E
 


7=*&-r'   rf  c                   L     e Zd Zed        Zdd fdZd	dZd Zd Zd Z	 xZ
S )
AutocastModeVariablec                 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_enabledrv  r<  cpur7   )r/   ampautocast_modeautocastr<  ry  inspect	signaturebindapply_defaultsclear	argumentsrf   r   appendr   rt  )funcrN   r=   
bound_argsr6   keyargr   s           r%   rC   zAutocastModeVariable.create  sI   II##,,JJNN##IIMM""
 
 	
 
 2W&&t,114B6B
!!#G 	*Cm#

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

(?(? ?fU **3/#/$$S%;%;%=>$$S)	* #=PPP
r'   c                 8    t        |   d||d| || _        y r   r@  r*  s       r%   r<   zAutocastModeVariable.__init__?  s,     	
'	
JP	
 +r'   c                 
   | j                   j                          |j                  j                  dt        j
                  j                  | j                   j                  fi        t        j                  j                  d       S r   )r8   r)   rJ   r   r/   rz  _exit_autocastr    r
   rB   rC   rM   s      r%   rO   zAutocastModeVariable.exitE  s]    

!!#
		UYY55

8H8H7JB	
 ))0066r'   c                     t        j                  j                  | j                   | j	                  |fd       |j
                  j                  dt         j                  j                  g | j                  i       | j                  _        y )Nc                  B    t         j                  j                         S r"   )r/   rz  r  r0  s   r%   rY   z,AutocastModeVariable.enter.<locals>.<lambda>N  s    %))*B*B3*G r'   ri   )	r/   rz  _enter_autocastr6   rA   rJ   r   r8   r    r3  s     @r%   rF   zAutocastModeVariable.enterL  si    ii''););<b"GH9900UYY668N$:L:L8NPR


r'   c                      y)Nztorch.amp.autocast_moder2   r#   s    r%   rR   z AutocastModeVariable.module_nameS  s    (r'   c                      y)Nr|  r2   r#   s    r%   rS   zAutocastModeVariable.fn_nameV  s    r'   r"   rp   rr   r7  rx   s   @r%   rt  rt    s.     >+7
)r'   rt  c                   @     e Zd ZdZdd fdZd Zd	dZd Zd Z xZ	S )
NullContextVariablez>
    This class represents Python contextlib.nullcontext.
    c                 (    t        |   dd|i| y Nr6   r2   rk  )r$   r6   r=   r>   s      r%   r<   zNullContextVariable.__init___  s    ?}??r'   c                 @    t         j                  j                  d       S r"   rQ  rD   s     r%   rF   zNullContextVariable.enterb  rR  r'   c                 @    t         j                  j                  d       S r"   rQ  rM   s      r%   rO   zNullContextVariable.exite  rR  r'   c                      yN
contextlibr2   r#   s    r%   rR   zNullContextVariable.module_nameh  rH  r'   c                      yNnullcontextr2   r#   s    r%   rS   zNullContextVariable.fn_namek      r'   r"   rp   rr   )
r*   r+   r,   r-   r<   rF   rO   rR   rS   rw   rx   s   @r%   r  r  Z  s"    @77r'   r  c                   D     e Zd ZdZd fdZd Zd	dZd Zd Z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.
    c                 (    t        |   ddd i| y r  rk  )r$   r=   r>   s     r%   r<   z ProfilerContextVariable.__init__x  s    6t6v6r'   c                     | S r"   r2   rD   s     r%   rF   zProfilerContextVariable.enter{  s    r'   c                 @    t         j                  j                  d       S r"   rQ  rM   s      r%   rO   zProfilerContextVariable.exit~  rR  r'   c                      yr  r2   r#   s    r%   rR   z#ProfilerContextVariable.module_name  rH  r'   c                      yr  r2   r#   s    r%   rS   zProfilerContextVariable.fn_name  r  r'   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   strr	   SUPPORTABLE)r$   r   s     r%   r_   z#ProfilerContextVariable.reconstruct  s*    HIr"..		
r'   rp   rr   )r*   r+   r,   r-   r<   rF   rO   rR   rS   r_   rw   rx   s   @r%   r  r  o  s&    77
r'   r  c                   B     e Zd Zedd       Zdd fdZd ZddZ xZS )StreamContextVariablec           
          ddl m} t        |j                        j                  } |t
        | | j                  j                  d|di             }t        d|g|g|j                  d|S )Nr   wrap_fx_proxy_clsri   r"   )r6   r7   r>  r2   )	builderr  r   r>  current_streamStreamVariablerJ   create_proxyr  )rE   r  r=   r  current_stream_methodr  s         r%   rC   zStreamContextVariable.create  s    . 8!

. 	 +II""%		
 % 
'.*+&&
 	
 	
r'   c                     t        |   d||d| || _        t        | j                        j                  | _        t        | j                        j
                  | _        y r   )r;   r<   r>  r   
set_stream_set_stream_by_idset_stream_id)r$   r6   r>  r7   r=   r>   s        r%   r<   zStreamContextVariable.__init__  sX     	
'	
JP	
 24;;?JJ5dkkBTTr'   c                      j                   d   j                         E|j                  j                  d j                   j                   d   j                         fi        nb j                   d   j
                  }|j                  j                  d j                  |j                  |j                  |j                  fi         j	                   j                   d   j
                          j                  | fd       y )Nr   ri   c                  T     j                   j                  d   j                        S )Nr   )r  r7   r|   r#   s   r%   rY   z-StreamContextVariable.enter.<locals>.<lambda>  s!    $//$:M:Ma:P:V:V*W r'   )r6   r   rJ   r  r  r|   r  	stream_iddevice_indexrv  rA   )r$   rE   streams   `  r%   rF   zStreamContextVariable.enter  s    a ))+7II""##A&//13	 ''*00FII""""!!6#6#68J8JK	 	**1-334b"WXr'   c                     |j                   j                  d| j                  | j                  d   j	                         fi        | j
                  j                          y )Nri   r   )rJ   r  r  r7   r   r8   r)   rM   s      r%   rO   zStreamContextVariable.exit  sM    
		OO  #,,.0		
 	

!!#r'   rr   r"   rp   )	r*   r+   r,   r   rC   r<   rF   rO   rw   rx   s   @r%   r  r    s&    
 
.UY*$r'   r  c                   X     e Zd ZdZed        Zed        Zd fdZd Zd	dZ	d Z
 xZS )
PreserveVersionContextVariablez?
    Wraps torch.autograd._unsafe_preserve_version_counter
    c           	      r   t        |t        j                        rKt        j                  |fD cg c]  }|j	                  | d       c}      }t        j                  |g      }n=t        j                  |j
                  D cg c]  }|j	                  | d       c}      }t        ||      S c c}w c c}w )N_version)rf   r
   TensorVariableTupleVariablevar_getattrr   r  )rE   tensorsr   versionss       r%   _create_lambda_from_tensorsz:PreserveVersionContextVariable._create_lambda_from_tensors  s    gy778 ..9@	B1r:.BH  --wi8G ..8?F1r:.FH .gx@@ C
 Gs   B/B4c                 4     t        j                   fd      S )Nc                 0    t         j                  |       S r"   )r  r  )r  rE   s    r%   rY   z<PreserveVersionContextVariable.constructor.<locals>.<lambda>  s    :VVG r'   )r
   LambdaVariable)rE   s   `r%   constructorz*PreserveVersionContextVariable.constructor  s    ''
 	
r'   c                    |j                  dd        t        |   di | || _        || _        t        | j                  t        j                        r%t        j                  | j                  g      | _        t        | j                  t        j                  t        j                  f      r&t        j                  | j                  g      | _        y y r  )
setdefaultr;   r<   r  prev_versionsrf   r
   r  r  rB   r   )r$   r  r  r=   r>   s       r%   r<   z'PreserveVersionContextVariable.__init__  s    /40"6"*dllI$<$<=$22DLL>BDL!;!;Y=V=V W
 "+!8!8$:L:L9M!ND
r'   c                      y r"   r2   rD   s     r%   rF   z$PreserveVersionContextVariable.enter  s    r'   c                     ddl m} t        j                  |      j	                  || j
                  | j                  gi       S )Nr   )_unsafe_set_version_counter)tensor_version_opr  r
   TorchInGraphFunctionVariableri   r  r  )r$   rE   rN   r  s       r%   rO   z#PreserveVersionContextVariable.exit  s9    C55'

-T\\4+=+=>
C	Dr'   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  rT   s     r%   r_   z*PreserveVersionContextVariable.reconstruct  s-    bIU"..
	
r'   rp   rr   )r*   r+   r,   r-   r   r  r  r<   rF   rO   r_   rw   rx   s   @r%   r  r    sH     
A 
A 
 
OD
r'   r  c                        e Zd Z e e       ej                        Zed	d       Z		 d
	 d fdZ
d Zd	dZ	 	 	 	 	 	 d fdZd	dZd Zd Z xZS )&FSDPParamGroupUseTrainingStateVariablec                 P    t        d||g|j                  j                  gd|}|S )N)param_group_varr6   r7   r2   )r  r|   _training_state)rE   r  r  r=   r   s        r%   rC   z-FSDPParamGroupUseTrainingStateVariable.create  s<    4 
+'.+11AAB
 	
 
r'   c                 b    t        |   d||d| || _        t        | j                         y r   )r;   r<   r  r   r   )r$   r  r6   r7   r=   r>   s        r%   r<   z/FSDPParamGroupUseTrainingStateVariable.__init__  s<     	 	
'	
JP	
  /d,,-r'   c                 x    | j                  || j                         t        j                  j	                  d       S r"   r  rD   s     r%   rF   z,FSDPParamGroupUseTrainingStateVariable.enter'  r  r'   c                 x    | j                  || j                         t        j                  j	                  d       S r"   r  rM   s      r%   rO   z+FSDPParamGroupUseTrainingStateVariable.exit+  r  r'   c                 ^    | j                  || j                         t        |   |||      S r"   r  r  s       r%   ri   z4FSDPParamGroupUseTrainingStateVariable.call_function/  r  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
   rB   rC   EnumVariabler  s       r%   r@   z1FSDPParamGroupUseTrainingStateVariable._call_func8  s    6{aq	%%55>  ,,..556GH**51  :?D  &&6 ?r'   c                      y)NzDtorch.distributed.fsdp._fully_shard._fsdp_param_group.FSDPParamGroupr2   r#   s    r%   rR   z2FSDPParamGroupUseTrainingStateVariable.module_nameG  s    Ur'   c                      y)Nuse_training_stater2   r#   s    r%   rS   z.FSDPParamGroupUseTrainingStateVariable.fn_nameJ      #r'   rr   r"   rp   r"  )r*   r+   r,   r   r   r   FSDP_TRAINING_STATEr   r   rC   r<   rF   rO   ri   r@   rR   rS   rw   rx   s   @r%   r  r    sz    /1<3S3ST  >B.	.777#7 &7 -	7?V$r'   r  c                        e Zd ZdZedd       Z	 ddeej                  j                  j                     ddf fdZed        Zd Zdd	Zd
 Zd Z xZS )SDPAKernelVariablez)represents torch.nn.attention.sdpa_kernelc                     t        |t        j                  j                  j                        r|g}t        d|d d|}|S r   )rf   r/   nn	attention
SDPBackendr  )rE   backendsr=   r   s       r%   rC   zSDPAKernelVariable.createQ  sI    h 2 2 = => zH  
"
 

 
r'   Nr6   rq   c                 *    t        |   d||d| y r   rk  r*  s       r%   r<   zSDPAKernelVariable.__init__\  s$     	 	
'	
JP	
r'   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_stringname)rE   r  backendnodess       r%   _backends_to_nodesz%SDPAKernelVariable._backends_to_nodesf  s`     $
  II!!""77	
 
 
s   AAc                     t         j                  j                  j                          _         j                  | fd       t         j                  j                  j                   j                          j                  | j                        }|j                  j                  dt         j                  j                  j                  |fi        t        j                  j                  d       S )Nc                  j    t         j                  j                  j                   j                        S r"   )r/   r  r  _sdpa_kernelprev_backendsr#   s   r%   rY   z*SDPAKernelVariable.enter.<locals>.<lambda>w  s"    **778J8JK r'   ri   )r/   r  r  _cur_sdpa_kernel_backendsr  rA   r  r6   r  rJ   r   r
   rB   rC   )r$   rE   r  s   `  r%   rF   zSDPAKernelVariable.entert  s    "XX//IIKK	
 	''(:(:;%%b$*<*<=
		HH++F		
 ))0066r'   c                 .   | j                   j                          | j                  || j                        }|j                  j                  dt        j                  j                  j                  |fi        t        j                  j                  d       S r   )r8   r)   r  r  rJ   r   r/   r  r  r  r
   rB   rC   )r$   rE   rN   r  s       r%   rO   zSDPAKernelVariable.exit  ss    

!!#%%b$*<*<=
		HH++F		
 ))0066r'   c                      y)Nztorch.nn.attentionr2   r#   s    r%   rR   zSDPAKernelVariable.module_name  r  r'   c                      y)N_sdpa_kernel_variadicr2   r#   s    r%   rS   zSDPAKernelVariable.fn_name  s    &r'   rr   r"   )r*   r+   r,   r-   r   rC   listr/   r  r  r  r<   r  rF   rO   rR   rS   rw   rx   s   @r%   r  r  N  sq    3  
EHH..99:

 

  7	7$
'r'   r  c                   J     e Zd Zd fdZd Z	 	 	 	 	 	 d fdZd Zd Z xZS )r  c                    |6d|j                   j                  v r|j                   j                  d   |k(  sJ |j                  j                  |j                  k(  sJ d       t	        |   di | || _        || _        || _        y )Nexample_valuez.stream value is not equal to the passed devicer2   )r   metar>  r   r;   r<   r    r|   )r$   r    r|   r>  r=   r>   s        r%   r<   zStreamVariable.__init__  s    EJJOO!C::???3u<<<||  FKK/ 	
<	
/ 	"6"

r'   c                 "    t         j                  S r"   )r/   Streamr#   s    r%   python_typezStreamVariable.python_type  s    ||r'   c                    t        | j                  |      s
J d|        ddlm}m} ddlm} |dv r> |j                  j                  d|g || g|z   |        t        j                  d       S |dk(  r@ |t        j                  | |j                  j                  d|g || g|z   |       	      S |d
k(  r6 |t        | |j                  j                  d|g || g|z   |       	      S ||v rt        |      dk(  rw|su|d   }t        |t              s#t        j                  j                  t               S t        j                  j                   ||   | j                  |j                              S t"        	| I  ||||      S )Nzno stream method found named r   )cmp_name_to_op_mappingproxy_args_kwargsr   r  )wait_streamsynchronize
wait_eventr  query
target_clsrE   r    record_eventr   )hasattrr|   utilsr
  r  r  r  rJ   r  r
   rB   EventVariabler]   rf   r  rC   NotImplementedr;   r  )
r$   rE   r  rN   r=   r
  r  r  otherr>   s
            r%   r  zStreamVariable.call_method  s    tzz4(P,I$*PP(E.??"BII""t&7v&N --d33W_$$55,bii,,!4*;TFTM6*R  ^#$(,bii,,!4*;TFTM6*R  ++D	Qv GEe^4 1188HH--44,&t,TZZE  w"2tT6::r'   c                     | j                   S r"   r    r#   s    r%   r   zStreamVariable.as_proxy      zzr'   c                     | j                   rJ d| j                   }|j                  j                  j	                  || j
                        }|j                  |j                  |d             y )N_stream_Tadd)r   r>  rE   rJ   install_global_by_idr|   append_outputcreate_load_globalr$   rU   prefixr  s       r%   r_   zStreamVariable.reconstruct  s`     ;; DKK=)zz  55fdjjIg8848HIr'   rp   rN   rt   r=   ru   rq   r   )	r*   r+   r,   r<   r  r  r   r_   rw   rx   s   @r%   r  r    s<    	+; &	+;
 -+; 
+;ZJr'   r  c                   @     e Zd Zd fdZ	 	 	 	 	 	 ddZd Zd Z xZS )r  c                     |6d|j                   j                  v r|j                   j                  d   |k(  sJ t        |   di | || _        || _        y )Nr  r2   )r   r  r;   r<   r    r|   )r$   r    r|   r=   r>   s       r%   r<   zEventVariable.__init__  sQ    EJJOO!C::???3u<<<"6"

r'   c                    ddl m} ddlm} |dv r> |j                  j
                  d|g || g|z   |        t        j                  d       S |dk(  r@ |t        j                  | |j                  j
                  d|g || g|z   |             S t        d	t        |      d
| dfg t        j                         y )Nr   )r  r   r  )waitrecordr  r  r  r  z#Unsupported torch.cuda.Event methodz4Dynamo doesn't support tracing the torch.cuda.Event.zC method. We currently support wait, record, synchronize, and query.r  )r  r  r  r  rJ   r  r
   rB   r   r  r	   r  )r$   rE   r  rN   r=   r  r  s          r%   r  zEventVariable.call_method  s     	..44"BII""t&7v&N --d33W_$$55,bii,,!4*;TFTM6*R  =D	J4& QQ R&22
r'   c                     | j                   S r"   r  r#   s    r%   r   zEventVariable.as_proxy  r  r'   c                     | j                   rJ d}|j                  j                  j                  || j                        }|j                  |j                  |d             y )N_eventTr  )r   rE   rJ   r  r|   r   r!  r"  s       r%   r_   zEventVariable.reconstruct  sS     ;;zz  55fdjjIg8848HIr'   rp   r$  )r*   r+   r,   r<   r  r   r_   rw   rx   s   @r%   r  r    s7    " &	"
 -" 
"HJr'   r  c                   n     e Zd Zdhej                  Zdeeef   ddf fdZ	 	 	 	 	 	 	 	 ddZ	d Z
 xZS )	WithExitFunctionVariabletargetr1  rq   Nc                 p    t        |   di | t        |t        t        f      sJ || _        || _        y r:   )r;   r<   rf   r4   rz   r1  r/  )r$   r1  r/  r=   r>   s       r%   r<   z!WithExitFunctionVariable.__init__$  sC     	"6")+IJ
 	
 
 r'   c                 D    |rJ  | j                   j                  |g| S r"   )r1  rO   rh   s       r%   ri   z&WithExitFunctionVariable.call_function1  s&     ztxx}}R'$''r'   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)r3     SWAPr   )r  FPOP_TOP)r1  rV   rE   rJ   partial_convertsysversion_infor   r   r[   r6   r\   r   r]   r   r/  )r$   rU   r^   s      r%   r_   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rs   )r*   r+   r,   r   rv   r   r4   rz   r<   ri   r_   rw   rx   s   @r%   r.  r.    so    		'	'N
*,JJK
 
(#( &( -	(
 
(Ar'   r.  )Gr-   dataclassesr}  r:  r   typingr   r   r   r   torch._Cr/   torch._guardsr    r	   r
   bytecode_transformationr   r   r   device_interfacer   excr   guardsr   r   r   r   r   baser   	functionsr   r   r   r   r   user_definedr   torch._dynamo.symbolic_convertr   	dataclassr   r4   rz   r   r   r   r   r   r   r   r   r  r%  r9  rK  rZ  rf  rt  r  r  r  r  r  r  r  r  r.  r2   r'   r%   <module>rJ     s  (   
  ; ;   + 
 8 " 0 2 !  4 D   (Ko K\(%> (V%70G %7P!77N !7H&7,C &7R#7&= #7L#75 #7L$7-D $7NM&= M>.7-D .7b7". 7"t/ 3 / d/0 /d6#: 6B).&= ).X1-(? 1-h92 9x1 * 
5  
F=$3 =$@<
%< <
~:$-D :$zF'0 F'RKJ_ KJ\6JO 6Jr-A -Ar'   