Ë
    g^(hõ·  ã                   ó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    úa/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_dynamo/variables/ctx_manager.pyÚcleanupzContextManagerState.cleanupD   s"   € Ø�?‰?Ð&Ø�O‰OÔØ"ˆD�Oð 'ó    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�˜Ñ"Ó)Ø&*€Eˆ8�E—H‘H—N‘NÑ#Ó*ò#ó
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Ò"Ø*ˆÔØ,ˆÔØ.3¨mÔ(Ó*ˆ�
Àˆ�
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   € ÙÜ�w—z‘z×/Ñ/°×0@Ñ0@Ó0BÓCÀTÇ\Á\Ã^Ó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Ø×ÑÔ2´3°}Ó3EÀuÓ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ž   € ô �4‹y˜AŠ~Ðˆ~Ü�d˜1‘gÔ9Ô:Ü*¨4°©7×+?Ñ+?Ó+AÓBˆD�‰GÜ˜$˜q™'Ô$6Ô8LÐ#MÔNÐNÐNä�d˜1‘gÔ1Ô2Ü,¨T°!©W°dÓ;Ð;ä�d˜1‘gÔ3Ô4Ü.¨t°A©w¸Ó=Ð=ð 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   € Ü�D—K‘KÓ ×)Ñ)Ð)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ˆÜ×+Ñ+Ø�K‰K×!Ñ!×*Ñ*ØØô
÷ ‰-˜˜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ˆÜ×(Ñ(Ø�K‰K× Ñ ×)Ñ)ØØô
÷ ‰-˜˜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#   ø€ ”E—H‘H×'Ñ'×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Ø×ÑØóô	
ð Ÿ9™9×0Ñ0ØÜ�H‰H×Ñ×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`   € Ø�
‰
×ÑÔØ
�	‰	×ÑØÜ�H‰H×Ñ×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    ø€ ”E—H‘H×'Ñ'×@Ñ@ÀÇÁÓ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ƒ   ø€ Ü—X‘X×(Ñ(×@Ñ@ÓBˆŒ
Ø×ÑØÛLô	
ð Ÿ9™9×0Ñ0ØÜ�H‰H×Ñ×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   € Ø�
‰
×ÑÔØ
�	‰	×ÑØÜ�H‰H×Ñ×8Ñ8Ø�Z‰Z×ÑÐØô		
ô ×)Ñ)×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ô	
ð Ÿ9™9×0Ñ0ØÜ�H‰H×Ñ×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   € Ø�
‰
×ÑÔØ
�	‰	×ÑØœUŸX™X×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°<×3UÑ3UÓ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   ø€ ”E—H‘H×2Ñ2°4·?±?Ó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ô	
ð Ÿ9™9×0Ñ0ØÜ�H‰H×*Ñ*Øˆ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   € Ø�
‰
×ÑÔØ
�	‰	×ÑØÜ�H‰H×*Ñ*Ø�_‰_ÐØô		
ô ×)Ñ)×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ô	
ð Ÿ9™9×0Ñ0ØÜ�H‰H×&Ñ&ØØó	
ˆ�
‰
Ôô ×)Ñ)×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   € Ø�
‰
×ÑÔØ
�	‰	×ÑØÜ�H‰H×%Ñ%Ø�^‰^ÐØô		
ô ×)Ñ)×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°<×3JÑ3JÓ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×,Ñ,Ô-Ü—X‘X×(Ñ(×@Ñ@ÓBˆ
Ø×Ñ˜bÑ"WÔXØŸ9™9×0Ñ0ØÜ�H‰H×Ñ×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   € Ø�
‰
×ÑÔØ
�	‰	×ÑØœUŸX™X×0Ñ0×HÑHÈ"Èbô	
ô ×)Ñ)×0Ñ0°Ó6Ð6r'   Nrr   r¹   r2   r'   r%   rÔ   rÔ   ˆ  s:   „ Ù@ñ Ñ/Ó1°<×3UÑ3UÓ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ÐIÐ6IÓ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‰   ø€ à26×2JÑ2J×2PÑ2PÓ2R÷
Ù*.¨!¨QˆAˆq×#Ñ#Ó%Ñ%ð
ˆñ 
ô ×)Ñ)Ñ3¨FÑ3ˆØ×Ñ˜bÓ"LÔMÜ×)Ñ)×0Ñ0°×1BÑ1BÓ1DÓ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Ñ!4°ZÐAQÓ!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Ñ3´C¸³I¸tÀUÓ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Ñ8‰Oà)×<Ñ<Ó>ÐØ(×;Ñ;Ó=ˆOØ×2Ñ2Ó4ˆ
Ü—X‘X×(Ñ(×@Ñ@Ø˜jó
ˆ
ð 	×Ñ˜bÑ"WÔXØŸ9™9×0Ñ0ØÜ�H‰H×Ñ×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°<×3UÑ3UÓ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ñ
ð ñ
ˆñ
 Ø�N‰N˜2˜s×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Ò+Ø�I‰I×!Ñ!Ø¤§¡×!;Ñ!;¸e¸XÀrôô �H‰H×&Ñ& 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°<×3IÑ3IÓ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   € Ø�
‰
×!Ñ!Ô#Ø
�	‰	×ÑØÜ�N‰N×$Ñ$×9Ñ9Ø�Z‰Z×ÑÐØõ		
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ÑEÀcÓJ€ r'   ri   )
r/   rÊ   r,  Ú_enter_inference_moder6   rA   rJ   rš   r8   r    ©r$   rE   r1  s     @r%   rF   zInferenceModeVariable.enterX  s{   ø€ Ü�n‰n×&Ñ&×<Ñ<¸d×>PÑ>PÐQˆØ×ÑØÓJô	
ð Ÿ9™9×0Ñ0ØÜ�N‰N×$Ñ$×:Ñ:Ø"ˆ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`   € Ø�
‰
×!Ñ!Ô#Ø
�	‰	×ÑØÜ�J‰J×-Ñ-Ø�Z‰Z×ÑÐØô		
ô ×)Ñ)×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Ñ*KÈHÓ*U€ r'   ri   )	r/   r<  Ú_exchange_devicer6   rA   rJ   rš   r8   r    )r$   rE   rE  s     @r%   rF   zCUDADeviceVariable.enterŒ  sj   ø€ Ü—:‘:×.Ñ.°×0BÑ0BÐCˆØ×Ñ˜bÓ"UÔVØŸ9™9×0Ñ0ØÜ�J‰J×'Ñ'Ø"ˆ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   € ä*ð 
Ø ˜'ØŸI™I×<Ñ<Ð=ñ
ð ñ
ˆð 	�‰�r˜E˜7Ô#Ø×Ñ˜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ÒÐÐØKQÐRSÉ9ˆ×(Ñ(ÔHØGMÈaÁyˆ×(Ñ(Ô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°<×3TÑ3TÓ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ñ
ð ñ
ˆð
 	�‰�r˜L˜>Ô*Ø×Ñ˜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‘	ˆà�I‰I×!Ñ!Ø¤§¡×!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ðñ
ð
 ñ
ˆð 	�‰�r˜L˜>Ô*Ø×Ñ˜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‘	ˆØÐð �I‰I×!Ñ!ØÜ—‘×"Ñ"×?Ñ?Ø�Øô	ô �H‰H×Ñ×;Ñ;¸EÕBð �I‰I×!Ñ!Ø¤§¡×!3Ñ!3×!OÑ!OÐQSÐUWôô �H‰H×Ñ×:Ñ:Õ<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  € àÜ�I‰I×#Ñ#×,Ñ,Ü�J‰J�N‰N×#Ñ#Ü�I‰I�M‰M×"Ñ"ð
ñ 
ð 	
ð 
ð 2”W×&Ñ& tÓ,×1Ñ1°4ÐB¸6ÑBˆ
Ø×!Ñ!Ô#ØˆØ�‰ŒàGò 	*ˆCØ�mÒ#¨Ü—
‘
—‘×'Ñ'Ü—	‘	—‘×&Ñ&ð1ñ )ð !%¬¯
©
¯©×(?Ñ(?Ñ ?‘fÀU‘à ×*Ñ*¨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�   )r8   r)   rJ   rš   r/   rz  Ú_exit_autocastr    rM   s      r%   rO   zAutocastModeVariable.exitE  sD   € Ø�
‰
×!Ñ!Ô#Ø
�	‰	×ÑØœUŸY™Y×5Ñ5¸¿
¹
×8HÑ8HÐ7JÈBõ	
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"   )r/   rz  rŠ  r0  s   €r%   rY   z,AutocastModeVariable.enter.<locals>.<lambda>M  s   ø€ ¬%¯)©)×*BÑ*BÀ3Ó*G€ r'   ri   )	r/   rz  Ú_enter_autocastr6   rA   rJ   rš   r8   r    r3  s     @r%   rF   zAutocastModeVariable.enterK  si   ø€ Ü�i‰i×'Ñ'¨×);Ñ);Ð<ˆØ×Ñ˜bÓ"GÔHØŸ9™9×0Ñ0ØœUŸY™Y×6Ñ6Ð8N¸$×:LÑ:LÑ8NÐPRó
ˆ�
‰
Õr'   c                  ó   — y)Nztorch.amp.autocast_moder2   r#   s    r%   rR   z AutocastModeVariable.module_nameR  s   € Ø(r'   c                  ó   — y)Nr|  r2   r#   s    r%   rS   zAutocastModeVariable.fn_nameU  s   € Ør'   r"   rp   rr   r7  rx   s   @r%   rt  rt    s.   ø„ Øñó ðö>+ó
ò
ò)ö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.entera  rR  r'   c                 ó@   — t         j                  j                  d «      S r"   rQ  rM   s      r%   rO   zNullContextVariable.exitd  rR  r'   c                  ó   — y©NÚ
contextlibr2   r#   s    r%   rR   zNullContextVariable.module_nameg  rH  r'   c                  ó   — y©NÚnullcontextr2   r#   s    r%   rS   zNullContextVariable.fn_namej  ó   € Ør'   r"   rp   rr   )
r*   r+   r,   r-   r<   rF   rO   rR   rS   rw   rx   s   @r%   r‘  r‘  Y  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__w  s   ø€ Ü‰ÑÑ6 tÐ6¨vÓ6r'   c                 ó   — | S r"   r2   rD   s     r%   rF   zProfilerContextVariable.enterz  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ž  n  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Ø×Ñó!
ç
‰.ð 	ñ +ÜØØ�I‰I×"Ñ"ØØ%ØØó	ó	
ˆô %ð 
Ø'˜.Ø*Ð+Ø×&Ñ&ñ
ð ñ	
ð 	
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ò	
ð ˆŒÜ2°4·;±;Ó?×JÑJˆŒÜ5°d·k±kÓ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Ñ:MÈaÑ: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Ø�I‰I×"Ñ"ØØ—‘Ø×#Ñ# AÑ&×/Ñ/Ó1Ð3Øõ	ð ×'Ñ'¨Ñ*×0Ñ0ˆFØ�I‰I×"Ñ"ØØ×"Ñ"Ø×!Ñ! 6×#6Ñ#6¸×8JÑ8JÐ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   € Ø
�	‰	×ÑØØ�O‰OØ× Ñ  Ñ#×,Ñ,Ó.Ð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™   € ä�gœy×7Ñ7Ô8Ü ×.Ñ.Ø9@¸	ÖB°1�—‘˜r :Õ.ÒBóˆHô  ×-Ñ-¨w¨iÓ8‰Gä ×.Ñ.Ø8?¿¹ÖF°1�—‘˜r :Õ.ÒFóˆHô .¨g°xÓ@Ð@ùò 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Ò"ØˆŒØ*ˆÔä�d—l‘l¤I×$<Ñ$<Ô=Ü$×2Ñ2°D·L±L°>ÓBˆDŒLÜØ×Ñ¤×!;Ñ!;¼Y×=VÑ=VÐ Wô
ô "+×!8Ñ!8¸$×:LÑ:LÐ9MÓ!NˆDÕð
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_func7  s™   € Ü�6‹{˜aÒÐÐØ�q‘	ˆØ×Ñ×%Ñ%×5Ñ5¸Ò>Ø× Ñ ×,Ñ,ØØä×.Ñ.×5Ñ5Ð6GÓHÜ×*Ñ*¨5Ó1ðð ôð :?ˆD× Ñ ×&Ñ&Õ6ð ?r'   c                  ó   — y)NzDtorch.distributed.fsdp._fully_shard._fsdp_param_group.FSDPParamGroupr2   r#   s    r%   rR   z2FSDPParamGroupUseTrainingStateVariable.module_nameF  s   € ØUr'   c                  ó   — y)NÚuse_training_stater2   r#   s    r%   rS   z.FSDPParamGroupUseTrainingStateVariable.fn_nameI  ó   € Ø#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°<×3SÑ3SÓ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.createP  sI   € ä�h¤§¡× 2Ñ 2× =Ñ =Ô>Ø �zˆHÜ ð 
Ø"Øñ
ð ñ
ˆð
 ˆ
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_nodese  s`   € ð $ö
ð ð �I‰I×!Ñ!ØÜ—‘×"Ñ"×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>v  s"   ø€ œŸ™×*Ñ*×7Ñ7¸×8JÑ8JÓ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.enters  s³   ø€ Ü"ŸX™X×/Ñ/×IÑIÓKˆÔØ×ÑØÓKô	
ô 	�‰×Ñ×'Ñ'¨×(:Ñ(:Ô;Ø×%Ñ% b¨$×*<Ñ*<Ó=ˆØ
�	‰	×ÑØÜ�H‰H×Ñ×+Ñ+Øˆ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¨$×*<Ñ*<Ó=ˆØ
�	‰	×ÑØÜ�H‰H×Ñ×+Ñ+Øˆ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ë  M  sq   ø„ Ù3àòó ðð ñ
à˜EŸH™H×.Ñ.×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€   ø€ ØÐ °E·J±J·O±OÑ!CØ—:‘:—?‘? ?Ñ3°uÒ<Ð<Ð<Ø�|‰|× Ñ  F§K¡KÒ/ð 	
Ø<ó	
Ð/ô 	‰ÑÑ"˜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 r…t        |«      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�  ø€ ô �t—z‘z 4Ô(ÐPÐ,IÈ$ÈÐ*PÓPÐ(çEÝ.àÐ?Ñ?Ø"ˆB�I‰I×"Ñ"Ø˜tðÙ&7¸¸À¹ÀvÓ&Nóô ×-Ñ-¨dÓ3Ð3Ø�WŠ_Ù$Ü$×5Ñ5ØØ,�b—i‘i×,Ñ,Ø! 4ðÙ*;¸T¸FÀT¹MÈ6Ó*Ròôð ð �^Ò#Ù$Ü(ØØ,�b—i‘i×,Ñ,Ø! 4ðÙ*;¸T¸FÀT¹MÈ6Ó*Ròôð ð Ð+Ñ+´°D³	¸Q²Ávð ˜‘GˆEÜ˜e¤^Ô4Ü ×1Ñ1×8Ñ8¼ÓHÐHÜ×-Ñ-×4Ñ4Ø,Ð& tÑ,¨T¯Z©Z¸¿¹ÓEóð ô ‰wÑ" 2 t¨T°6Ó:Ð:r'   c                 ó   — | j                   S r"   ©r    r#   s    r%   rþ   zStreamVariable.as_proxyÒ  ó   € Ø�z‰zÐ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`   € ð —;’;Ðˆð ˜DŸK™K˜=Ð)ˆØ�z‰z× Ñ ×5Ñ5°f¸d¿j¹jÓ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   ø€ ØÐ °E·J±J·O±OÑ!CØ—:‘:—?‘? ?Ñ3°uÒ<Ð<Ð<Ü‰ÑÑ"˜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Ø"ˆB�I‰I×"Ñ"Ø˜tðÙ&7¸¸À¹ÀvÓ&Nóô ×-Ñ-¨dÓ3Ð3Ø�WŠ_Ù$Ü$×5Ñ5ØØ,�b—i‘i×,Ñ,Ø! 4ðÙ*;¸T¸FÀT¹MÈ6Ó*Ròôð ô Ø=Ü˜D›	àJÈ4È&ð 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   € ð —;’;ÐˆàˆØ�z‰z× Ñ ×5Ñ5°f¸d¿j¹jÓ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_function0  s&   € ñ ÐˆzØˆt�x‰x�}‰}˜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.reconstruct9  s  € ð 	�‰×!Ñ! 'Ô*Ø�:‰:×Ñ×,Ó,Ü×Ñ 7Ò*Ø×%Ñ%Ô&8¸Ó&EÔFÜ×#Ñ# gÒ-Ø×)Ñ)Ô*<¸VÈÔ*KÔLØ×!Ñ!Ø;?¿8¹8×;QÑ;QÖR°C�×*Ñ*¨3Õ/ÒRôð ×!Ñ!Ü$¤S¨¯©×)?Ñ)?Ó%@À%ÓHôð ×!Ñ!Ô"3°D·K±KÓ"@ÔAØ×!Ñ!Ô"4°YÓ"?Õ@ð -ùò 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%7Ð0Gô %7ôP!7Ð7Nô !7ôH&7Ð,Cô &7ôR#7Ð&=ô #7ôL#7Ð5ô #7ôL$7Ð-Dô $7ôNMÐ&=ô Mô>.7Ð-Dô .7ôb7"Ð.ô 7"ôt/ Ð3ô / ôd/Ð0ô /ôd6Ð#:ô 6ôB).Ð&=ô ).ôX1-Ð(?ô 1-ôh8Ð2ô 8ôvÐ1ô ô* 
Ð5ô  
ôF=$Ð3ô =$ô@<
Ð%<ô <
ô~:$Ð-Dô :$ôzF'Ð0ô F'ôRKJ�_ô KJô\6J�Oô 6Jôr-A˜õ -Ar'   