§
    ž²ÅjR ã                  ó$  — U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlmZ ddlmZ ddlmZmZ ddlmZmZmZmZmZmZmZm Z m!Z!m"Z" ddl#m$Z$ ddl%Z%ddl&Z&ddl'Z&ddl(m)c m*Z+ ddl,Z&dd	l&m-Z- dd
l.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9m:Z: ddl;m<Z<m=Z=m>Z> ddl'm?Z? ddl@mAZA ddlBmCZCmDZDmEZEmFZF ddlGmHZHmIZI ddlJmKZKmLZLmMZMmNZNm)Z) ddlOmPZPmQZQ ddlRmRZR ddlSmTZTmUZUmVZV ddlWmXZX ddlYmZZZ ddl)m[Z[m\Z\ e!rddl]m^Z^ ddlm_Z_m`Z`  eja        eb¦  «        Zc e)jd        ¦   «         Zeejf        Zg G d„ de¦  «        Zhi aidejd <   ehjk        Zldyd#„Zme G d$„ d%¦  «        ¦   «         Zn en¦   «         aodzd(„Zpd)ep_q        d*„ Zrd+„ Zsd,„ Zt eju        e?¦  «         e e eev¦  «        ¦  «        d-¦  «        hZwd{d1„Zx G d2„ d3e&jy        jz        ¦  «        Z{d4„ Z|d5„ Z}d6„ Z~d7„ Zd|d:„Z€ G d;„ d<ej�        ¦  «        Z‚ e‚¦   «         Zƒej„        d=„ ¦   «         Z… G d>„ d?¦  «        Z† G d@„ dAe†¦  «        Z‡ G dB„ dCe†¦  «        Zˆ G dD„ dEe†¦  «        Z‰egdFdddfd}dI„ZŠdJ„ Z‹ G dK„ dLejf        ¦  «        ZŒdM„ Z�dN„ ZŽdO„ Z�dP„ Z�dQ„ Z‘	 d~dFdddFddSœddW„Z’ e$dXd)¦  «        dY„ ¦   «         Z“ G dZ„ d[e&j”        j•        ¦  «        Z– G d\„ d]e¦  «        Z—d^„ Z˜d_„ Z™dFdFdd`dd)dFd)dFdFdFd)daœd€dt„Zš eXdd¦  «        dFdddduœdv„Z› G dw„ dx¦  «        ZœdS )�zæ
Functions in this file are responsible for modifying the eval frame
handler at RUNTIME.  Therefore, all functions in this file are hot.
Functions that only execute at compile time should be placed
in torch._dynamo.convert_frame.
é    )ÚannotationsN)Ú	dataclass)ÚEnum)ÚdirnameÚjoin)
ÚAnyÚCallableÚDictÚListÚ
NamedTupleÚOptionalÚSetÚTupleÚTYPE_CHECKINGÚUnion)Úpatch)Ú_guards)Ú
reset_codeÚset_guard_error_hookÚset_skip_guard_eval_unsafeÚ	skip_codeÚunsupported)Úenable_python_dispatcher)Úunset_fake_temporarily)Újustknobs_checkÚlog_export_usage)Ú_combine_argsÚ_process_dynamic_shapesÚ_RelaxedConstraint)ÚGraphModule)Úmake_fx)ÚConstraintViolationErrorÚ
DimDynamicÚShapeEnvÚStatelessSymbolicContext)Ú_PyTreeCodeGenÚ_PyTreeInfoé   )ÚconfigÚconvert_frameÚexternal_utilsÚtrace_rulesÚutils)Ú
CompilerFnÚlookup_backend)Úcode_context)ÚCondOpArgsMismatchErrorÚ	UserErrorÚUserErrorType)ÚHooks©Úinstall_generation_tagging_init)Úcommon_constant_typesÚcompile_times)Úfake_tensor)Ú
CacheEntryÚDynamoCallbackc                  ó   — e Zd ZdZdS )ÚUnsetr   N)Ú__name__Ú
__module__Ú__qualname__Útoken© ó    úIC:\Projects\Historical\venv\Lib\site-packages\torch/_dynamo/eval_frame.pyr=   r=   e   s   € € € € € Ø€E€E€ErC   r=   zDict[int, CompilerFn]Úcached_backendsÚcallbackr;   c                óŽ   — ddl m} t          d¦  «        s&t          j        j                             d¦  «         | S  || ¦  «        S )Nr   )Úset_eval_framez/pytorch/compiler:enable_compiler_set_eval_framezTDynamo disabled by Justknob: enable_compiler_set_eval_frame, skipping set_eval_frame)Útorch._C._dynamo.eval_framerH   r   ÚtorchÚ_dynamor-   Ú	warn_once)rF   rH   s     rD   Ú_maybe_set_eval_framerM   n   s^   € ð ;Ð:Ð:Ð:Ð:Ð:åÐLÑMÔMð (ÝŒÔ×%Ò%Øbñ	
ô 	
ð 	
ð ˆàˆ~˜hÑ'Ô'Ð'rC   c                  ó:   — e Zd ZU dZded<   dZded<   dZded	<   dS )
ÚDynamoStanceÚdefaultÚstrÚstanceFÚboolÚskip_guard_eval_unsafeNz$Union[str, Callable[..., Any], None]Úbackend)r>   r?   r@   rR   Ú__annotations__rT   rU   rB   rC   rD   rO   rO   |   sF   € € € € € € à€FÐÐÐÑØ#(ÐÐ(Ð(Ð(Ñ(Ø48€GÐ8Ð8Ð8Ñ8Ð8Ð8rC   rO   rR   Úreturnc                ób   — ddl m}  |¦   «         }|dur|�t          d¦  «        ‚t          }| a|S )Nr   )Úget_eval_frame_callbackFz1attempted to set_stance in a torch.compile region)rI   rY   ÚRuntimeErrorÚ_stance)rR   rY   rF   Úpriors       rD   Ú_set_stancer]   †   sS   € ð DÐCÐCÐCÐCÐCà&Ð&Ñ(Ô(€Hà�uÐÐ Ð!5ÝÐNÑOÔOÐOå€EØ€GØ€LrC   Tc                óœ  — t           j        dk    r_t           j        �Q| dvrMt          ¦   «         }t	          j        t	          j        t          t           j        ¦  «        |¦  «        |¦  «        } | S t           j        dk    rd S t           j        dk    rdS t           j        dk    r| dv r| S d„ }| |_        |S t          dt           › d	�¦  «        ‚)
NrP   )FNÚforce_eagerÚeager_on_recompileFÚfail_on_recompilec                 ó    — t          d¦  «        ‚)NzCDetected recompile when torch.compile stance is 'fail_on_recompile')rZ   )ÚargsÚkwargss     rD   Úfail_callbackz,_callback_from_stance.<locals>.fail_callback°   s   € ÝØUñô ð rC   zinvalid torch.compile stance 'ú')	r[   rR   rU   r4   r*   Úcatch_errors_wrapperÚget_compiler_fnÚ_torchdynamo_orig_callablerZ   )rF   Úhooksre   s      rD   Ú_callback_from_stancerk   ˜   sä   € Ý„~˜Ò"Ð"åŒ?Ð&¨8¸=Ð+HÐ+HÝ‘G”GˆEÝ$Ô9ÝÔ+Ý#¥G¤OÑ4Ô4Øñô ð ñô ˆHð ˆÝ	Œ˜=Ò	(Ð	(àˆtÝ	ŒÐ/Ò	/Ð	/àˆuÝ	ŒÐ.Ò	.Ð	.Ø�}Ð$Ð$ØˆOð	ð 	ð 	ð 4<ˆÔ0àÐåÐF½GÐFÐFÐFÑGÔGÐGrC   c                 ó   — t           j        S ©N)r[   rT   rB   rC   rD   Ú!_is_skip_guard_eval_unsafe_stancern   ½   s   € ÝÔ)Ð)rC   c                 ó¸   — t                                ¦   «         D ]&} t          | d¦  «        r|                      ¦   «          Œ't                                ¦   «          d S )NÚreset)rE   ÚvaluesÚhasattrrp   Úclear)rU   s    rD   Ú_reset_guarded_backend_cachert   Á   sU   € å"×)Ò)Ñ+Ô+ð ð ˆÝ�7˜GÑ$Ô$ð 	Ø�MŠM‰OŒOˆOøÝ×ÒÑÔÐÐÐrC   z+onnx/_internal/fx/dynamo_graph_extractor.pyÚcodeú)Union[types.CodeType, Callable[..., Any]]úList[CacheEntry]c                ó€   — t          | ¦  «        r| j        } t          j        j        j                             | ¦  «        S )zh
    Given a code object or a callable object, retrieve the cache entries
     stored in this code.
    )ÚcallableÚ__code__rJ   Ú_CrK   Ú
eval_frameÚ_debug_get_cache_entry_list)ru   s    rD   r}   r}   Ð   s5   € õ ��~„~ð ØŒ}ˆÝŒ8ÔÔ&×BÒBÀ4ÑHÔHÐHrC   c                  ó¶   ‡ — e Zd ZU dZded<   ded<   h d£Zdˆ fd„Zd„ Zd„ Zd„ Z	d„ Z
ed„ ¦   «         Zej        ˆ fd„¦   «         Zd„ Zdˆ fd„Zd„ Zˆ fd„Zˆ xZS )ÚOptimizedModulezx
    Wraps the original nn.Module object and later patches its
    forward method to optimized self.forward method.
    úCallable[..., Any]ri   zCallable[[], Any]Úget_compiler_config>   ÚforwardÚ__dict__Ú_forwardÚ	_orig_modÚ
dynamo_ctxr�   Únamed_children_walkri   Úmodútorch.nn.ModulerW   ÚNonec                ó®   •— t          ¦   «                              ¦   «          || _        || _        |                      ¦   «          | j        j        | _        d S rm   )ÚsuperÚ__init__r…   r†   Ú_initializeÚtraining)Úselfrˆ   r†   Ú	__class__s      €rD   r�   zOptimizedModule.__init__ð   sI   ø€ Ý‰Œ×ÒÑÔÐàˆŒØ$ˆŒØ×ÒÑÔÐØœÔ/ˆŒˆˆrC   c                ó>  — t          | j        t          ¦  «        r%|                      | j        j        ¦  «        | _        n®t          | j        j        t          j        ¦  «        rft          j	        | j        j        ¦  «        st          | j        dd¦  «        r2|                      t          j        | j        ¦  «        ¦  «        | _        n$|                      | j        j        ¦  «        | _        t          | j        d¦  «        r| j        | _        | j        | _        d S d S )NÚ_is_fsdp_managed_moduleFÚ_initialize_hook)Ú
isinstancer†   ÚDisableContextr…   Ú__call__r‚   ÚtypesÚ
MethodTyper,   ÚcheckÚgetattrr+   Úwrap_inlinerr   r„   Ú_call_lazy_check©r�   s    rD   rŽ   zOptimizedModule._initializeø   sñ   € å�d”o¥~Ñ6Ô6ð 	DàŸ?š?¨4¬>Ô+BÑCÔCˆDŒLˆLÝ˜œÔ.µÔ0@ÑAÔAð 
	DÝÔ˜dœnÔ4Ñ5Ô5ð
	Då�t”~Ð'@À%ÑHÔHð
	Dð  Ÿ?š?­>Ô+EÀdÄnÑ+UÔ+UÑVÔVˆDŒLˆLð  Ÿ?š?¨4¬>Ô+BÑCÔCˆDŒLå�4”>Ð#5Ñ6Ô6ð 	1Ø œLˆDŒMØÔ0ˆDŒLˆLˆLð	1ð 	1rC   c                ó,   — | j         | j        | j        ffS rm   )r‘   r…   r†   rž   s    rD   Ú
__reduce__zOptimizedModule.__reduce__  s   € Ø” ¤°´Ð AÐBÐBrC   c                ó†   — t          | j        ¦  «        }|                     dd ¦  «         |                     dd ¦  «         |S )Nr‚   r—   )Údictrƒ   Úpop©r�   Ústates     rD   Ú__getstate__zOptimizedModule.__getstate__  s>   € Ý�T”]Ñ#Ô#ˆØ�	Š	�)˜TÑ"Ô"Ð"Ø�	Š	�*˜dÑ#Ô#Ð#ØˆrC   c                ó<   — || _         |                      ¦   «          d S rm   )rƒ   rŽ   r¤   s     rD   Ú__setstate__zOptimizedModule.__setstate__  s!   € ØˆŒØ×ÒÑÔÐÐÐrC   c                ó   — | j         j        S rm   )r…   r�   rž   s    rD   r�   zOptimizedModule.training  s   € àŒ~Ô&Ð&rC   c                ó†   •— 	 t          ¦   «                              d¦  «         || j        _        d S # t          $ r Y d S w xY w©Nr…   )rŒ   Ú__getattr__r…   r�   ÚAttributeError)r�   Úvaluer‘   s     €rD   r�   zOptimizedModule.training  sR   ø€ ð	Ý‰GŒG×Ò Ñ,Ô,Ð,Ø&+ˆDŒNÔ#Ð#Ð#øÝð 	ð 	ð 	àˆDˆDð	øøøs   ƒ-2 ²
A ¿A c                óR   — |dk    r| j         d         S t          | j        |¦  «        S r«   )Ú_modulesr›   r…   )r�   Únames     rD   r¬   zOptimizedModule.__getattr__'  s,   € Ø�;ÒÐØ”= Ô-Ð-Ý�t”~ tÑ,Ô,Ð,rC   c                ó  •— t          t          | ¦  «        |¦  «        r"t          ¦   «                              ||¦  «        S |t          j        v r"t          ¦   «                              ||¦  «        S t          | j        ||¦  «        S rm   )rr   ÚtyperŒ   Ú__setattr__r   Ú_opt_mod_attributesÚsetattrr…   )r�   r±   Úvalr‘   s      €rD   r´   zOptimizedModule.__setattr__,  sq   ø€ å•4˜‘:”:˜tÑ$Ô$ð 	2Ý‘7”7×&Ò& t¨SÑ1Ô1Ð1à•?Ô6Ð6Ð6Ý‘7”7×&Ò& t¨SÑ1Ô1Ð1Ý�t”~ t¨SÑ1Ô1Ð1rC   c                óä   — t          | j        d¦  «        rOt          | j        d¦  «        r:t          | j        j        ¦  «        r!| j                             | j        ||¦  «          | j        |i |¤ŽS )Nr”   Ú_infer_parameters)rr   r…   ry   r¹   r„   )r�   rc   rd   s      rD   r�   z OptimizedModule._call_lazy_check5  s{   € å�D”NÐ$6Ñ7Ô7ð		Kå˜œÐ(;Ñ<Ô<ð		Kõ ˜œÔ9Ñ:Ô:ð		Kð ŒN×,Ò,¨T¬^¸TÀ6ÑJÔJÐJØˆtŒ}˜dÐ- fÐ-Ð-Ð-rC   c                ó–   •‡— | j                              ¦   «         Š‰ˆfd„t          ¦   «                              ¦   «         D ¦   «         z   S )Nc                ó   •— g | ]}|‰v¯|‘Œ	S rB   rB   )Ú.0ÚattrÚorig_mod_attrss     €rD   ú
<listcomp>z+OptimizedModule.__dir__.<locals>.<listcomp>D  s*   ø€ ð !
ð !
ð !
Ø°$¸nÐ2LÐ2LˆDÐ2LÐ2LÐ2LrC   )r…   Ú__dir__rŒ   )r�   r¾   r‘   s    @€rD   rÀ   zOptimizedModule.__dir__B  sX   øø€ Øœ×/Ò/Ñ1Ô1ˆØð !
ð !
ð !
ð !
Ý"™WœWŸ_š_Ñ.Ô.ð!
ñ !
ô !
ñ 
ð 	
rC   )rˆ   r‰   rW   rŠ   ©rW   rŠ   )r>   r?   r@   Ú__doc__rV   rµ   r�   rŽ   r    r¦   r¨   Úpropertyr�   Úsetterr¬   r´   r�   rÀ   Ú__classcell__©r‘   s   @rD   r   r   Ü   sK  ø€ € € € € € ðð ð
 3Ð2Ð2Ñ2Ø*Ð*Ð*Ñ*ð	ð 	ð 	Ðð0ð 0ð 0ð 0ð 0ð 0ð1ð 1ð 1ð*Cð Cð Cðð ð ðð ð ð ð'ð 'ñ „Xð'ð „_ðð ð ð ñ „_ðð-ð -ð -ð
2ð 2ð 2ð 2ð 2ð 2ð.ð .ð .ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
rC   r   c                ór  — t          | t          j        ¦  «        rt          | ¦  «         dS t	          | d¦  «        rt          | j        ¦  «         dS t	          t          | dd¦  «        d¦  «        rt          | j        j        ¦  «         dS ddlm	}  |¦   «          t                               d| ¦  «         dS )zA
    Make sure f.__code__ is not cached to force a recompile
    rz   r‚   Nr(   ©rp   z#could not determine __code__ for %s)r•   r˜   ÚCodeTyper   rr   rz   r›   r‚   Ú rp   ÚlogÚwarning)Úfrp   s     rD   Úremove_from_cacherÎ   I  s¾   € õ �!•U”^Ñ$Ô$ð 
>Ý�1‰ŒˆˆˆÝ	��JÑ	Ô	ð >Ý�1”:ÑÔÐÐÐÝ	•˜˜I tÑ,Ô,¨jÑ	9Ô	9ð >Ý�1”9Ô%Ñ&Ô&Ð&Ð&Ð&àÐÐÐÐÐàˆ‰ŒˆÝ�ŠÐ9¸1Ñ=Ô=Ð=Ð=Ð=rC   c                 ó   — d S rm   rB   rB   rC   rD   ÚnothingrÐ   Z  s   € Ø€DrC   c                 ó   — dS ©NFrB   rB   rC   rD   Úalways_falserÓ   ^  s   € Øˆ5rC   c                óz   — | }t          |d¦  «        r(|j        }t          |¦  «        sJ ‚t          |d¦  «        °(|S )zä
    In case of nesting of _TorchDynamoContext calls, find the innermost
    function. TorchDynamo caches on fn.__code__ object, so its necessary to find
    the innermost function to pass on the optimize, run, disable etc.
    ri   )rr   ri   ry   )ÚfnÚunaltered_fns     rD   Úinnermost_fnr×   b  sU   € ð €LÝ
�,Ð <Ñ
=Ô
=ð &Ø#Ô>ˆÝ˜Ñ%Ô%Ð%Ð%Ð%õ �,Ð <Ñ
=Ô
=ð &ð ÐrC   ÚenablerS   c                óŠ   — t          | t          ¦  «        sJ ‚| rt          j        d¬¦  «        S t          j        dd¬¦  «        S )NF)Úassume_static_by_defaultT)Úautomatic_dynamic_shapesrÚ   )r•   rS   r)   Ú_make_closure_patcher)rØ   s    rD   Úmake_set_enable_dynamicrÝ   o  sS   € Ý�f�dÑ#Ô#Ð#Ð#Ð#Øð 
åÔ+ÀUÐKÑKÔKÐKåÔ+Ø%*ÀTð
ñ 
ô 
ð 	
rC   c                  ó   — e Zd ZU g Zded<   dS )Ú	DynamoTLSú	List[str]Útraced_frame_infosN)r>   r?   r@   rá   rV   rB   rC   rD   rß   rß   |  s&   € € € € € € ð %'ÐÐ&Ð&Ð&Ñ&Ð&Ð&rC   rß   c                 ó®   — d                      t          j        ¦  «        } t          j        | d¦  «        } d| › d�} t
                               | ¦  «         dS )z�
    At program exit, log all of the frames Dynamo has attempted to trace from,
    excluding the continuation frames generated by Dynamo.
    ú
z  * z7TorchDynamo attempted to trace the following frames: [
z
]N)r   Ú
dynamo_tlsrá   ÚtextwrapÚindentrË   Úinfo)Úmsgs    rD   Ú_log_traced_framesré   …  sL   € ð �)Š)•JÔ1Ñ
2Ô
2€CÝ
Œ/˜#˜vÑ
&Ô
&€CØ
MÀSÐ
MÐ
MÐ
M€CÝ‡H‚HˆS�M„M€M€M€MrC   c                  óF   ‡ — e Zd Zeeedfddddœdˆ fd„Zd	„ Zd
„ Zd„ Zˆ xZ	S )Ú_TorchDynamoContextFN©ÚexportÚdynamicÚcompiler_configrF   r;   rW   rŠ   c               ó„  •‡‡— t          ¦   «                              ¦   «          t          |¦  «        s|du s|�J ‚|| _        ‰| _        t
          | _        || _        || _        || _	        || _
        g | _        g | _         |¦   «          t          |¦  «        }	t                               t!          |	¦  «        |	¦  «         |�'| j                             t%          |¦  «        ¦  «         ‰t&          urˆfd„}
| j                             |
¦  «         ‰t(          j        ur!ˆfd„}| j                             |¦  «         d S d S )NFc                 ó&   •—  ‰ ¦   «          t           S rm   )rÐ   )Úon_enters   €rD   Úcall_on_enterz3_TorchDynamoContext.__init__.<locals>.call_on_enter´  s   ø€ Ø�‘
”
�
Ý�rC   c                 óx   •—  ‰¦   «         } |                       ¦   «          t          j        | j        d d d ¦  «        S rm   )Ú	__enter__Ú	functoolsÚpartialÚ__exit__)ÚctxÚbackend_ctx_ctors    €rD   Úcall_backend_ctxz6_TorchDynamoContext.__init__.<locals>.call_backend_ctx¼  s7   ø€ Ø&Ð&Ñ(Ô(�Ø—’‘”�Ý Ô(¨¬°t¸TÀ4ÑHÔHÐHrC   )rŒ   r�   ry   rF   Ú_backend_ctx_ctorÚunsetr\   Ú	first_ctxrí   Ú_dynamicrï   Úcleanup_fnsÚenter_exit_hooksr×   rE   Ú
setdefaultÚidÚappendrÝ   rÐ   Ú
contextlibÚnullcontext)r�   rF   rò   rú   Úpatch_fnrþ   rí   rî   rï   rU   ró   rû   r‘   s     ``        €rD   r�   z_TorchDynamoContext.__init__’  sp  øøø€ õ 	‰Œ×ÒÑÔÐÝ˜Ñ!Ô!ÐJ X°Ð%6Ð%6¸(Ð:JÐ:JÐJØ(0ˆŒØ!1ˆÔÝ38ˆŒ
Ø"ˆŒØˆŒØˆŒØ.ˆÔØ46ˆÔØ "ˆÔØˆ‰
Œ
ˆ
õ ˜xÑ(Ô(ˆÝ×"Ò"¥2 g¡;¤;°Ñ8Ô8Ð8àÐØÔ!×(Ò(Õ)@ÀÑ)IÔ)IÑJÔJÐJà�7Ð"Ð"ðð ð ð ð ð Ô!×(Ò(¨Ñ7Ô7Ð7à¥:Ô#9Ð9Ð9ðIð Ið Ið Ið Ið
 Ô!×(Ò(Ð)9Ñ:Ô:Ð:Ð:Ð:ð :Ð9rC   c                óô   — t           j        rt          d¦  «        ‚d„ | j        D ¦   «         | _        t          t          | j        ¦  «        ¦  «        | _        t          t          ¦   «         ¦  «        | _        d S )NzÒtorch._dynamo.optimize(...) is used with a context manager. Please refer to https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html to use torch._dynamo.optimize(...) as an annotation/decorator. c                ó"   — g | ]} |¦   «         ‘ŒS rB   rB   ©r¼   Úenters     rD   r¿   z1_TorchDynamoContext.__enter__.<locals>.<listcomp>Ê  s   € ÐGÐGÐG¨˜E˜E™GœGÐGÐGÐGrC   )r)   Úraise_on_ctx_manager_usagerZ   r  r   rM   rk   rF   r\   r   rn   Úprior_skip_guard_eval_unsaferž   s    rD   rõ   z_TorchDynamoContext.__enter__Ã  s|   € ÝÔ,ð 	ÝðRñô ð ð
 HÐG°Ô1FÐGÑGÔGˆÔÝ*Õ+@ÀÄÑ+OÔ+OÑPÔPˆŒ
Ý,FÝ-Ñ/Ô/ñ-
ô -
ˆÔ)Ð)Ð)rC   c                óè   — | j         t          usJ ‚t          | j         ¦  «         t          | j        ¦  «         t          | _         | j        D ]} |¦   «          Œ| j                             ¦   «          d S rm   )r\   rý   rM   r   r  r   rs   )r�   Úexc_typeÚexc_valÚexc_tbÚcleanups        rD   rø   z_TorchDynamoContext.__exit__Ð  sw   € ØŒz¥Ð&Ð&Ð&Ð&Ý˜dœjÑ)Ô)Ð)Ý" 4Ô#DÑEÔEÐEÝˆŒ
ØÔ'ð 	ð 	ˆGØˆG‰IŒIˆIˆIØÔ×ÒÑ Ô Ð Ð Ð rC   c                óÜ  ‡ ‡‡	‡
‡— ˆ fd„}t          ‰¦  «        Št          ‰t          ¦  «        r3t          j        ‰¦  «        t          j        ‰j        j        ¦  «        d<   t          ‰t          j
        j        ¦  «        r9‰}t          |‰ ¦  «        }|j        |_        t          |d¦  «        rJ ‚||_        |S t!          j        ‰¦  «        rM‰} ‰ |j        ¦  «        |_        t'          |t          j
        j        ¦  «        r ‰ |j        ¦  «        |_        |S t+          ‰¦  «        sJ ‚	 t!          j        ‰¦  «        }n# t.          $ r d }Y nw xY w|�t1          j        ‰¦  «        r0t5          ‰dd¦  «        dvr|t6          vrt9          j        ‰¦  «        Šd„ }t          ‰ d¦  «        r‰ j        Š	n|Š	t          j        j         Št          j!        j"        j#        Š
tI          j%        ‰¦  «        ˆ	ˆˆ
ˆˆ fd	„¦   «         }‰|_&        ‰|_        t          |d¦  «        rJ ‚||_        ‰	d
vr@t          ‰d¦  «        s!tO          tQ          j)        d¦  «        ¦  «        ‚dtT          ‰j        <   |S )Nc                 ó   •— ‰ j         S rm   )rï   rž   s   €rD   r�   z9_TorchDynamoContext.__call__.<locals>.get_compiler_configÛ  s   ø€ ØÔ'Ð'rC   Úorig_graphmoduler�   r>   rÊ   )Ú
_call_implÚ_wrapped_call_implÚ_lazy_forwardc                 ó   — d S rm   rB   )Úargrd   s     rD   Ú
do_nothingz0_TorchDynamoContext.__call__.<locals>.do_nothing  s   € ØˆDrC   rF   c                 óÆ  •—  ‰	¦   «         r#t           j        rt          d¦  «        ‚ ‰| i |¤ŽS  ‰
¦   «         rt          d¦  «        ‚d„ ‰j        D ¦   «         }t	          t          ‰¦  «        ¦  «        }t          t          ¦   «         ¦  «        }t          j	        j
                             ¦   «         }	  ‰| i |¤Žt          j	        j
                             |¦  «         t	          |¦  «         t          |¦  «         |D ]} |¦   «          ŒS # t          j	        j
                             |¦  «         t	          |¦  «         t          |¦  «         |D ]} |¦   «          Œw xY w)NzvDetected that you are using FX to symbolically trace a dynamo-optimized function. This is not supported at the moment.zsDetected that you are using FX to torch.jit.trace a dynamo-optimized function. This is not supported at the moment.c                ó"   — g | ]} |¦   «         ‘ŒS rB   rB   r
  s     rD   r¿   z=_TorchDynamoContext.__call__.<locals>._fn.<locals>.<listcomp>-  s   € ÐCÐCÐC E˜˜™œÐCÐCÐCrC   )r)   Úerror_on_nested_fx_tracerZ   r  rM   rk   r   rn   rJ   r{   Ú
_functorchÚget_dynamic_layer_stack_depthÚ)pop_dynamic_layer_stack_and_undo_to_depth)rc   rd   Úcleanupsr\   r  Úsaved_dynamic_layer_stack_depthr  rF   rÕ   Úis_fx_tracingÚis_jit_tracingr�   s          €€€€€rD   Ú_fnz)_TorchDynamoContext.__call__.<locals>._fn  sµ  ø€ àˆ}‰Œð /ÝÔ2ð /Ý&ð\ñô ð ð
 ˜2˜tÐ. vÐ.Ð.Ð.àˆ~ÑÔð Ý"ðXñô ð ð
 DÐC¨TÔ-BÐCÑCÔCˆHÝ)Õ*?ÀÑ*IÔ*IÑJÔJˆEÝ+EÝ1Ñ3Ô3ñ,ô ,Ð(õ ”Ô#×AÒAÑCÔCð ,ðØ�r˜4Ð* 6Ð*Ð*õ ”Ô#×MÒMØ3ñô ð õ & eÑ,Ô,Ð,Ý*Ð+GÑHÔHÐHØ'ð ð �GØ�G‘I”I�I�Iðøõ ”Ô#×MÒMØ3ñô ð õ & eÑ,Ô,Ð,Ý*Ð+GÑHÔHÐHØ'ð ð �GØ�G‘I”I�I�Iðøøøs   Â4D ÄAE rÒ   rz   a×  

                        torch._dynamo.optimize is called on a non function object.
                        If this is a callable class, please wrap the relevant code into a function and optimize the
                        wrapper function.

                        >> class CallableClass:
                        >>     def __init__(self) -> None:
                        >>         super().__init__()
                        >>         self.relu = torch.nn.ReLU()
                        >>
                        >>     def __call__(self, x):
                        >>         return self.relu(torch.sin(x))
                        >>
                        >>     def print_hello(self):
                        >>         print("Hello world")
                        >>
                        >> mod = CallableClass()

                        If you want to optimize the __call__ function and other code, wrap that up in a function

                        >> def wrapper_fn(x):
                        >>     y = mod(x)
                        >>     return y.sum()

                        and then optimize the wrapper_fn

                        >> opt_wrapper_fn = torch._dynamo.optimize(wrapper_fn)
                        T)+r×   r•   r    ÚweakrefÚrefr0   Úget_contextr‚   rz   rJ   ÚnnÚModuler   ri   rr   r�   ÚinspectÚisclassr—   Ú
issubclassr  ry   ÚgetsourcefileÚ	TypeErrorr,   rš   r›   ÚDONT_WRAP_FILESr+   rœ   rF   r{   Ú_is_tracingÚfxÚ_symbolic_tracer$  rö   ÚwrapsÚ_torchdynamo_inlinerZ   rå   ÚdedentÚalways_optimize_code_objects)r�   rÕ   r�   rˆ   Únew_modÚcls_objÚfilenamer  r&  rF   r$  r%  s   ``       @@@rD   r—   z_TorchDynamoContext.__call__Ù  sä  øøøøø€ ð	(ð 	(ð 	(ð 	(ð 	(õ ˜"ÑÔˆõ �b�+Ñ&Ô&ð 	 õ ”˜B‘”õ Ô$ R¤ZÔ%8Ñ9Ô9Ø"ñõ
 �b�%œ(œ/Ñ*Ô*ð 	ØˆCÝ% c¨4Ñ0Ô0ˆGð 25´ˆGÔ.õ ˜wÐ(=Ñ>Ô>Ð>Ð>Ð>Ø*=ˆGÔ'àˆNåŒ?˜2ÑÔð 	ð ˆGØ#˜t GÔ$4Ñ5Ô5ˆGÔÝ˜'¥5¤8¤?Ñ3Ô3ð >à%) T¨'Ô*<Ñ%=Ô%=�Ô"ØˆNå˜‰|Œ|ÐÐˆ|ð	ÝÔ,¨RÑ0Ô0ˆHˆHøÝð 	ð 	ð 	ØˆHˆHˆHð	øøøð Ð¥Ô!2°2Ñ!6Ô!6Ðå˜˜J¨Ñ+Ô+ØLðMð Mð ¥Ð/Ð/õ  Ô+¨BÑ/Ô/ˆBð	ð 	ð 	õ �4˜Ñ$Ô$ð 	"Ø”}ˆHˆHà!ˆHåœÔ-ˆÝœÔ0Ô>ˆå	Œ˜Ñ	Ô	ð+	ð +	ð +	ð +	ð +	ð +	ð +	ð +	ñ 
Ô	ð+	ð\ #%ˆÔð *,ˆÔ&õ ˜3Ð 5Ñ6Ô6Ð6Ð6Ð6Ø"5ˆÔð ˜=Ð(Ð(Ý˜2˜zÑ*Ô*ð !Ý"Ý”Oðñô ñ ô  ð  ðB 9=Õ(¨¬Ñ5àˆ
s   Ä-E ÅEÅE)rF   r;   rW   rŠ   )
r>   r?   r@   rÐ   Únull_contextr�   rõ   rø   r—   rÅ   rÆ   s   @rD   rë   rë   ‘  sš   ø€ € € € € ð Ø%ØØð/;ð ØØð/;ð /;ð /;ð /;ð /;ð /;ð /;ð /;ðb
ð 
ð 
ð!ð !ð !ðdð dð dð dð dð dð drC   rë   c                  ó6   ‡ — e Zd Z	 d
dddddœdˆ fd„Zd	„ Zˆ xZS )ÚOptimizeContextFN)rí   rî   rï   Úrebuild_ctxr?  ú>Optional[Callable[[], Union[OptimizeContext, _NullDecorator]]]rW   rŠ   c          
     óÔ   •‡ ‡— d„ }t          ¦   «                              |||t          j        ||||¬¦  «         t          j        r"ˆˆ fd„}	‰ j                             |	¦  «         d S d S )Nc                 ó"   — t          ¦   «          d S rm   r5   rB   rC   rD   rò   z*OptimizeContext.__init__.<locals>.on_enterŽ  s   € Ý+Ñ-Ô-Ð-Ð-Ð-rC   )rF   rò   rú   r  rþ   rí   rî   rï   c                 óÖ   •— ‰€J ‚ ‰¦   «         } t           j        j                             | ‰j        ¬¦  «        }|                     ¦   «          t          j        |j        d d d ¦  «        S )N)rî   )	rJ   rK   Úcompiled_autogradÚ_enablerÿ   rõ   rö   r÷   rø   )Úcompiler_fnrù   r?  r�   s     €€rD   Úcall_compiled_autogradz8OptimizeContext.__init__.<locals>.call_compiled_autogradž  sh   ø€ Ø"Ð.Ð.Ð.Ø)˜k™mœm�Ý”mÔ5×=Ò=Ø¨¬ð >ñ ô �ð —’‘”�Ý Ô(¨¬°t¸TÀ4ÑHÔHÐHrC   )rŒ   r�   ÚTorchPatcherr   r)   rD  r  r  )r�   rF   rú   rþ   rí   rî   rï   r?  rò   rG  r‘   s   `      `  €rD   r�   zOptimizeContext.__init__�  s°   øøø€ ð	.ð 	.ð 	.õ 	‰Œ×ÒØØØ-Ý!Ô'ØØØØ+ð 	ñ 		
ô 		
ð 		
õ Ô#ð 	AðIð Ið Ið Ið Ið Ið Ô!×(Ò(Ð)?Ñ@Ô@Ð@Ð@Ð@ð	Að 	ArC   c                ó`   — | j         | j        | j        | j        f| j        | j        | j        dœfS )Nrì   )r‘   rF   rü   rþ   rí   rÿ   rï   rž   s    rD   r    zOptimizeContext.__reduce__©  s<   € àŒNØŒ]˜DÔ2°D´NÐCàœ+Øœ=Ø#'Ô#7ðð ð
ð 	
rC   )F)r?  r@  rW   rŠ   ©r>   r?   r@   r�   r    rÅ   rÆ   s   @rD   r>  r>  €  sz   ø€ € € € € ð
 ð	&Að ØØð ð&Að &Að &Að &Að &Að &Að &Að &AðP	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
rC   r>  c                  ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚRunOnlyContextrW   rŠ   c                óT   •— d„ }t          ¦   «                              d|¬¦  «         d S )Nc                 óN   — t           j        j        j        xj        dz  c_        d S )Nr(   )rJ   rK   Úmutation_guardÚGenerationTrackerÚ
generationrB   rC   rD   rò   z)RunOnlyContext.__init__.<locals>.on_enter¸  s$   € ÝŒMÔ(Ô:ÐEÔEÈÑJÐEÔEÐEÐErC   F)rF   rò   ©rŒ   r�   )r�   rò   r‘   s     €rD   r�   zRunOnlyContext.__init__¶  s:   ø€ ð	Kð 	Kð 	Kõ 	‰Œ×Ò %°(ÐÑ;Ô;Ð;Ð;Ð;rC   c                ó   — | j         dfS ©NrB   rÆ   rž   s    rD   r    zRunOnlyContext.__reduce__½  ó   € Ø” Ð#Ð#rC   rÁ   rJ  rÆ   s   @rD   rL  rL  µ  sL   ø€ € € € € ð<ð <ð <ð <ð <ð <ð$ð $ð $ð $ð $ð $ð $rC   rL  c                  ó,   ‡ — e Zd Zdˆ fd„Zd„ Zd„ Zˆ xZS )r–   rW   rŠ   c                óL   •— t          ¦   «                              d ¬¦  «         d S )N)rF   rR  )r�   r‘   s    €rD   r�   zDisableContext.__init__Â  s$   ø€ Ý‰Œ×Ò $ÐÑ'Ô'Ð'Ð'Ð'rC   c                ó  ‡ ‡— t          ‰¦  «        Št          ‰t          j        j        ¦  «        r ‰}t          |‰ ¦  «        }|j        |_        |S t          j	        ‰¦  «        rb‰} ‰ |j
        ¦  «        |_
         ‰ |j        ¦  «        |_        t          |t          j        j        ¦  «        r ‰ |j        ¦  «        |_        |S t          ‰¦  «        sJ ‚t          j        ‰¦  «        ˆˆ fd„¦   «         }d|_        ‰|_        |S )Nc                 ó  •— t          t          ‰j        ¦  «        ¦  «        }t          t	          ¦   «         ¦  «        }	  ‰| i |¤Žt          |¦  «         t          |¦  «         S # t          |¦  «         t          |¦  «         w xY wrm   )rM   rk   rF   r   rn   )rc   rd   r\   r  rÕ   r�   s       €€rD   r&  z$DisableContext.__call__.<locals>._fnâ  s’   ø€ å)Õ*?ÀÄÑ*NÔ*NÑOÔOˆEÝ+EÝ1Ñ3Ô3ñ,ô ,Ð(ðIØ�r˜4Ð* 6Ð*Ð*å% eÑ,Ô,Ð,Ý*Ð+GÑHÔHÐHÐHøõ & eÑ,Ô,Ð,Ý*Ð+GÑHÔHÐHÐHøøøs   ¿A% Á% BT)r×   r•   rJ   r*  r+  r   r‚   ri   r,  r-  r�   r—   r.  r  ry   rö   r5  Ú_torchdynamo_disable)r�   rÕ   rˆ   r9  r:  r&  s   ``    rD   r—   zDisableContext.__call__Å  s$  øø€ õ
 ˜"ÑÔˆå�b�%œ(œ/Ñ*Ô*ð 	ØˆCÝ% c¨4Ñ0Ô0ˆGØ14´ˆGÔ.ØˆNåŒ?˜2ÑÔð 	ð ˆGð  $˜t GÔ$4Ñ5Ô5ˆGÔØ#˜t GÔ$4Ñ5Ô5ˆGÔÝ˜'¥5¤8¤?Ñ3Ô3ð >à%) T¨'Ô*<Ñ%=Ô%=�Ô"ØˆNå˜‰|Œ|ÐÐˆ|å	Œ˜Ñ	Ô	ð		Ið 		Ið 		Ið 		Ið 		Iñ 
Ô	ð		Ið $(ˆÔ ð *,ˆÔ&àˆ
rC   c                ó   — | j         dfS rT  rÆ   rž   s    rD   r    zDisableContext.__reduce__ö  rU  rC   rÁ   )r>   r?   r@   r�   r—   r    rÅ   rÆ   s   @rD   r–   r–   Á  s\   ø€ € € € € ð(ð (ð (ð (ð (ð (ð/ð /ð /ðb$ð $ð $ð $ð $ð $ð $rC   r–   Frj   r4   c           	     óT   — t          t          j        | |¦  «        |d||||¬¦  «        S )NT)rú   rþ   rí   rî   rï   r?  )r>  r*   rg   )Ú
compile_fnrj   rú   rí   rî   rï   r?  s          rD   Ú_optimize_catch_errorsr^  ú  s=   € õ ÝÔ*¨:°uÑ=Ô=Ø)ØØØØ'Øðñ ô ð rC   c                ó¨   — ddl m} t          | d¦  «        r| j        }nt	          | t
          ¦  «        r| }nd }t          | ¦  «        }  || |¦  «        S )Nr(   )Úwrap_backend_debugÚcompiler_name)Úrepro.after_dynamor`  rr   ra  r•   rQ   r/   )rF  r`  Úcompiler_strs      rD   rh   rh     sn   € Ø6Ð6Ð6Ð6Ð6Ð6åˆ{˜OÑ,Ô,ð Ø"Ô0ˆˆÝ	�K¥Ñ	%Ô	%ð Ø"ˆˆàˆÝ  Ñ-Ô-€KØÐ˜k¨<Ñ8Ô8Ð8rC   c                  ó   — e Zd Zd„ ZdS )Ú_NullDecoratorc                ó(   — t          |¦  «        sJ ‚|S rm   )ry   )r�   rÕ   s     rD   r—   z_NullDecorator.__call__  s   € Ý˜‰|Œ|ÐÐˆ|Øˆ	rC   N)r>   r?   r@   r—   rB   rC   rD   re  re    s#   € € € € € ðð ð ð ð rC   re  c                 ó’   — t           j        dk    rt          d¦  «        ‚t          j        d¦  «        dk    rt          d¦  «        ‚d S )N)é   é   z0Python 3.14+ not yet supported for torch.compileÚPy_GIL_DISABLEDr(   z@torch.compile is not supported on Python built with GIL disabled)ÚsysÚversion_inforZ   Ú	sysconfigÚget_config_varrB   rC   rD   Úcheck_if_dynamo_supportedro  !  sS   € Ý
Ô˜7Ò"Ð"ÝÐMÑNÔNÐNÝ	Ô	!Ð"3Ñ	4Ô	4¸Ò	9Ð	9ÝØNñ
ô 
ð 	
ð 
:Ð	9rC   c                 óF   — 	 t          ¦   «          dS # t          $ r Y dS w xY w©NTF)ro  Ú	ExceptionrB   rC   rD   Úis_dynamo_supportedrs  *  s:   € ðÝ!Ñ#Ô#Ð#ØˆtøÝð ð ð Øˆuˆuðøøøó   ‚ ’
 Ÿ c                 ó"   — t          ¦   «          d S rm   )ro  rB   rC   rD   Úcheck_if_inductor_supportedrv  2  s   € ÝÑÔÐÐÐrC   c                 óF   — 	 t          ¦   «          dS # t          $ r Y dS w xY wrq  )rv  rr  rB   rC   rD   Úis_inductor_supportedrx  6  s:   € ðÝ#Ñ%Ô%Ð%ØˆtøÝð ð ð Øˆuˆuðøøørt  c                 ó2   ‡ ‡— ˆ ˆfd„}t          |g‰ ¢R i ‰¤ŽS )Nc                 óØ   •— t           j        } | rPt          |                      ¦   «         ¦  «        dhk    sJ d|                      ¦   «         › �¦   «         ‚| d         ‰d<   t	          ‰i ‰¤ŽS )NÚ	fullgraphz>Only `fullgraph` kwarg override is supported for now, but got Únopython)r)   Ú!compiled_autograd_kwargs_overrideÚsetÚkeysÚoptimize)Úca_kwargs_overriderc   rd   s    €€rD   r?  zoptimize.<locals>.rebuild_ctx?  s‘   ø€ Ý#ÔEÐØð 	Aõ Ð)×.Ò.Ñ0Ô0Ñ1Ô1Øð6ò ð ð àkÐPb×PgÒPgÑPiÔPiÐkÐkñô ð ð "4°KÔ!@ˆF�:ÑÝ˜Ð( Ð(Ð(Ð(rC   )Ú	_optimize)rc   rd   r?  s   `` rD   r€  r€  >  sB   øø€ ð	)ð 	)ð 	)ð 	)ð 	)ð 	)õ �[Ð2 4Ð2Ð2Ð2¨6Ð2Ð2Ð2rC   Úinductor)r|  Úguard_export_fnÚguard_fail_fnÚdisablerî   r?  ú4Callable[[], Union[OptimizeContext, _NullDecorator]]ú&Union[OptimizeContext, _NullDecorator]c          
     ó  — t          ¦   «          t          ||¬¦  «        }t          j                             d¦  «         |s3t
          j                             dd¦  «        dk    st          d¦  «        st          ¦   «         S t          |¦  «        }t          |dt          ¦  «        }|rt          |||| ¬¦  «        S t          t          j        ||¬	¦  «        |||t!          |d
¦  «        r|                     ¦   «         nd| ¬¦  «        S )aŸ  
    The main entrypoint of TorchDynamo.  Do graph capture and call
    backend() to optimize extracted graphs.

    Args:
        backend: One of the two things:
            - Either, a function/callable taking a torch.fx.GraphModule and
            example_inputs and returning a python callable that runs the
            graph faster.
            One can also provide additional context for the backend, like
            torch.jit.fuser("fuser2"), by setting the backend_ctx_ctor attribute.
            See AOTAutogradMemoryEfficientFusionWithContext for the usage.
            - Or, a string backend name in `torch._dynamo.list_backends()`
        nopython: If True, graph breaks will be errors and there will
            be a single whole-program graph.
        disable: If True, turn this decorator into a no-op
        dynamic: If True, upfront compile as dynamic a kernel as possible.  If False,
            disable all dynamic shapes support (always specialize).  If None, automatically
            detect when sizes vary and generate dynamic kernels upon recompile.

    Example Usage::

        @torch._dynamo.optimize()
        def toy_example(a, b):
            ...
    ©r„  r…  ztorch._dynamo.optimizeÚTORCHDYNAMO_DISABLErÊ   Ú1zpytorch/compiler:enable_dynamorú   )rî   rj   r?  )rj   r�   N)rî   rï   r?  )ro  r4   rJ   r{   Ú_log_api_usage_onceÚosÚenvironÚgetr   re  rh   r›   r<  Úoptimize_assertr^  r*   rr   r�   )	r?  rU   r|  r„  r…  r†  rî   rj   rú   s	            rD   r‚  r‚  M  s-  € õH ÑÔÐõ  /ÀÐOÑOÔO€EÝ	„H× Ò Ð!9Ñ:Ô:Ð:àð åŒ:�>Š>Ð/°Ñ4Ô4¸Ò;Ð;ÝÐ @ÑAÔAð <õ ÑÔÐå˜gÑ&Ô&€Gõ ˜wÐ(:½LÑIÔIÐàð 
ÝØØØØ#ð	
ñ 
ô 
ð 	
õ "ÝÔ# G°5Ð9Ñ9Ô9ØØØõ �wÐ 5Ñ6Ô6ðˆG×'Ò'Ñ)Ô)Ð)ààðñ ô ð rC   z&torch._dynamo.symbolic_convert.explainc                ób   ‡ — ˆ fd„}|s|r$t          j        dt          d¬¦  «          ||i |¤ŽS |S )Nc            
     ó0  •‡
‡‡‡‡— ddl m}  |¦   «          g Šg Š
dŠg Šg Šdˆ
ˆˆˆfd„}ˆfd„} t          |d|¬	¦  «        ‰¦  «        } || i |¤Ž t          ‰¦  «        }|dz
  }t	          d
¬¦  «        } |¦   «          ddlm}	  |	‰||‰
‰‰‰|¦  «        S )Nr(   rÈ   r   Úgmútorch.fx.GraphModulec                óH   •— ddl m}  || ‰‰‰‰¦  «        \  } ŠŠŠŠ| j        S )Nr(   )Ú_explain_graph_detail)Úbackends.debuggingr—  r‚   )r”  Úexample_inputsr—  Úbreak_reasonsÚgraphsÚop_countÚops_per_graphs      €€€€rD   Ú"dynamo_graph_accumulating_compilerzBexplain.<locals>.inner.<locals>.dynamo_graph_accumulating_compiler¬  sP   ø€ ð BÐAÐAÐAÐAÐAð BWÐAVØ�F˜H m°]ñBô BÑ>ˆB�˜ -°ð ”:ÐrC   c                ó2   •— ‰                      | ¦  «         d S rm   )Úextend©ÚguardsÚ
out_guardss    €rD   Úguard_export_printz2explain.<locals>.inner.<locals>.guard_export_print¼  s   ø€ à×Ò˜fÑ%Ô%Ð%Ð%Ð%rC   F)r|  r„  rQ   )Úrepr)ÚExplainOutput©r”  r•  )rÊ   rp   r€  Úlenr8   r˜  r¦  )rc   rd   rp   rž  r¤  Úopt_fÚgraph_countÚgraph_break_countÚcompile_timer¦  rš  r›  rœ  r�  r£  rÍ   s             @@@@@€rD   Úinnerzexplain.<locals>.inner   s;  øøøøøø€ àÐÐÐÐÐàˆ‰Œˆà-/ˆØ#%ˆØˆØ-/ˆØ*,ˆ
ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	&ð 	&ð 	&ð 	&ð 	&ð
•Ø.ØØ.ð
ñ 
ô 
ð ñ	ô ˆð 	ˆˆtÐ�vÐÐÐå˜&‘k”kˆØ'¨!™OÐÝ$¨%Ð0Ñ0Ô0ˆð 	ˆ‰ŒˆØ5Ð5Ð5Ð5Ð5Ð5àˆ}ØØØØØØØØñ	
ô 	
ð 		
rC   zäexplain(f, *args, **kwargs) is deprecated, use explain(f)(*args, **kwargs) instead.  If you don't migrate, we may break your explain call in the future if your user defined kwargs conflict with future kwargs added to explain(f).é   ©Ú
stacklevel)ÚwarningsÚwarnÚFutureWarning)rÍ   Ú
extra_argsÚextra_kwargsr­  s   `   rD   Úexplainr¶  ž  sp   ø€ ð9
ð 9
ð 9
ð 9
ð 9
ðv ð 
�\ð 
ÝŒð?õ Øð	
ñ 	
ô 	
ð 	
ð ˆu�jÐ1 LÐ1Ð1Ð1àˆrC   c                  óH   ‡ — e Zd Z	 ddˆ fd„Zd„ Zˆ fd„Zˆ fd„Zˆ fd„Zˆ xZS )ÚFlattenInputOutputSignatureNÚmr•  Ú	flat_argsú
Tuple[Any]Ú matched_input_elements_positionsú	List[int]Úflat_resultsú	List[Any]Ú!matched_output_elements_positionsÚexample_fake_inputsúList[torch.Tensor]Úflat_args_dynamic_dimsúList[Set[int]]Ú	fake_modeú$Optional[fake_tensor.FakeTensorMode]rW   rŠ   c	                óf  •‡ ‡‡‡— t          ¦   «                              |¦  «         t          ‰¦  «        t          |¦  «        k    sJ ‚ˆfd„t          |¦  «        D ¦   «         }	g ‰ _        t          dt          |¦  «        ¦  «        D �]Št          ¦   «                              d‰› �di ¦  «        }
‰|	v r|	‰         |
j        j        d<   n©|�§t          |‰         t          j        ¦  «        r‡|                     |‰         t          ˆˆfd„t          t          |‰         j        ¦  «        ¦  «        D ¦   «         d gt          |‰         j        ¦  «        z  ¬¦  «        ¬¦  «        |
j        j        d<   ‰ j                             |
¦  «         �Œˆ fd	„|D ¦   «         ‰ _        |‰ _        |‰ _        d S )
Nc                ó(   •— i | ]\  }}|‰|         “ŒS rB   rB   )r¼   Úixr·   rÁ  s      €rD   ú
<dictcomp>z8FlattenInputOutputSignature.__init__.<locals>.<dictcomp>÷  s5   ø€ ð *
ð *
ð *
á��Cð Ð$ RÔ(ð*
ð *
ð *
rC   r   r  rB   r·   c                óT   •— g | ]$}|‰‰         v rt           j        nt           j        ‘Œ%S rB   )r#   ÚDYNAMICÚSTATIC)r¼   ÚdrÃ  Úis     €€rD   r¿   z8FlattenInputOutputSignature.__init__.<locals>.<listcomp>	  sJ   ø€ ð +ð +ð +ð %&ð ()Ð,BÀ1Ô,EÐ'EÐ'Eõ %/Ô$6Ð$6å)3Ô):ð	+ð +ð +rC   )Údynamic_sizesÚconstraint_sizes)Úsymbolic_contextc              3  ó2   •K  — | ]}‰j         |         V — Œd S rm   )Únew_args)r¼   rÏ  r�   s     €rD   ú	<genexpr>z7FlattenInputOutputSignature.__init__.<locals>.<genexpr>  s*   øè è € ÐXÐX°!˜Tœ]¨1Ô-ÐXÐXÐXÐXÐXÐXrC   )rŒ   r�   r¨  Ú	enumeraterÔ  ÚrangeÚplaceholderÚnodeÚmetar•   rJ   ÚTensorÚfrom_tensorr%   Úshaper  Úold_args_genrÀ  r¾  )r�   r¹  rº  r¼  r¾  rÀ  rÁ  rÃ  rÅ  Úmatched_input_elements_to_faker  rÏ  r‘   s   `     ``   @€rD   r�   z$FlattenInputOutputSignature.__init__é  så  øøøøø€ õ 	‰Œ×Ò˜ÑÔÐåÐ)Ñ*Ô*­c°)©n¬nÒ<Ð<Ð<Ð<ð*
ð *
ð *
ð *
å$Ð%EÑFÔFð*
ñ *
ô *
Ð&ð
 ˆŒÝ�q�#˜i™.œ.Ñ)Ô)ð 	&ñ 	&ˆAÝ‘'”'×%Ò% i¨A i i°°RÑ8Ô8ˆCØÐ2Ð2Ð2Ø'EÀaÔ'H�””˜eÑ$Ð$ð Ð(­Z¸	À!¼ÅeÄlÑ-SÔ-SÐ(à+4×+@Ò+@Ø! !œÝ)Að+ð +ð +ð +ð +õ */­s°9¸Q´<Ô3EÑ/FÔ/FÑ)GÔ)Gð+ñ +ô +ð /3¨Vµc¸)ÀA¼,Ô:LÑ6MÔ6MÑ-Mð
*ñ 
*ô 
*ð ,Añ ,ô ,�C”H”M %Ñ(ð ŒM× Ò  Ñ%Ô%Ð%Ñ%ØXÐXÐXÐXÐ7WÐXÑXÔXˆÔØ1RˆÔ.Ø(ˆÔÐÐrC   c                ó–  — t          | j        ¦  «        }d| j        j        v r| j        j        d         |j        j        d<   d| j        j        v r| j        j        d         |j        j        d<   d| j        j        v r| j        j        d         |j        j        d<   d| j        j        v r| j        j        d         |j        j        d<   |S )Nr·   Útensor_dictÚexample_valueÚunbacked_bindings)ÚnextrÞ  Úcurrent_noderÚ  rÙ  )r�   Útargetrc   rd   r  s        rD   rØ  z'FlattenInputOutputSignature.placeholder  sÅ   € Ý�4Ô$Ñ%Ô%ˆØ�DÔ%Ô*Ð*Ð*Ø#'Ô#4Ô#9¸%Ô#@ˆCŒHŒM˜%Ñ Ø˜DÔ-Ô2Ð2Ð2Ø+/Ô+<Ô+AÀ-Ô+PˆCŒHŒM˜-Ñ(Ø˜dÔ/Ô4Ð4Ð4à-1Ô->Ô-CÀOÔ-TˆCŒHŒM˜/Ñ*Ø $Ô"3Ô"8Ð8Ð8Ø15Ô1BÔ1GØ#ô2ˆCŒHŒMÐ-Ñ.ð ˆ
rC   c                ó²  •— |d         }g |¢| j         ¢}g }t          t          | j        ¦  «        ¦  «        D ]|}| j        |         �'|                     || j        |                  ¦  «         Œ6| j        |         }t          |t          t          ¦  «        ¦  «        sJ ‚|                     |¦  «         Œ}t          ¦   «          
                    ||fi ¦  «        S )Nr   )rÔ  r×  r¨  r¾  rÀ  r  r•   Útupler7   rŒ   Úoutput)
r�   ræ  rc   rd   Údynamo_result_flatÚlookupÚnew_results_flatrÏ  Ú	const_valr‘   s
            €rD   ré  z"FlattenInputOutputSignature.output(  så   ø€ Ø! !œWÐØ6Ð%Ð6¨¬Ð6ˆØÐÝ•s˜4Ô,Ñ-Ô-Ñ.Ô.ð 	3ð 	3ˆAØÔ5°aÔ8ÐDØ ×'Ò'Ø˜4ÔAÀ!ÔDÔEñô ð ð ð !Ô-¨aÔ0�	Ý! )­UÕ3HÑ-IÔ-IÑJÔJÐJÐJÐJØ ×'Ò'¨	Ñ2Ô2Ð2Ð2Ý‰wŒw�~Š~˜fÐ'7Ð&9¸2Ñ>Ô>Ð>rC   c                óö  •— || _         t          ¦   «                              |¦  «        }d| j         j        v r| j         j        d         |j        j        d<   d| j         j        v r| j         j        d         |j        j        d<   d| j         j        v r| j         j        d         |j        j        d<   | j         j        dk    r8|j                             t          | j         d|j        j        ¦  «        ¦  «         |S )Nr·   râ  rã  ré  r±   )	rå  rŒ   Úrun_noderÚ  rÙ  ÚopÚ_renamer›   r±   )r�   ÚnÚresult_proxyr‘   s      €rD   rï  z$FlattenInputOutputSignature.run_node7  sý   ø€ ØˆÔÝ‘w”w×'Ò'¨Ñ*Ô*ˆØ�DÔ%Ô*Ð*Ð*Ø,0Ô,=Ô,BÀ5Ô,IˆLÔÔ" 5Ñ)Ø˜dÔ/Ô4Ð4Ð4à6:Ô6GÔ6LØô7ˆLÔÔ" ?Ñ3ð  $Ô"3Ô"8Ð8Ð8Ø:>Ô:KÔ:PØ#ô;ˆLÔÔ"Ð#6Ñ7ð ÔÔ 8Ò+Ð+ØÔ×%Ò%Ý˜Ô)¨6°<Ô3DÔ3IÑJÔJñô ð ð ÐrC   c                óè   •— t          ¦   «                              ¦   «         }d| j        j        v r| j        j        d         |j        d<   d| j        j        v r| j        j        d         |j        d<   |S )NÚ dynamo_flat_name_to_original_fqnÚdynamo_compile_id)rŒ   Ú	transformÚmodulerÚ  )r�   Ú	result_gmr‘   s     €rD   r÷  z%FlattenInputOutputSignature.transformK  ss   ø€ Ý‘G”G×%Ò%Ñ'Ô'ˆ	Ø-°´Ô1AÐAÐAØAEÄÔAQØ2ôBˆIŒNÐ=Ñ>ð  $¤+Ô"2Ð2Ð2Ø26´+Ô2BÐCVÔ2WˆIŒNÐ.Ñ/ØÐrC   rm   )r¹  r•  rº  r»  r¼  r½  r¾  r¿  rÀ  r½  rÁ  rÂ  rÃ  rÄ  rÅ  rÆ  rW   rŠ   )	r>   r?   r@   r�   rØ  ré  rï  r÷  rÅ   rÆ   s   @rD   r¸  r¸  è  s¢   ø€ € € € € ð ;?ð.)ð .)ð .)ð .)ð .)ð .)ð .)ð`ð ð ð?ð ?ð ?ð ?ð ?ðð ð ð ð ð(ð ð ð ð ð ð ð ð rC   r¸  c                  ó$   — e Zd ZU ded<   ded<   dS )ÚExportResultr•  Úgraph_moduleú_guards.GuardsSetr¢  N)r>   r?   r@   rV   rB   rC   rD   rû  rû  V  s*   € € € € € € Ø&Ð&Ð&Ñ&ØÐÐÑÐÐrC   rû  c                ó¶  — g }| j                              d¬¦  «        D �]}t          |d¦  «        sJ ‚|j        }| j                             |¦  «        }|€Œ9t          |¦  «        dk    sJ ‚d }|D ]}t          |¦  «        dk    rŒ|} |€|                     ¦   «         › d�}nmd                     t          j
        |¦  «        ¦  «        }d}	t          |¦  «        dk    rdt          |¦  «        dz
  › d	�}	|                     ¦   «         › d
|› |	› �}|                     |¦  «         �Œ	|r0t          t          j        dd                     |¦  «        z   ¦  «        ‚d S )NrØ  ©rð  Ú_dynamo_sourcer   z, a closed over free variablerÊ   r(   z(elided z more accesses)z, accessed at:
a�  Cannot export model which references tensors that are neither buffers/parameters/constants nor are direct inputs.  For each tensor, if you'd like this tensor to be an explicit input, add it as a dummy argument to the top-level model definition you are exporting; if you would like its value to be embedded as an exported constant, wrap its access in a function marked with @assume_constant_result.

z

)ÚgraphÚ
find_nodesrr   r   Ú_source_to_user_stacksr�  r¨  r±   r   Ú	tracebackÚformat_listr  r2   r3   ÚINVALID_INPUT)
r  Úinput_errorsrÙ  ÚsourceÚuser_stacksÚstackÚsrè   ÚtbÚextras
             rD   Úcheck_signature_rewritabler  ]  s›  € Ø€LØ”×&Ò&¨-Ð&Ñ8Ô8ð !ñ !ˆÝ�tÐ-Ñ.Ô.Ð.Ð.Ð.ØÔ$ˆØÔ2×6Ò6°vÑ>Ô>ˆØÐØÝ�;ÑÔ !Ò#Ð#Ð#Ð#ð ˆØð 	ð 	ˆAÝ�1‰vŒv˜Š{ˆ{ØØˆEØØˆ=Ø—[’[‘]”]ÐAÐAÐAˆCˆCà—’�Ô.¨uÑ5Ô5Ñ6Ô6ˆBØˆEÝ�;ÑÔ !Ò#Ð#ØH¥3 {Ñ#3Ô#3°aÑ#7ÐHÐHÐH�Ø—[’[‘]”]Ð?Ð?°BÐ?¸Ð?Ð?ˆCà×Ò˜CÑ Ô Ð Ñ àð 

ÝÝÔ'ðEð �kŠk˜,Ñ'Ô'ñ(ñ	
ô 	
ð 		
ð

ð 

rC   c
           
     ó  ‡ ‡— t          j        ||¦  «        \  }
}d„ } ||t          j        ¦  «         t          j        |¦  «        \  }} ||t          j        ¦  «         dd„Šˆˆ fd„} |d||¦  «        }|€J ‚ |dt          |¦  «        |z   |¦  «        }t          |||||||	|¦  «                             ¦   «         }dd
„}t          t           |‰ |
|¦  «        ||¦  «        ¦  «        |j        _        |                     ¦   «          |S )Nc                óz  ‡— t           j        t           j        t           j        t           j        t           j        j        gt          t          ¦  «        z   Šˆfd„}|t          j
        k    rdnd}| D ]J} ||¦  «        s=|t          j
        k    r|€Œ t          |d|› dt          |¦  «        › d|› d‰› d�	¦  «        ‚ŒKd S )	Nc                ó>   •— t          | t          ‰¦  «        ¦  «        S rm   )r•   rè  )r·   Úsupported_typess    €rD   Úis_supported_typezMrewrite_signature.<locals>.check_user_input_output.<locals>.is_supported_type�  s   ø€ Ý˜c¥5¨Ñ#9Ô#9Ñ:Ô:Ð:rC   Úinputré  zIt looks like one of the zs with type `z;` is not supported or pytree-flattenable. 
Exported graphs z2s can only contain the following supported types: zµ. 
If you are using a custom class object, please register a pytree_flatten/unflatten function using `torch.utils._pytree.register_pytree_node` or `torch.export.register_dataclass`.)rJ   rÛ  ÚSymIntÚSymFloatÚSymBoolr{   ÚScriptObjectÚlistr7   r3   r  r2   r³   )Úflat_valuesÚ
error_typer  Ú
value_typeÚvr  s        @rD   Úcheck_user_input_outputz2rewrite_signature.<locals>.check_user_input_output”  s
  ø€ åŒLÝŒLÝŒNÝŒMÝŒHÔ!ð
õ Õ&Ñ'Ô'ñ(ˆð	;ð 	;ð 	;ð 	;ð 	;ð !+­mÔ.IÒ IÐ I�W�WÈxˆ
àð 	ð 	ˆAØ$Ð$ QÑ'Ô'ð Ø¥Ô!<Ò<Ð<ÀÀØåØð9°
ð 9ð 9ÍÈaÉÌð 9ð 9à'1ð9ð 9ð 3Bð9ð 9ð 9ñ
ô 
ð 
ð	ð	ð 	rC   Úf_sigúinspect.Signaturec                óÜ   — | j                              ¦   «         D ]Q\  }}|j        t          j        j        ur4ddlm} t           	                    d||j        ¦  «          |dd¬¦  «        ‚ŒRd S )Nr   )ÚUnsupportedz3Parameter %s is optional with a default value of %sz3Tracing through optional input is not supported yetÚoptional_input©Ú	case_name)
Ú
parametersÚitemsrP   r,  Ú	ParameterÚemptyÚtorch._dynamo.excr"  rË   Úerror)r  r±   Úparamr"  s       rD   Úcheck_optional_input_and_errorz9rewrite_signature.<locals>.check_optional_input_and_error·  sš   € à Ô+×1Ò1Ñ3Ô3ð 	ð 	‰KˆD�%ØŒ}¥GÔ$5Ô$;Ð;Ð;Ø9Ð9Ð9Ð9Ð9Ð9å—	’	ØIØØ”Mñô ð ð
 "�kØIØ.ðñ ô ð ð <ð	ð 	rC   c                óÒ  •— g }i }t          |¦  «        D ]\  }}||t          |¦  «        <   Œt          |¦  «        D ]ª\  }}t          |t          t          ¦  «        ¦  «        r|                     d ¦  «         Œ=t          |¦  «        |vr4| dk    r ‰‰¦  «         t          dt          |¦  «        › d| › d�¦  «        ‚|                     |t          |¦  «                 ¦  «         Œ«|S )NÚinputszUnexpectedly found a z in the zO.
Please file an issue along with a paste of the logs from TORCH_LOGS="+export")rÖ  r  r•   rè  r7   r  ÚAssertionErrorr³   )	Ú
debug_typeÚsourcesÚ
candidatesÚmatched_elements_positionsÚdict_of_source_valsrÏ  r·   r-  r  s	          €€rD   Úproduce_matchingz+rewrite_signature.<locals>.produce_matchingÇ  s'  ø€ Ø:<Ð"Ø ÐÝ Ñ(Ô(ð 	-ð 	-‰FˆAˆsØ+,Ð¥ 3¡¤Ñ(Ð(å 
Ñ+Ô+ð 	Pð 	P‰FˆAˆsÝ˜#�uÕ%:Ñ;Ô;Ñ<Ô<ð 
PØ*×1Ò1°$Ñ7Ô7Ð7Ð7Ý�C‘”Ð 3Ð3Ð3Ø Ò)Ð)Ø2Ð2°5Ñ9Ô9Ð9Ý$ðd­D°©I¬Ið dð d¸zð dð dð dñô ð ð
 +×1Ò1Ð2EÅbÈÁgÄgÔ2NÑOÔOÐOÐOà)Ð)rC   r/  ÚoutputsrW   rà   c           	     ó°  ‡— d	d„} || ¦  «        Š‰j         d t          |¦  «        …         }t          |¦  «        t          ‰j         ¦  «        k    rN‰j        €
J d¦   «         ‚|ˆfd„t          dt          |¦  «        t          |¦  «        z
  ¦  «        D ¦   «         z  }njt          |¦  «        t          ‰j         ¦  «        k     rE‰j         t          |¦  «        t          ‰j        pg ¦  «         …         D ]}||v sJ d|› �¦   «         ‚Œ|t          |                     ¦   «         ¦  «        z  }‰j        D ] }‰j        pi }||v s||v sJ d|› �¦   «         ‚Œ!|S )
NÚsigr   c           	     ó°  — t          | j                             ¦   «         ¦  «        }d„ |D ¦   «         }d„ |D ¦   «         }t          d„ |D ¦   «         d ¦  «        }t          d„ |D ¦   «         d ¦  «        }t	          d„ |D ¦   «         ¦  «        }d„ |D ¦   «         }i }| j        r	d| j        i}|D ]}	|	j        ||	j        <   Œt          j	        |||||||¦  «        S )Nc                óP   — g | ]#}|j         t          j        j        k    ¯|j        ‘Œ$S rB   )Úkindr,  r(  ÚPOSITIONAL_OR_KEYWORDr±   ©r¼   Úps     rD   r¿   z_rewrite_signature.<locals>.argument_names.<locals>.signature_to_fullargspec.<locals>.<listcomp>ö  s7   € ð ð ð àØ”6�WÔ.ÔDÒDÐDð ”àDÐDÐDrC   c                óP   — g | ]#}|j         t          j        j        k    ¯|j        ‘Œ$S rB   )r<  r,  r(  ÚKEYWORD_ONLYr±   r>  s     rD   r¿   z_rewrite_signature.<locals>.argument_names.<locals>.signature_to_fullargspec.<locals>.<listcomp>û  s3   € ð ð ð Ø¨!¬&µGÔ4EÔ4RÒ*RÐ*R�”Ð*RÐ*RÐ*RrC   c              3  óX   K  — | ]%}|j         t          j        j        k    ¯|j        V — Œ&d S rm   )r<  r,  r(  ÚVAR_POSITIONALr±   r>  s     rD   rÕ  z^rewrite_signature.<locals>.argument_names.<locals>.signature_to_fullargspec.<locals>.<genexpr>ÿ  s6   è è € ÐVÐV˜A¨1¬6µWÔ5FÔ5UÒ+UÐ+U�”Ð+UÐ+UÐ+UÐ+UÐVÐVrC   c              3  óX   K  — | ]%}|j         t          j        j        k    ¯|j        V — Œ&d S rm   )r<  r,  r(  ÚVAR_KEYWORDr±   r>  s     rD   rÕ  z^rewrite_signature.<locals>.argument_names.<locals>.signature_to_fullargspec.<locals>.<genexpr>  s6   è è € ÐSÐS˜A¨1¬6µWÔ5FÔ5RÒ+RÐ+R�”Ð+RÐ+RÐ+RÐ+RÐSÐSrC   c              3  óˆ   K  — | ]=}|j         t          j        j        k    r!|j        t          j        j        u¯4|j        V — Œ>d S rm   )r<  r,  r(  r=  rP   r)  r>  s     rD   rÕ  z^rewrite_signature.<locals>.argument_names.<locals>.signature_to_fullargspec.<locals>.<genexpr>  sX   è è € ð ð àØ”6�WÔ.ÔDÒDÐDØ”I¥WÔ%6Ô%<Ð<Ð<ð ”	ð =Ð<Ð<Ð<ð	ð rC   c                óŒ   — i | ]A}|j         t          j        j        k    r%|j        t          j        j        u¯4|j        |j        “ŒBS rB   )r<  r,  r(  rA  rP   r)  r±   r>  s     rD   rÊ  z_rewrite_signature.<locals>.argument_names.<locals>.signature_to_fullargspec.<locals>.<dictcomp>  sP   € ð ð ð àØ”6�WÔ.Ô;Ò;Ð;Ø”I¥WÔ%6Ô%<Ð<Ð<ð ”˜œ	ð =Ð<Ð<rC   rW   )
r  r&  rq   rä  rè  Úreturn_annotationÚ
annotationr±   r,  ÚFullArgSpec)
r9  Úparamsrc   Ú
kwonlyargsÚvarargsÚvarkwÚdefaultsÚkwonlydefaultsr   Ú	parameters
             rD   Úsignature_to_fullargspeczKrewrite_signature.<locals>.argument_names.<locals>.signature_to_fullargspecò  sU  € å˜#œ.×/Ò/Ñ1Ô1Ñ2Ô2ˆFðð àðñ ô ˆDð
ð Ø &ðñ ô ˆJõ ØVÐV ÐVÑVÔVØñô ˆGõ ØSÐS ÐSÑSÔSØñô ˆEõ
 ð ð àðñ ô ñ ô ˆHðð àðñ ô ˆNð ˆKØÔ$ð @Ø'¨Ô)>Ð?�Ø#ð Cð C�	Ø.7Ô.B�˜IœNÑ+Ð+åÔ&Ø�g˜u h°
¸NÈKñô ð rC   zMore arguments than expectedc                ó(   •— g | ]}‰j         › d |› �‘ŒS )Ú_)rM  )r¼   rÏ  Úfullargspecs     €rD   r¿   z=rewrite_signature.<locals>.argument_names.<locals>.<listcomp>'  s:   ø€ ð ð ð àð Ô&Ð,Ð,¨Ð,Ð,ðð ð rC   r   zMissing argument zMissing keyword only argument )r9  r   )	rc   r¨  rM  r×  rO  r  r  rL  rP  )	r  rc   rd   rR  Ú
input_strsÚunprovided_argÚ
kwonly_argrP  rU  s	           @rD   Úargument_namesz)rewrite_signature.<locals>.argument_namesñ  s¼  ø€ ð*	ð *	ð *	ð *	ðX /Ð.¨uÑ5Ô5ˆð !Ô% k­¨D©	¬	 kÔ2ˆ
åˆt‰9Œ9•s˜;Ô+Ñ,Ô,Ò,Ð,ð Ô&Ð2Ð2Ð4RÑ2Ô2Ð2Øð ð ð ð å˜q¥# d¡)¤)­c°*©o¬oÑ"=Ñ>Ô>ðñ ô ñ ˆJˆJõ �‰YŒY�˜[Ô-Ñ.Ô.Ò.Ð.ð #.Ô"2Ý�D‘	”	�S Ô!5Ð!;¸Ñ<Ô<Ð<Ð<ô#ð Vð V�ð &¨Ð/Ð/Ð/Ð1UÀ^Ð1UÐ1UÑ/Ô/Ð/Ð/ð 	•d˜6Ÿ;š;™=œ=Ñ)Ô)Ñ)ˆ
ð &Ô0ð 	=ð 	=ˆJØ(Ô7Ð=¸2ˆNà˜fÐ$Ð$¨
°nÐ(DÐ(DÐ(DØ<°
Ð<Ð<ñ )EÔ(DÐDøð ÐrC   )r  r   )rW   rà   )ÚpytreeÚtree_unflattenr3   r  Útree_flattenÚINVALID_OUTPUTr  r¸  r÷  r&   r'   r  Ú_codegenÚ	recompile)r  r  rÅ  rº  Úin_specrÁ  Úgraph_captured_inputÚgraph_captured_outputÚdynamo_traced_resultrÃ  Ú	orig_argsÚorig_kwargsr  Úflat_results_tracedÚout_spec_tracedr6  r¼  rÀ  Ú	new_graphrY  r-  s   `                   @rD   Úrewrite_signatureri  †  sœ  øø€ õ $Ô2°9¸gÑFÔFÑ€Iˆ{ðð ð ð> Ð˜I¥}Ô'BÑCÔCÐCÝ+1Ô+>Ð?SÑ+TÔ+TÑ(Ð˜ØÐÐ/µÔ1MÑNÔNÐNðð ð ð ð *ð *ð *ð *ð *ð *ð* (8Ð'7Ø�)Ð1ñ(ô (Ð$ð !Ð,Ð,Ð,Ø(8Ð(8Ø•4Ð-Ñ.Ô.°Ñ:Ð<Oñ)ô )Ð%õ ,ØØØ(ØØ)ØØØñ	ô 	÷ ‚i�k„kð ðPð Pð Pð Põd  .ÝØˆN˜5 )¨[Ñ9Ô9ØØñ	
ô 	
ñ ô  €I„OÔð ×ÒÑÔÐØÐrC   Úsymbolic)Ú
aten_graphÚpre_dispatchÚdecomposition_tableÚtracing_modeÚdynamic_shapesÚspecialize_floatrÚ   Úsame_signatureÚdisable_constraint_solverÚ+prefer_deferred_runtime_asserts_over_guardsÚ'allow_complex_guards_as_runtime_assertsÚ_log_export_usagerÍ   r€   rk  rl  rm  ú9Optional[Dict[torch._ops.OpOverload, Callable[..., Any]]]rn  rQ   ro  ú6Optional[Union[Dict[str, Any], Tuple[Any], List[Any]]]rp  rÚ   rq  rr  rs  rt  ru  úCallable[..., ExportResult]c               óÂ   ‡‡‡‡‡‡‡	‡
‡‡‡‡— |rt          ddh¬¦  «         | Š|Š|Šˆˆˆˆˆˆˆ	ˆˆˆ
ˆˆfd„}|s|r$t          j        dt          d¬¦  «          ||i |¤ŽS |S )ac  
    Export an input function f to a format that can be executed outside of PyTorch using the FX graph.

    Args:
        f (callable): A PyTorch function to be exported.

        aten_graph (bool): If True, exports a graph with ATen operators.
        If False, exports a graph with Python operators. Default is False.

        pre_dispatch (bool): If True, exports a graph with ATen operators,
        but before any logic in the PyTorch dispatcher has run.
        This can be useful if you want to apply further transformations on a graph before running it
        through autograd, autocast, or any other functionalities that are integrated into the dispatcher.
        This flag is only valid if aten_graph=True is set.
        Default is False.

        decomposition_table (dict): A dictionary that maps operators to their decomposition functions.
        Required if aten_graph or tracing_mode is specified. Default is None.

        tracing_mode (str): If "symbolic", turn on dynamic shapes support. Default is "symbolic".

        dynamic_shapes:
         An optional argument where the type should either be:
         1) a dict from argument names of ``f`` to their dynamic shape specifications,
         2) a tuple that specifies dynamic shape specifications for each input in original order.
         If you are specifying dynamism on keyword args, you will need to pass them in the order that
         is defined in the original function signature.

         The dynamic shape of a tensor argument can be specified as either
         (1) a dict from dynamic dimension indices to :func:`Dim` types, where it is
         not required to include static dimension indices in this dict, but when they are,
         they should be mapped to None; or (2) a tuple / list of :func:`Dim` types or None,
         where the :func:`Dim` types correspond to dynamic dimensions, and static dimensions
         are denoted by None. Arguments that are dicts or tuples / lists of tensors are
         recursively specified by using mappings or sequences of contained specifications.

        same_signature (bool): If True, rewrite the returned graph's signature to be the same as f.

        disable_constraint_solver (bool): Whether the dim constraint solver must be disabled.

    Returns:
        A function that given args and kwargs, returns a tuple of (graph, guards)
        Graph: An FX graph representing the execution of the input PyTorch function with the provided arguments and options.
        Guards: The guards we accumulated during tracing f above

    Raises:
        AssertionError: If decomposition_table is specified without setting aten_graph=True,
        or if graph breaks during tracing in export.

        AssertionError: If Dynamo input and output is not consistent with traced input/output.

    Note - this headerdoc was authored by ChatGPT, with slight modifications by the author.
    zexport.private_apirK   )ÚeventÚflagsc                 ód  •‡‡‡ ‡!‡"‡#‡$— t          ‰&| |¦  «        }t          |‰,¦  «        Š‰&}‰'}‰%}t          ¦   «          t          j                             d¦  «         ‰*�‰)s
J d¦   «         ‚‰-r‰)s
J d¦   «         ‚t          |¦  «        }t          |t          j        j	        ¦  «        r|j
        n|}t          j        |¦  «        }d Š!d Š$d Š"d Š#d Š d }d)ˆ$fd„}	g Šd*ˆˆ ˆ!ˆ"ˆ#fd	„}
t          j        | |f¦  «        \  }}t          |¦  «         d }‰0d
k    rd}t!          j        d||ddd‰.‰(¬¦  «        5   t%          |
t'          |	d ¬¦  «        d‰¬¦  «        |¦  «        }	  || i |¤Ž}n# t(          $ r}|}Y d }~nd }~ww xY wd d d ¦  «         n# 1 swxY w Y   t          |¦  «         ‰+�set+          ‰ dd ¦  «        x}��Q|j        x}��Gt          |t          j        j        t          j        j        f¦  «        �st5          j        |¦  «        �s|                     ¦   «          |                     ¦   «         }|                     |‰,||¦  «        }|r|j        d         |z   f|_        n-|rt)          |¦  «        }nt@           !                    d|¦  «         |j"         #                    ¦   «         D ]a}t          |tH          j%        ¦  «        rEt)          d &                    tO          j(        |j)        |         ¦  «        ¦  «        › d|› d�¦  «        }Œb|r|‚‰!�€°‰/s
J d¦   «         ‚g ŠdŠ"dŠ#t          j*         +                    tY          ¦   «         d¬¦  «        Š ‰$€t[          j.        ¦   «         Š$‰$€J ‚t_          |j0         #                    ¦   «         ¦  «        }t          j1         2                    ¦   «         }tg          |¦  «        D ]€\  }}t          j4        ||         ¦  «        ra| 5                    |¦  «        }‰  6                    ||         d¬¦  «        |j7        d<   ‰"||         fz   Š"‰ 8                    ||         ¦  «         Œ�| 9                    ‰#¦  «         t          j         	                    ¦   «         }t          j1         :                    ||¦  «        Š!t@           !                    d‰! ;                    dd¬¦  «        ¦  «         ncty          ‰!d¦  «        sJ ‚‰$€
J d¦   «         ‚‰ €J ‚t@           !                    d‰! ;                    dd¬¦  «        ¦  «         ‰/rt{          ‰!¦  «         ˆ fd „‰D ¦   «         }‰)�rBˆ!fd!„}t}          ¦   «         5  t          ¦   «         5  ‰ 5  	  t�          |‰*d"d‰-d¬#¦  «        |Ž Š!n;# t‚          $ r.}t…          t†          jD        t‹          |¦  «        d$¬%¦  «        ‚d }~ww xY w	 d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   ‰!€J ‚‰!jF         G                    d&¬'¦  «        D ]a}t          t+          ‰!|jH        ¦  «        t          jI        ¦  «        r2‰  6                    t+          ‰!|jH        ¦  «        d¬¦  «        |j7        d<   Œb‰/r&ˆfd(„|D ¦   «         }t•          |‰!‰ |||‰"‰#||¦
  «
        Š!t—          ‰!‰$¦  «        S )+Nztorch._dynamo.exportzaSpecifying a decomposition_table table or tracing mode is illegal without setting aten_graph=Truez7pre_dispatch=True can only be used when aten_graph=Truer¢  rý  c                ó$   •— ‰�
J d¦   «         ‚| Šd S )Nz3whole graph export entails exactly one guard exportrB   r¡  s    €rD   r¤  z1export.<locals>.inner.<locals>.guard_export_print¶  s%   ø€ ð Ð"Ð"ØDñ #Ô"Ð"àˆJˆJˆJrC   r”  r•  c                ó^   •— ‰�
J d¦   «         ‚| Št          j        ¦   «         Š|Šˆˆˆˆfd„}|S )Nz\Tried to emit a second graph during export. Tracing through 'f' must produce a single graph.c                 óô  •— | Š‰€J ‚t          ‰                     d¬¦  «        ¦  «        }t          ‰                     d¬¦  «        ¦  «        }t          j        | ¦  «        �t          j        | ¦  «        n‰}t          ¦   «         }|€J ‚|j        x}r|                     ¦   «         }|5  t          ¦   «         5  |5  i |¥|¥}i }| 	                    ¦   «         D ]\  }}	| 
                    |	d¬¦  «        ||<   Œ t          j        |j
        | ¦  «        }
t          j                             ‰||
¦  «        Šd d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   ‰S )NF)Úremove_duplicateT©Ústatic_shapes)r¢   Únamed_parametersÚnamed_buffersr   Údetect_fake_moder<  Ú	shape_envÚignore_fresh_unbacked_symbolsr   r'  rÜ  rZ  Útree_maprJ   ÚfuncÚfunctional_call)Úgraph_inputsrƒ  r„  Úambient_fake_modeÚignore_fresh_unbackedr†  Úparams_and_buffersÚfake_params_buffersr±   r®   Úfake_graph_inputsrÅ  r  ra  Úgraph_captured_results              €€€€rD   Úresult_capturing_wrapperzhexport.<locals>.inner.<locals>.dynamo_normalization_capturing_compiler.<locals>.result_capturing_wrapperÑ  s†  ø€ ð (4Ð$ØÐ(Ð(Ð(å#'¨×(>Ò(>ÐPUÐ(>Ñ(VÔ(VÑ#WÔ#WÐ Ý $ U×%8Ò%8È%Ð%8Ñ%PÔ%PÑ QÔ Q�õ Ô/°Ñ=Ô=ÐIõ Ô,¨\Ñ:Ô:Ð:à"ð "õ )5©¬Ð%Ø(Ð4Ð4Ð4Ø 1Ô ;Ð;�9ð VØ,5×,SÒ,SÑ,UÔ,UÐ)ð &ðð å+Ñ-Ô-ðð à/Dðð ð*Ø*ð*à'ð*Ð&ð +-Ð'à'9×'?Ò'?Ñ'AÔ'Að ð ™˜˜eØ4E×4QÒ4QØ!°ð 5Rñ 5ô 5Ð+¨DÑ1Ð1õ )/¬Ø)Ô5°|ñ)ô )Ð%õ -2¬J×,FÒ,FØÐ2Ð4Eñ-ô -Ð)ð#ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð* -Ð,s[   Â)E-Â8EÂ;A8D?Ä3EÄ?EÅEÅEÅEÅ
E-ÅE	ÅE-ÅE	ÅE-Å-E1Å4E1)r   r…  )r”  Úinner_example_inputsr’  r™  rÅ  r  ra  r‘  s      €€€€€rD   Ú'dynamo_normalization_capturing_compilerzFexport.<locals>.inner.<locals>.dynamo_normalization_capturing_compiler¿  sc   ø€ ð
 ��Ømñ ”�àˆEõ  Ô0Ñ2Ô2ˆIØ1ˆNð/-ð /-ð /-ð /-ð /-ð /-ð /-ð /-ðb ,Ð+rC   rj  TF)Úspecialize_intrp  rÚ   rÛ   Ú capture_dynamic_output_shape_opsÚcapture_scalar_outputsrs  rt  rŠ  )rj   rí   Úexport_constraintsr†  r   z#Summary of dimension constraints:%srÊ   zk
It appears that you're trying to set a constraint on a value which we evaluated to have a static value of z0. Set TORCH_LOGS="+export" for more information.zhFailed to produce a graph during tracing as no tensor operations were found and same_signature is False.rB   )r†  rí   r�  r·   zQFailed to capture a graph during tracing as no tensor operations were found.:

%s)Úprint_outputÚcoloredr  z'Failed to produce guards during tracingzDynamo captured graph:

%sc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS rB   )rÜ  )r¼   ÚtrÅ  s     €rD   r¿   z)export.<locals>.inner.<locals>.<listcomp>ƒ  s'   ø€ ÐPÐPÐP¸A˜y×4Ò4°QÑ7Ô7ÐPÐPÐPrC   c                 óÊ   •— t           j        j                             ¦   «         5  t          j                             ‰¦  «        j        | Ž cd d d ¦  «         S # 1 swxY w Y   d S rm   )rJ   r3  r  Úpreserve_node_metaÚInterpreterÚrun)rc   r  s    €rD   Úgraph_with_interpreterz5export.<locals>.inner.<locals>.graph_with_interpreter‡  s­   ø€ Ý”XÔ'×:Ò:Ñ<Ô<ð Bð BÝ œ8×/Ò/°Ñ6Ô6Ô:¸DÐAðBð Bð Bð Bñ Bô Bð Bð Bð Bð Bð Bð Bøøøð Bð Bð Bð Bð Bð Bs   ¥&AÁAÁAÚreal)rm  rn  Ú_allow_non_fake_inputsrl  Ú_allow_fake_constantÚcond_operandsr$  Úget_attrrÿ  c                ó2   •‡— g | ]Šˆfd „‰pdD ¦   «         ‘ŒS )c                óÀ   •— h | ]Z}|j         t          ‰¦  «        k    r@t          |t          ¦  «        s+|j        j        j        |j        j        j        k    ¯S|j        ’Œ[S rB   )	Út_idr  r•   r   Úconstraint_rangeÚvrÚlowerÚupperÚdim)r¼   ÚcÚxs     €rD   ú	<setcomp>z3export.<locals>.inner.<locals>.<listcomp>.<setcomp>¦  si   ø€ ð ð ð ààœ¥" Q¡%¤%š˜Ý *¨1Õ.@Ñ AÔ Að (àÔ.Ô1Ô7¸1Ô;MÔ;PÔ;VÒVÐVð ”Eð
 WÐVÐVrC   rB   rB   )r¼   r°  Úconstraintss    @€rD   r¿   z)export.<locals>.inner.<locals>.<listcomp>¥  sR   øø€ ð &ð &ð &ð ðð ð ð à)Ð/¨Rðñ ô ð&ð &ð &rC   )r¢  rý  r§  )Lr   r   ro  rJ   r{   r�  r×   r•   r*  r+  r‚   r,  Ú	signaturerZ  r\  rÎ   r)   r   r‘  r4   r"   r›   Údim_constraintsÚ_opsÚOpOverloadPacketÚ
OpOverloadr,   rš   ÚsolveÚforced_specializationsÚprettify_resultsrc   rË   rç   Úvar_to_ranger  ÚsympyÚIntegerr   r  r  Úvar_to_stackÚ_subclassesÚFakeTensorModer$   r   Ú	GuardsSetr  r&  r3  ÚGraphrÖ  Ú	is_tensorrØ  rÜ  rÚ  r  ré  r    Úprint_readablerr   r  r   r   r!   r1   r2   r3   ÚDYNAMIC_CONTROL_FLOWrQ   r  r  ræ  rÛ  ri  rû  )1rc   rd   Úcombined_argsrÍ   rp  rÚ   Úcall_to_inspectÚoriginal_signatureÚresult_tracedr¤  r”  rº  r`  Úconstraint_violation_errorr©  Úer†  r´  r¹  rè   ÚkÚparameter_namesÚfx_graphrÏ  r±   rÙ  rø  rÁ  r¡  rÃ  r²  r™  rÅ  r  ra  r‘  r£  Ú_assume_static_by_defaultÚ_fÚ_specialize_floatrt  rk  rm  rr  ro  rl  rs  rq  rn  s1                                 @@@@@@@€€€€€€€€€€€€rD   r­  zexport.<locals>.innerž  s”	  øøøøøøøø€ Ý% b¨$°Ñ7Ô7ˆÝ-¨m¸^ÑLÔLˆØˆØ,ÐØ#<Ð Ý!Ñ#Ô#Ð#ÝŒ×$Ò$Ð%;Ñ<Ô<Ð<ØÐ*àðsð sàrñsô sØàð 	YØÐXÐXÐXÑXÔX�:Ý˜‰OŒOˆÝ'1°!µU´X´_Ñ'EÔ'EÐL˜!œ)˜)È1ˆÝ$Ô.¨Ñ?Ô?ÐØˆØˆ
Ø#ÐØDHÐØˆ	Øˆð	 ð 	 ð 	 ð 	 ð 	 ð 	 ð ˆðC	,ð C	,ð C	,ð C	,ð C	,ð C	,ð C	,ð C	,ð C	,ð C	,õN $Ô0°$¸°Ñ@Ô@Ñˆ	�7å˜!ÑÔÐØ%)Ð"Ø˜:Ò%Ð%Ø'+Ð$ÝŒ\ØØ-Ø%=Ø%*Ø-1Ø#'Ø8cØ4[ð	
ñ 	
ô 	
ð 	/ð 	/ð•OØ7ÝØ$6Ø"&ðñ ô ð Ø#.ðñ ô ð ñô ˆEð/Ø %  tÐ 6¨vÐ 6Ð 6��øÝ+ð /ð /ð /Ø-.Ð*Ð*Ð*Ð*Ð*Ð*øøøøð/øøøð-	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/õ0 	˜!ÑÔÐð *ñ&	å% i°¸dÑCÔCÐC�ÑPØ$-Ô$=Ð=�ÑJÝØ¥%¤*Ô"=½u¼zÔ?TÐ!Uñô ñ Kõ  Ô% oÑ6Ô6ñ	 Kð ×!Ò!Ñ#Ô#Ð#Ø%4×%KÒ%KÑ%MÔ%MÐ"Ø!×2Ò2Ø"ØØ*Ø&ñ	ô ˆCð *ð à.Ô3°AÔ6¸Ñ<ð3Ð*Ô/Ð/ð *ð Ý1IÈ#Ñ1NÔ1NÐ.Ð.å—H’HØ=Øñô ð ð Ô+×0Ò0Ñ2Ô2ð ð �Ý˜a¥¤Ñ/Ô/ð Ý1IØŸ7š7¥9Ô#8¸Ô9OÐPQÔ9RÑ#SÔ#SÑTÔTð Ið IàNOðIð Ið Iñ2ô 2Ð.øð &ð 	-Ø,Ð,à‰=àðzð zàyñzô zØð  ˆNØ#%Ð Ø$&Ð!ÝÔ)×8Ò8Ý"™*œ*¨Tð 9ñ ô ˆIð Ð!Ý$Ô.Ñ0Ô0�
ØÐ)Ð)Ð)Ý"Ð#5Ô#@×#EÒ#EÑ#GÔ#GÑHÔHˆOÝ”x—~’~Ñ'Ô'ˆHÝ$ _Ñ5Ô5ð 8ð 8‘��4Ý”? 9¨Q¤<Ñ0Ô0ð 8Ø#×/Ò/°Ñ5Ô5�DØ'0×'<Ò'<Ø! !œ°Dð (=ñ (ô (�D”I˜eÑ$ð ,@À9ÈQÄ<À/Ñ+QÐ(Ø"×)Ò)¨)°A¬,Ñ7Ô7Ð7øØ�OŠOÐ1Ñ2Ô2Ð2Ý”X—_’_Ñ&Ô&ˆFÝ”H×(Ò(¨°Ñ:Ô:ˆEÝ�HŠHØeØ×$Ò$°%ÀÐ$ÑFÔFñô ð ð õ
 ˜5Ð":Ñ;Ô;Ð;Ð;Ð;ØÐ)Ð)Ð+TÑ)Ô)Ð)ØÐ(Ð(Ð(å�HŠHØ.Ø×$Ò$°%ÀÐ$ÑFÔFñô ð ð ð 2Ý*¨5Ñ1Ô1Ð1ð QÐPÐPÐPÀÐPÑPÔPÐàñ 	ðBð Bð Bð Bð Bõ (Ñ)Ô)ð ð Õ+CÑ+EÔ+Eð ð Àyð ð ðð�GØ.Ø,?Ø%+Ø/3Ø%1Ø-2ðñ ô ð +ð,�E�Eøõ /ð ð ð å#Ý%Ô:Ý˜A™œØ"1ðñ ô ð øøøøðøøøð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð$ Ð$Ð$Ð$Øœ×.Ò.°*Ð.Ñ=Ô=ð ð �Ý�g e¨T¬[Ñ9Ô9½5¼<ÑHÔHð Ø'0×'<Ò'<Ý  t¤{Ñ3Ô3À4ð (=ñ (ô (�D”I˜eÑ$øð ð 	ð&ð &ð &ð &ð #ð&ñ &ô &Ð"õ &Ø"ØØØØØ#Ø$Ø%ØØ&ñô ˆEõ ˜E :Ñ.Ô.Ð.sº   Ä0,FÅE&Å%FÅ&
E<Å0E7Å2FÅ7E<Å<FÆFÆFÕW.ÕWÕW ÕU8Õ7W Õ8
V0	Ö)V+	Ö+V0	Ö0W Ö4W× W×W×W×W×W.×W	×W.×W	×W.×.W2×5W2zàexport(f, *args, **kwargs) is deprecated, use export(f)(*args, **kwargs) instead.  If you don't migrate, we may break your export call in the future if your user defined kwargs conflict with future kwargs added to export(f).r®  r¯  )r   r±  r²  r³  )rÍ   rk  rl  rm  rn  ro  rp  rÚ   rq  rr  rs  rt  ru  r´  rµ  r­  rÏ  rÐ  rÑ  s    `````  ````    @@@rD   rí   rí   N  s÷   øøøøøøøøøøøø€ ðP ð HÝÐ3¸I¸;ÐGÑGÔGÐGð 
€BØ(ÐØ 8Ðð_/ð _/ð _/ð _/ð _/ð _/ð _/ð _/ð _/ð _/ð _/ð _/ð _/ð _/ð _/ð _/ðB	 ð 
�\ð 
ÝŒð>õ Øð	
ñ 	
ô 	
ð 	
ð ˆu�jÐ1 LÐ1Ð1Ð1àˆrC   )rj   rí   r˜  rî   r?  c               ó    — t          | ¦  «        } t          | dt          ¦  «        }t          t	          j        | ||¬¦  «        |||||¬¦  «        S )zF
    The same as `torch._dynamo.optimize(backend, nopython=True)`
    rú   )rí   r˜  )rí   rî   r?  )rh   r›   r<  r^  r*   Úconvert_frame_assert)rU   rj   rí   r˜  rî   r?  rú   s          rD   r‘  r‘  Ì  sk   € õ ˜gÑ&Ô&€Gõ ˜wÐ(:½LÑIÔIÐå!ÝÔ*Ø˜FÐ7Ið	
ñ 	
ô 	
ð 	ØØØØð	ñ 	ô 	ð 	rC   c                  óf   — e Zd Ze ej        d¦  «        d„ ¦   «         ¦   «         Zed„ ¦   «         ZdS )rH  Nc                 ó  — ddl m}   | t          j        j        ¦  «        t          j        _         | t          j        j        ¦  «        t          j        _         | t          j        j        ¦  «        t          j        _         | t          j        j        j	        j        ¦  «        t          j        j        j	        _        t          j
        j                             d¦  «         ddlm}m}m}m}m}m}m}m}m}	m}
m}m}m} |||||||||	|
|||h}|D ]d}|j                             d¦  «        d         }d|› �}d	|› �}t;          ||¦  «        r(t=          || | t?          ||¦  «        ¦  «        ¦  «         Œed
„ t          j         j!         "                    ¦   «         D ¦   «         }t          j         j#        t          j         j$        h}|D ]@}||v r | |j%        ¦  «        |_%        t;          |d¦  «        r | |j&        ¦  «        |_&        ŒAd S )Nr(   )r†  Fr   )ÚadadeltaÚadagradÚadamÚadamaxÚadamwÚasgdÚlbfgsÚnadamÚradamÚrmspropÚrpropÚsgdÚsparse_adamú.éÿÿÿÿÚ_fused_Ú_single_tensor_c                óx   — g | ]7}t          j        |¦  «        ¯t          |t          j        j        ¦  «        ¯5|‘Œ8S rB   )r,  r-  r.  rJ   ÚoptimÚ	Optimizer)r¼   Úopts     rD   r¿   z&TorchPatcher.patch.<locals>.<listcomp>$  sQ   € ð 
ð 
ð 
àÝŒ˜sÑ#Ô#ð
õ )3°3½¼Ô8MÑ(NÔ(Nð
Øð
ð 
ð 
rC   Ú_init_group)'Ú
decoratorsr†  rJ   ÚjitÚtraceÚtrace_moduleÚ_get_trace_graphr3  r4  ÚTracerÚdistributionsÚDistributionÚset_default_validate_argsÚtorch.optimrÖ  r×  rØ  rÙ  rÚ  rÛ  rÜ  rÝ  rÞ  rß  rà  rá  râ  r>   Úsplitrr   r¶   r›   rè  rƒ   rq   Ú
SparseAdamÚLBFGSÚsteprë  )r†  rÖ  r×  rØ  rÙ  rÚ  rÛ  rÜ  rÝ  rÞ  rß  rà  rá  râ  Úoptimizer_modulesÚopt_modÚopt_nameÚfused_fn_nameÚsingle_tensor_fn_nameÚoptimizer_classesÚexcluded_optimizer_classesrê  s                         rD   r   zTorchPatcher.patchê  s�  € ð 	(Ð'Ð'Ð'Ð'Ð'à!˜'¥%¤)¤/Ñ2Ô2�Œ	ŒØ!( ­¬Ô)?Ñ!@Ô!@�Œ	ÔØ%, W­U¬YÔ-GÑ%HÔ%H�Œ	Ô"Ø07°ÝŒHÔ$Ô+Ô1ñ1
ô 1
�ŒÔ Ô'Ô-õ 	ÔÔ(×BÒBÀ5ÑIÔIÐIð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð" ØØØØØØØØØØØØð
Ðð  )ð 	ð 	ˆGØÔ'×-Ò-¨cÑ2Ô2°2Ô6ˆHØ0 hÐ0Ð0ˆMØ$@°hÐ$@Ð$@Ð!å�w Ñ.Ô.ð ÝØ˜]¨G¨GµG¸GÀ]Ñ4SÔ4SÑ,TÔ,Tñô ð øð
ð 
å”{Ô+×2Ò2Ñ4Ô4ð
ñ 
ô 
Ðõ ŒKÔ"ÝŒKÔð&
Ð"ð
 %ð 	;ð 	;ˆCØÐ0Ð0Ð0Ø"˜7 3¤8Ñ,Ô,�”å�s˜MÑ*Ô*ð ;Ø") '¨#¬/Ñ":Ô":�”øð	;ð 	;rC   c                ó   ‡ — ˆ fd„}|S )Nc                 óL   •— t          j        dt          d¬¦  «          ‰| i |¤ŽS )NÚignoreztorch.distributed)Úcategoryrø  )r±  ÚfilterwarningsÚUserWarning)rc   rd   rÕ   s     €rD   Úinner_fnzBTorchPatcher.suppress_torch_distributed_warnings.<locals>.inner_fn9  s<   ø€ ÝÔ#Ø¥;Ð7Jðñ ô ð ð �2�tÐ&˜vÐ&Ð&Ð&rC   rB   )rÕ   r  s   ` rD   Ú#suppress_torch_distributed_warningsz0TorchPatcher.suppress_torch_distributed_warnings7  s#   ø€ ð	'ð 	'ð 	'ð 	'ð 	'ð ˆrC   )r>   r?   r@   Ústaticmethodrö   Ú	lru_cacher   r  rB   rC   rD   rH  rH  é  sd   € € € € € ØØ€YÔ˜ÑÔðI;ð I;ñ Ôñ „\ðI;ðV ðð ñ „\ðð ð rC   rH  )rF   r;   )rR   rO   rW   rO   )ru   rv   rW   rw   )rØ   rS   )rj   r4   )rƒ  )r?  r‡  rW   rˆ  )rÍ   r€   rk  rS   rl  rS   rm  rv  rn  rQ   ro  rw  rp  rS   rÚ   rS   rq  rS   rr  rS   rs  rS   rt  rS   ru  rS   rW   rx  )�rÂ   Ú
__future__r   Úatexitr  rö   r,  ÚloggingrŽ  rk  rm  rå   Ú	threadingr  r˜   r±  r'  Údataclassesr   Úenumr   Úos.pathr   r   Útypingr   r	   r
   r   r   r   r   r   r   r   Úunittest.mockr   r¼  rJ   Útorch.fxÚtorch.utils._pytreer-   Ú_pytreerZ  Útorch.utils.checkpointr   rI   r   r   r   r   r   Útorch._dispatch.pythonr   Útorch._subclasses.fake_tensorr   Útorch._utils_internalr   r   Útorch.export.dynamic_shapesr   r   r   r    Ú"torch.fx.experimental.proxy_tensorr!   Ú%torch.fx.experimental.symbolic_shapesr"   r#   r$   r%   Útorch.fx.graphr&   r'   rÊ   r)   r*   r+   r,   Úbackends.registryr.   r/   r0   Úexcr1   r2   r3   rj   r4   rO  r6   r7   r8   Útorch._subclassesr9   r:   r;   Ú	getLoggerr>   rË   ÚExactWeakKeyDictionaryr8  r  r<  r=   rE   rV   rA   rý   rM   rO   r[   r]   Ú_dynamo_forbiddenrk   rn   rt   r/  Ú__file__r1  r}   r*  r+  r   rÎ   rÐ   rÓ   r×   rÝ   Úlocalrß   rä   Úregisterré   rë   r>  rL  r–   r^  rh   re  ro  rs  rv  rx  r€  r‚  r¶  r3  ÚTransformerr¸  rû  r  ri  rí   r‘  rH  rB   rC   rD   ú<module>r)     sE	  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð  Ð Ð Ð Ð Ð à €€€à €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð <Ð ;Ð ;Ð ;Ð ;Ð ;Ø @Ð @Ð @Ð @Ð @Ð @Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ Cðð ð ð ð ð ð ð ð ð ð
 !Ð  Ð  Ð  Ð  Ð  Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ð ð ð ð ð 7Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6à GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø &Ð &Ð &Ð &Ð &Ð &Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ Ð Ð Ð Ð Ð Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7ð ð 2Ø-Ð-Ð-Ð-Ð-Ð-à1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ð €gÔ˜Ñ!Ô!€ð  <˜uÔ;Ñ=Ô=Ð ØÔ%€ðð ð ð ð ˆDñ ô ð ð *,€Ð +Ð +Ð +Ñ +àŒ€ð(ð (ð (ð (ð ð9ð 9ð 9ð 9ð 9ñ 9ô 9ñ „ð9ð ˆ,‰.Œ.€ðð ð ð ð !%€Ô ð"Hð "Hð "HðJ*ð *ð *ðð ð ð €GÔ˜+Ñ&Ô&Ø€Dˆˆ��˜Ñ"Ô"Ñ	#Ô	#Ð%RÑSÔSð€ð	Ið 	Ið 	Ið 	Iðj
ð j
ð j
ð j
ð j
�e”h”oñ j
ô j
ð j
ðZ>ð >ð >ð"	ð 	ð 	ðð ð ð
ð 
ð 
ð
ð 
ð 
ð 
ð'ð 'ð 'ð 'ð '�	”ñ 'ô 'ð 'ð ˆY‰[Œ[€
ð „ðð ñ „ððlð lð lð lð lñ lô lð lð^2
ð 2
ð 2
ð 2
ð 2
Ð)ñ 2
ô 2
ð 2
ðj	$ð 	$ð 	$ð 	$ð 	$Ð(ñ 	$ô 	$ð 	$ð6$ð 6$ð 6$ð 6$ð 6$Ð(ñ 6$ô 6$ð 6$ðx "ØØØØðð ð ð ð ð(
9ð 
9ð 
9ðð ð ð ð �ZÔ+ñ ô ð ð
ð 
ð 
ðð ð ð ð  ð  ðð ð ð3ð 3ð 3ð" ðMð ØØØØðMð Mð Mð Mð Mð Mðb €Ð/°Ñ6Ô6ðFð Fñ 7Ô6ðFðRkð kð kð kð k %¤(Ô"6ñ kô kð kð\ð ð ð ð �:ñ ô ð ð&
ð &
ð &
ðREð Eð EðV Øð 	Ø"ØMQØ!Ø%*ØØ&+Ø8=Ø49Ø"ð!{ð {ð {ð {ð {ð {ðB ˆ%��dÑ
Ô
ØØØØðð ð ð ð ð:Vð Vð Vð Vð Vñ Vô Vð Vð Vð VrC   