
    sgĚ                     $   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m	Z	m
Z
 d dlZd dlmZ ddl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' ddl(m)Z) e	rd dl*m+Z+ e jX                   G d d             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, d-e.      Z; G d. d/e.      Z< G d0 d1e.      Z= G d2 d3e.      Z> G d4 d5e.      Z? G d6 d7e.      Z@ G d8 d9e.      ZA G d: d;e!      ZB G d< d=e!      ZC G d> d?e!      ZDy)@    N)CallableDictListOptionalTYPE_CHECKINGUnion)Guard   )	variables)create_call_functioncreate_instructioncreate_setup_with)get_interface_for_device)unimplementedUnsupported)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)ContextMangerStatez
    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    V/var/www/html/venv/lib/python3.12/site-packages/torch/_dynamo/variables/ctx_manager.pycleanupzContextMangerState.cleanup/   s"    ??&OO"DO '    c                 J    | j                   sJ d       | j                          y )Nzmultiple exits?)r!   r(   r%   s    r'   cleanup_assertz!ContextMangerState.cleanup_assert4   s    1 11r)   )__name__
__module____qualname____doc__r!   r   r   __annotations__r"   torchfxProxyr(   r+    r)   r'   r    r    $   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 xZS )ContextWrappingVariablecm_objtarget_valuesinitial_valuesstateN)r:   c                r    t        |   di | || _        || _        |t	               | _        y || _        y Nr4   )super__init__r8   r9   r    r:   )r&   r8   r9   r:   kwargs	__class__s        r'   r>   z ContextWrappingVariable.__init__B   s:     	"6"*,-2]')

r)   c                     | j                  || j                         | j                  |       t        j                  j                  d       S r$   )
_call_funcr8   set_cleanup_hookr   ConstantVariablecreater&   txs     r'   enterzContextWrappingVariable.enterJ   s;    D../b!))0066r)   c                      | fd}| j                   _        j                  j                   j                   j                         y )Nc                  >     j                   j                         y r$   )rB   r9   rF   s   r'   fnz4ContextWrappingVariable.set_cleanup_hook.<locals>.fnR   s    D$7$78r)   )r:   r!   outputadd_cleanup_hookr(   )r&   rG   rK   s   `` r'   rC   z(ContextWrappingVariable.set_cleanup_hookO   s7    :9 !#


		""4::#5#56r)   c                 t    | j                   j                          t        j                  j	                  d       S r$   )r:   r+   r   rD   rE   r&   rG   argss      r'   exitzContextWrappingVariable.exitX   s)    

!!#))0066r)   c                      |t        |j                  j                  | j                               | j	                                      y r$   )r   rG   import_sourcemodule_namefn_namer&   codegens     r'   reconstruct_typez(ContextWrappingVariable.reconstruct_type\   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$   )rX   )rW   r&   s   r'   <lambda>z5ContextWrappingVariable.reconstruct.<locals>.<lambda>b   s    d&;&;G&D r)   r4   F)add_push_nullr8   extend_outputcreate_load_constr   len)r&   rW   r8   vals   ``  r'   reconstructz#ContextWrappingVariable.reconstructa   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'   rT   z#ContextWrappingVariable.module_namei   s    !">??r)   c                     t        d      )Nzfn_name called on baserc   r%   s    r'   rU   zContextWrappingVariable.fn_namel   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&   rG   rP   r?   s       r'   call_functionz%ContextWrappingVariable.call_functiono   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)   r$   returnNrG   r   rG   r   rP   List[VariableTracker]r?   Dict[str, VariableTracker]rm   r   )r,   r-   r.   r   _nonvar_fieldsr>   rH   rC   rQ   rX   ra   rT   rU   rk   __classcell__r@   s   @r'   r6   r6   9   s    	
 
	'	'N -1F;?F	F7
77

O@<>#> &> -	>
 
>r)   r6   c                   :     e Zd Zd fdZd Zd Zd ZddZ xZS )GenericContextWrappingVariablec                 T    |J t        |   d||j                  d| || _        y )N)value
value_typer4   )r=   r>   r@   r7   )r&   r7   r?   r@   s      r'   r>   z'GenericContextWrappingVariable.__init__   s@    !!! 	
''	
 	

 r)   c                 .    | j                   j                  S r$   )r7   r-   r%   s    r'   rT   z*GenericContextWrappingVariable.module_name   s    {{%%%r)   c                 @    t        | j                        j                  S r$   )typer7   r,   r%   s    r'   rU   z&GenericContextWrappingVariable.fn_name   s    DKK )))r)   c                 <   | j                   d nt        | j                   d      }	 t        j                  | j                  j
                  j                  | |      j                  |g i       S # t        $ r%}t        d| j                   d|       Y d }~y d }~ww xY w)N	__enter__sourceUnsupported context manager z's __enter__ functionfrom_exc)
r   r   r   r   r7   r~   __func__rk   r   r   )r&   rG   r   es       r'   rH   z$GenericContextWrappingVariable.enter   s    ,*T[[+2V
	//%%.. mBB'	(
  	.t{{m;PQ 	s   AA- -	B6BBc                    | j                   d nt        | j                   d      }	 t        j                  | j                  j
                  j                  | |      j                  |t        j                  j                  d       t        j                  j                  d       t        j                  j                  d       gi       }|xj                  dz  c_        S # t        $ r%}t        d| j                   d|       Y d }~@d }~ww xY w)N__exit__r   r   z's __exit__ functionr   r   )r   r   r   r   r7   r   r   rk   rD   rE   r   r   generic_context_manager_depth)r&   rG   rP   r   xr   s         r'   rQ   z#GenericContextWrappingVariable.exit   s    ,*T[[*2U	,,$$-- m..55d;..55d;..55d;
 	 & 	((A-(  	.t{{m;OP 	s   B!C 	D'DDrl   rn   )	r,   r-   r.   r>   rT   rU   rH   rQ   rs   rt   s   @r'   rv   rv      s    &*r)   rv   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r8   r9   r4   )r   rG   r8   r?   s      r'   rE   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$   )r1   _C
_functorch!set_inplace_requires_grad_allowed
prev_stater%   s   r'   r[   zAGradInplaceRequiresGradCtxManagerVariable.enter.<locals>.<lambda>   s#    EHH''II r)   rk   )r8   r1   r   r   !get_inplace_requires_grad_allowedr   r   rC   rL   create_noder:   r"   r   rD   rE   )r&   rG   enableds   `  r'   rH   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 Nrk   )r:   r(   rL   r   r1   r   r   r   r   r   rD   rE   rO   s      r'   rQ   z.GradInplaceRequiresGradCtxManagerVariable.exit   s`    


		HHAA__		
 ))0066r)   Nrn   r,   r-   r.   r/   staticmethodrE   rH   rQ   r4   r)   r'   r   r      s!    -
 
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   rG   r?   vars      r'   rE   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$   )r1   r   eager_transformsexit_jvp_nestingr4   r)   r'   r[   z=JvpIncrementNestingCtxManagerVariable.enter.<locals>.<lambda>   s    ((99JJL r)   rk   r4   )r   _guards_singletonr1   r   r   enter_jvp_nestingrC   rL   r   r   _jvp_increment_nestingr:   r"   r   rD   rE   )r&   rG   	jvp_levels      r'   rH   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 Nrk   r4   )r:   r(   rL   r   r1   r   r   _jvp_decrement_nestingr   rD   rE   rO   s      r'   rQ   z*JvpIncrementNestingCtxManagerVariable.exit  sV    


		UXX00GGR	
 ))0066r)   Nrn   r,   r-   r.   r/   r	   r   r   FUNCTORCH_STACK_MATCHr   r   rE   rH   rQ   r4   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'   rE   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$   )r1   r   _set_fwd_grad_enabledr   r%   s   r'   r[   z7SetFwdGradEnabledContextManager.enter.<locals>.<lambda>  s    EHH224??C r)   rk   )r8   r1   r   _is_fwd_grad_enabledr   r   rC   rL   r   r:   r"   r   rD   rE   )r&   rG   modes   `  r'   rH   z%SetFwdGradEnabledContextManager.enter  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   )r:   r(   rL   r   r1   r   r   r   r   rD   rE   rO   s      r'   rQ   z$SetFwdGradEnabledContextManager.exit'  sZ    


		HH**__		
 ))0066r)   Nrn   r   r4   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   )rG   r?   s     r'   rE   zDualLevelContextManager.create7  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)r1   autograd
forward_adexit_dual_level	new_levelr%   s   r'   r[   z/DualLevelContextManager.enter.<locals>.<lambda>C  s#    11AAAW r)   rk   r4   )r   r   r1   r   r   enter_dual_levelr   rC   rL   r   r   _enter_dual_levelr:   r"   r   rD   rE   rF   s   ` r'   rH   zDualLevelContextManager.enter?  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   )r:   r(   rL   r   r1   r   _exit_dual_levelr   r   rD   rE   rO   s      r'   rQ   zDualLevelContextManager.exitM  sZ    


		HH%%^^		
 ))0066r)   Nrn   )r,   r-   r.   r/   r	   r   r   
DUAL_LEVELr   r   rE   rH   rQ   r4   r)   r'   r   r   2  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'   rE   z-GradIncrementNestingCtxManagerVariable.createb  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$   )r1   r   r   _grad_decrement_nestingr4   r)   r'   r[   z>GradIncrementNestingCtxManagerVariable.enter.<locals>.<lambda>n      %((*=*=*U*U*W r)   rk   r4   )r   r   r1   r   r   _grad_increment_nestingrC   rL   r   r:   r"   r   rD   rE   )r&   rG   
grad_levels      r'   rH   z,GradIncrementNestingCtxManagerVariable.enterk  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   )r:   r(   rL   r   r1   r   r   r   r   rD   rE   rO   s      r'   rQ   z+GradIncrementNestingCtxManagerVariable.exitw  V    


		UXX00HH"b	
 ))0066r)   Nrn   r   r4   r)   r'   r   r   X  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_argsr8   r9   )r   )rG   r   s     r'   rE   z&CatchWarningsCtxManagerVariable.create  s    . 3
 	
r)   c                 `    t        |t              sJ |       t        |   di | || _        y r<   )rh   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'   r[   z7CatchWarningsCtxManagerVariable.enter.<locals>.<lambda>  s    '*:*:4t*L r)   r4   )
r   itemsas_python_constantwarningscatch_warningsrC   r   rD   rE   r~   )r&   rG   kvr?   r   s        @r'   rH   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'   r[   z=CatchWarningsCtxManagerVariable.reconstruct.<locals>.<lambda>  s    !4!4ZAQ!R r)   F)	r\   foreachr   valuestuplekeysr]   create_call_function_kwr_   )r&   r   r   s    ` r'   ra   z+CatchWarningsCtxManagerVariable.reconstruct  sg    
RS


4++2245T--2245
33CItUKLr)   rn   rl   )
r,   r-   r.   r/   r   rE   r>   rH   ra   rs   rt   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   )rG   r8   r?   r   s       r'   rE   z-VmapIncrementNestingCtxManagerVariable.create  s(    4 
'
 

 
r)   c                    t        | 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$   )r1   r   r   _vmap_decrement_nestingr4   r)   r'   r[   z>VmapIncrementNestingCtxManagerVariable.enter.<locals>.<lambda>  r   r)   rk   )r   r   r8   r1   r   r   _vmap_increment_nestingrC   rL   r   r:   r"   r   rD   rE   )r&   rG   
batch_size
randomness
vmap_levels        r'   rH   z,VmapIncrementNestingCtxManagerVariable.enter  s    d,,-!%!3!3
JXX((@@ZX
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   )r:   r(   rL   r   r1   r   r   r   r   rD   rE   rO   s      r'   rQ   z+VmapIncrementNestingCtxManagerVariable.exit  r   r)   Nrn   r   r4   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   r1   is_grad_enabledrB   r8   )rG   target_valueinitializedr?   r   s        r'   rE   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&   r8   r9   r   r?   r@   s        r'   r>   zGradModeVariable.__init__  s4     	 	
'	
JP	
 	d,,-r)   c                 x    | j                  || j                         t        j                  j	                  d       S r$   rB   r8   r   rD   rE   rF   s     r'   rH   zGradModeVariable.enter  -    D../))0066r)   c                 x    | j                  || j                         t        j                  j	                  d       S r$   rB   r9   r   rD   rE   rO   s      r'   rQ   zGradModeVariable.exit  -    D//0))0066r)   c                 ^    | j                  || j                         t        |   |||      S r$   rB   r9   r=   rk   r&   rG   rP   r?   r@   s       r'   rk   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   rk   )r_   r1   r   rL   r   r   _set_grad_enabledr&   rG   r   rx   s       r'   rB   zGradModeVariable._call_func  sn    6{aq	  "e+II!!!;!;eXr HH&&u-	 ,r)   c                      yNr1   r4   r%   s    r'   rT   zGradModeVariable.module_name      r)   c                      y)Nset_grad_enabledr4   r%   s    r'   rU   zGradModeVariable.fn_name  s    !r)   )Frn   )NTrl   rG   r   rP   rp   r?   rq   )r,   r-   r.   r/   r	   r   r   	GRAD_MODEr   r   rE   r>   rH   rQ   rk   rB   rT   rU   rs   rt   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 )Nr9   )r  r1   is_inference_mode_enabledrG   r   r?   r   s       r'   rE   zInferenceModeVariable.create  s1    #N
+0+J+J+L
PV
 
r)   c                 d    |t        j                         }t        |   d||d| || _        y r   )r1   r  r=   r>   r8   r&   r8   r9   r?   r@   s       r'   r>   zInferenceModeVariable.__init__  sB     !"<<>N 	
'	
JP	
 +r)   c                     | j                   j                          |j                  j                  dt        j
                  j                  j                  | j                   j                  fi        y r   )	r:   r+   rL   r   r1   r   	grad_mode_exit_inference_moder"   rO   s      r'   rQ   zInferenceModeVariable.exit  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$   )r1   r   r  r  ctxs   r'   r[   z-InferenceModeVariable.enter.<locals>.<lambda>"  s    00EEcJ r)   rk   )
r1   r   r  _enter_inference_moder8   rC   rL   r   r:   r"   r&   rG   r  s     @r'   rH   zInferenceModeVariable.enter  s{    nn&&<<d>P>PQJ	
 9900NN$$::"d  "	


r)   c                      yr  r4   r%   s    r'   rT   z!InferenceModeVariable.module_name+  r  r)   c                      y)Ninference_moder4   r%   s    r'   rU   zInferenceModeVariable.fn_name.  s    r)   rn   r$   rl   r,   r-   r.   r   rE   r>   rQ   rH   rT   rU   rs   rt   s   @r'   r  r     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   r4   )r'  r1   cuda_get_device_index)rG   devicer?   r   s       r'   rE   zCUDADeviceVariable.create5  s?      
 ::777NO
 

 
r)   c                 8    t        |   d||d| || _        y r   r=   r>   r8   r  s       r'   r>   zCUDADeviceVariable.__init__>  s.     	 	
'	
JP	
 +r)   c                 
   | j                   j                          |j                  j                  dt        j
                  j                  | j                   j                  fi        t        j                  j                  d      S )Nrk   F)r:   r+   rL   r   r1   r*  _maybe_exchange_devicer"   r   rD   rE   rO   s      r'   rQ   zCUDADeviceVariable.exitI  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$   )r1   r*  r0  )prev_idxs   r'   r[   z*CUDADeviceVariable.enter.<locals>.<lambda>U  s    %***K*KH*U r)   rk   )	r1   r*  _exchange_devicer8   rC   rL   r   r:   r"   )r&   rG   r3  s     @r'   rH   zCUDADeviceVariable.enterS  sj    ::..0B0BCb"UV9900JJ''"d  "	


r)   c                      y)Nz
torch.cudar4   r%   s    r'   rT   zCUDADeviceVariable.module_name]      r)   c                      y)Nr,  r4   r%   s    r'   rU   zCUDADeviceVariable.fn_name`  s    r)   rn   r$   rl   )r,   r-   r.   r/   r   rE   r>   rQ   rH   rT   rU   rs   rt   s   @r'   r'  r'  2  s@    &  	+
 
	+8
r)   r'  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   r4   )r9  rL   torch_function_enabledrB   rC   r   s      r'   rE   z#TorchFunctionDisableVariable.createi  sU    * 
 'II<<=
 
 	rE7#R 
r)   c                 T    t        |   d||d| t        | j                         y r   r   r  s       r'   r>   z%TorchFunctionDisableVariable.__init__u  2     	
'	
JP	
 	d,,-r)   c                 @    t         j                  j                  d       S r$   r   rD   rE   rF   s     r'   rH   z"TorchFunctionDisableVariable.enter{      ))0066r)   c                 `    t        |      dk(  sJ |j                  j                  |d          y rg   )r_   rL   set_torch_function_state)r&   rG   r   s      r'   rB   z'TorchFunctionDisableVariable._call_func~  s*    6{a
		**6!95r)   rn   r$   rl   )r,   r-   r.   r/   r	   r   r   TORCH_FUNCTION_STATEr   r   rE   r>   rH   rB   rs   rt   s   @r'   r9  r9  d  s>    H/1<3T3TU	 	.76r)   r9  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   )rE  r1   $are_deterministic_algorithms_enabledrB   rC   r  s       r'   rE   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__  r=  r)   c                 @    t         j                  j                  d       S r$   r?  rF   s     r'   rH   z%DeterministicAlgorithmsVariable.enter  r@  r)   c                     t        |      dk(  sJ |d   }|j                  j                  dt        j                  j
                  |fi       f t        j                  j                  |       y r  )r_   rL   r   r1   r   _set_deterministic_algorithmsr
  s       r'   rB   z*DeterministicAlgorithmsVariable._call_func  s]    6{aq	
		UXXCCeXr	
 	 	..u5r)   c                      yr  r4   r%   s    r'   rT   z+DeterministicAlgorithmsVariable.module_name  r  r)   c                      y)Nuse_deterministic_algorithmsr4   r%   s    r'   rU   z'DeterministicAlgorithmsVariable.fn_name  s    -r)   rn   r$   rl   )r,   r-   r.   r/   r	   r   r   DETERMINISTIC_ALGORITHMSr   r   rE   r>   rH   rB   rT   rU   rs   rt   s   @r'   rE  rE    sL    `\BB  .76.r)   rE  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   )rQ  r1   r   	_autograd/_saved_tensors_hooks_get_disabled_error_messagerB   rC   r  s       r'   rE   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$   r?  rF   s     r'   rH   z'DisabledSavedTensorsHooksVariable.enter  r@  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   rk   r4   )r_   rL   r   r1   r   rS  _saved_tensors_hooks_disable_saved_tensors_hooks_enabler
  s       r'   rB   z,DisabledSavedTensorsHooksVariable._call_func  s    6{aq	 II!!""??	 HH;;EB II!!!3!3!O!OQSUW HH::<r)   c                      y)Nztorch.autograd.graphr4   r%   s    r'   rT   z-DisabledSavedTensorsHooksVariable.module_name  s    %r)   c                      y)Ndisable_saved_tensors_hooksr4   r%   s    r'   rU   z)DisabledSavedTensorsHooksVariable.fn_name  s    ,r)   rn   r$   rl   )r,   r-   r.   r/   r   rE   r>   rH   rB   rT   rU   rs   rt   s   @r'   rQ  rQ    s1    E
 


7=*&-r)   rQ  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_enabledra  r*  cpur9   )r1   ampautocast_modeautocastr*  rd  inspect	signaturebindapply_defaultsclear	argumentsrh   r   appendr   r_  )funcrP   r?   
bound_argsr8   keyargr   s           r'   rE   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        y r   )r:   r+   rL   r   r1   re  _exit_autocastr"   rO   s      r'   rQ   zAutocastModeVariable.exit  sD    

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

8H8H7JB	
r)   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$   )r1   re  ru  r  s   r'   r[   z,AutocastModeVariable.enter.<locals>.<lambda>  s    %))*B*B3*G r)   rk   )	r1   re  _enter_autocastr8   rC   rL   r   r:   r"   r!  s     @r'   rH   zAutocastModeVariable.enter  si    ii''););<b"GH9900UYY668N$:L:L8NPR


r)   c                      y)Nztorch.amp.autocast_moder4   r%   s    r'   rT   z AutocastModeVariable.module_name  s    (r)   c                      y)Nrg  r4   r%   s    r'   rU   zAutocastModeVariable.fn_name  s    r)   r$   rl   rn   r%  rt   s   @r'   r_  r_    s.     >+

)r)   r_  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.
    It's used as a placeholder for other context managers that Dynamo doesn't
    support yet, e.g, torch.autograd.profiler.record_function.
    c                 (    t        |   dd|i| y Nr8   r4   rV  )r&   r8   r?   r@   s      r'   r>   zNullContextVariable.__init__#  s    ?}??r)   c                 @    t         j                  j                  d       S r$   r?  rF   s     r'   rH   zNullContextVariable.enter&  r@  r)   c                 @    t         j                  j                  d       S r$   r?  rO   s      r'   rQ   zNullContextVariable.exit)  r@  r)   c                      y)N
contextlibr4   r%   s    r'   rT   zNullContextVariable.module_name,  r6  r)   c                      y)Nnullcontextr4   r%   s    r'   rU   zNullContextVariable.fn_name/  s    r)   r$   rl   rn   )
r,   r-   r.   r/   r>   rH   rQ   rT   rU   rs   rt   s   @r'   r|  r|    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_clsrk   r$   )r8   r9   r,  r4   )	builderr  r   r,  current_streamStreamVariablerL   create_proxyr  )rG   r   r?   r  current_stream_methodr  s         r'   rE   zStreamContextVariable.create4  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&   r8   r,  r9   r?   r@   s        r'   r>   zStreamContextVariable.__init__L  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   rk   c                  T     j                   j                  d   j                        S )Nr   )r  r9   rx   r%   s   r'   r[   z-StreamContextVariable.enter.<locals>.<lambda>g  s!    $//$:M:Ma:P:V:V*W r)   )r8   as_proxyrL   r  r  rx   r  	stream_iddevice_indexra  rC   )r&   rG   streams   `  r'   rH   zStreamContextVariable.enterT  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 )Nrk   r   )rL   r  r  r9   r  r:   r+   rO   s      r'   rQ   zStreamContextVariable.exiti  sM    
		OO  #,,.0		
 	

!!#r)   rn   r$   rl   )	r,   r-   r.   r   rE   r>   rH   rQ   rs   rt   s   @r'   r  r  3  s&    
 
.UY*$r)   r  c                   H     e Zd Z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                 4     t        j                   fd      S )Nc                 <    t        | | j                  d            S )N_version)r  var_getattr)tensorrG   s    r'   r[   z<PreserveVersionContextVariable.constructor.<locals>.<lambda>{  s     9""2z2 r)   )r   LambdaVariable)rG   s   `r'   constructorz*PreserveVersionContextVariable.constructorx  s    ''
 	
r)   c                 d    |j                  dd        t        |   di | || _        || _        y r~  )
setdefaultr=   r>   r  prev_version)r&   r  r  r?   r@   s       r'   r>   z'PreserveVersionContextVariable.__init__  s2    /40"6"(r)   c                      y r$   r4   rF   s     r'   rH   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   TorchInGraphFunctionVariablerk   r  r  )r&   rG   rP   r  s       r'   rQ   z#PreserveVersionContextVariable.exit  s9    C55'

-T[[$*;*;<b
A	Br)   c                     t        d       y )Nz@torch.autograd._unsafe_preserve_version_counter with graph break)r   rV   s     r'   ra   z*PreserveVersionContextVariable.reconstruct  s    N	
r)   rl   rn   )r,   r-   r.   r/   r   r  r>   rH   rQ   ra   rs   rt   s   @r'   r  r  s  s1     
 
)B
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_varr8   r9   r4   )r  rx   _training_state)rG   r  r   r?   r   s        r'   rE   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  r8   r9   r?   r@   s        r'   r>   z/FSDPParamGroupUseTrainingStateVariable.__init__  s<     	 	
'	
JP	
  /d,,-r)   c                 x    | j                  || j                         t        j                  j	                  d       S r$   r   rF   s     r'   rH   z,FSDPParamGroupUseTrainingStateVariable.enter  r   r)   c                 x    | j                  || j                         t        j                  j	                  d       S r$   r  rO   s      r'   rQ   z+FSDPParamGroupUseTrainingStateVariable.exit  r  r)   c                 ^    | j                  || j                         t        |   |||      S r$   r  r  s       r'   rk   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  rx   r  call_methodr   rD   rE   EnumVariabler
  s       r'   rB   z1FSDPParamGroupUseTrainingStateVariable._call_func  s    6{aq	%%55>  ,,..556GH**51  :?D  &&6 ?r)   c                      y)NzCtorch.distributed._composable.fsdp._fsdp_param_group.FSDPParamGroupr4   r%   s    r'   rT   z2FSDPParamGroupUseTrainingStateVariable.module_name  s    Tr)   c                      y)Nuse_training_stater4   r%   s    r'   rU   z.FSDPParamGroupUseTrainingStateVariable.fn_name  s    #r)   rn   r$   rl   r  )r,   r-   r.   r	   r   r   FSDP_TRAINING_STATEr   r   rE   r>   rH   rQ   rk   rB   rT   rU   rs   rt   s   @r'   r  r    sz    /1<3S3ST  >B.	.777#7 &7 -	7?U$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 |j                  j                  |j                  k(  sJ d       t	        |   di | || _        || _        || _        y )Nexample_valuez.stream value is not equal to the passed devicer4   )nodemetar,  r|   r=   r>   r"   rx   )r&   r"   rx   r,  r?   r@   s        r'   r>   zStreamVariable.__init__  s~    EJJOO!C::???3u<<<LL,	<;	<,"6"

r)   c                 8   t        | j                  |      s
J d|        |dv s
J d|        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 |dk(  r6 |t        | |j                  j                  d	|g || g|z   |             S t        | j                  dz   |z   dz          y )Nzno stream method found named )wait_streamsynchronizequeryrecord_event
wait_eventz unsupported stream method r
   proxy_args_kwargsr   r  )r  r  r  r  r  
target_clsrG   r"   r  z stream method  unsupported)hasattrrx   utilsr  r  r  rL   r  r   rD   EventVariabler   r,  r&   rG   namerP   r?   r  r  s          r'   r  zStreamVariable.call_method  sV    tzz4(P,I$*PP( 
 
 	0 )/	0 
 	..??"BII""t&7v&N --d33W_$$55,bii,,!4*;TFTM6*R  ^#$(,bii,,!4*;TFTM6*R  $++(99D@>QRr)   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,  rG   rL   install_global_by_idrx   append_outputcreate_load_globalr&   rW   prefixr  s       r'   ra   zStreamVariable.reconstruct  s`     ;; DKK=)zz  55fdjjIg8848HIr)   rl   rP   rp   r?   rq   rm   r   r,   r-   r.   r>   r  r  ra   rs   rt   s   @r'   r  r    s;    	)S &	)S
 -)S 
)SV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  r4   )r  r  r=   r>   r"   rx   )r&   r"   rx   r?   r@   s       r'   r>   zEventVariable.__init__  sQ    EJJOO!C::???3u<<<"6"

r)   c                 H   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	| d
       y )Nr
   r  r   r  )waitrecordr  r  r  r  zevent method r  )	r  r  r  r  rL   r  r   rD   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  M$|<=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   rG   rL   r  rx   r  r  r  s       r'   ra   zEventVariable.reconstructB  sS     ;;zz  55fdjjIg8848HIr)   rl   r  r  rt   s   @r'   r  r    s6    > &	>
 -> 
>4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targetr  rm   Nc                 p    t        |   di | t        |t        t        f      sJ || _        || _        y r<   )r=   r>   rh   r6   rv   r  r  )r&   r  r  r?   r@   s       r'   r>   z!WithExitFunctionVariable.__init__R  sC     	"6")+IJ
 	
 
 r)   c                 D    |rJ  | j                   j                  |g| S r$   )r  rQ   rj   s       r'   rk   z&WithExitFunctionVariable.call_function_  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)r     SWAPr
   )rr  FPOP_TOP)r  rX   rG   rL   partial_convertsysversion_infor  r   r]   r8   r^   r   r_   r   r  )r&   rW   r`   s      r'   ra   z$WithExitFunctionVariable.reconstructh  s    	!!'*::,,7*%%&8&EF##g-))*<V*KL!!;?88;Q;QRC**3/R !!$S)?)?%@%H !!"3DKK"@A!!"4Y"?@ - Ss   <Ero   )r,   r-   r.   r   rr   r   r6   rv   r>   rk   ra   rs   rt   s   @r'   r  r  L  so    		'	'N
*,JJK
 
(#( &( -	(
 
(Ar)   r  )Edataclassesrh  r  r   typingr   r   r   r   r   r   torch._Cr1   torch._guardsr	    r   bytecode_transformationr   r   r   device_interfacer   excr   r   guardsr   r   r   r   r   baser   	functionsr   r   r   r   r   user_definedr   torch._dynamo.symbolic_convertr   	dataclassr    r6   rv   r   r   r   r   r   r   r   r   r  r'  r9  rE  rQ  r_  r|  r  r  r  r  r  r  r4   r)   r'   <module>r     s     
  G G    
 8 , 0 2 !  4 D   (E>o E>P7%> 7t%70G %7P&7,C &7R#7&= #7L#75 #7L$7-D $7NM&= M>%7-D %7P7". 7"t/ 3 / d/0 /d6#: 6>'.&= '.T1-(? 1-h82 8v1 .=$3 =$@!
%< !
H:$-D :$zFJ_ FJR,JO ,J^-A -Ar)   