§
    P�’jDì ã            	      óê  — U 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
mZmZ d dlmZmZmZmZ d dlmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZm Z m!Z! d dl	m"Z"m#Z#m$Z$m%Z% d d	l&m'Z' d dl(Z(d dl)Z(d dl*m+Z+ d dl,m+c m-Z. d dl/m0c m1Z2 d d
l(m3Z3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ d dlAmBZB d dl)mCZCmDZD d dlEmFZF d dlGmHZHmIZImJZJmKZKmLZL d dlMmNZN d dlOmPZP d dl*mQZQmRZRmSZS d dlTmUZU d dlVmWZWmXZXmYZY d dlZm[Z[ d dl\m]Z] d dl^m_Z_ d dl`maZambZbmcZcmdZdmeZemfZf d dlgmhZh d dlimjZj d dlkmlZlmmZmmnZn ddlompZp dd lqmrZr erd dlsZsd d!lmtZt d dluZud d"lvmwZw d d#lxmyZymzZzm{Z{ g d$¢Z|e!d%         Z}ed&         Z~d'ed(<   e(j€        e9fZ�e(j€        e9z  Z‚e(jƒ        j„        Z„e(jƒ        j…        Z… ej†        e‡¦  «        Zˆe(j‰         Š                    e‡d)¦  «        Z‹dZŒ e d*¦  «        Z� e d+¦  «        ZŽ e"d,¦  «        Z� e d-¦  «        Z� e$d.¦  «        Z‘ e2j’        e(j“        d/„ d0„ d1„ d2¬3¦  «         e(j“        e”iZ•�dd9„Z–e�dd=„¦   «         Z— e˜¦   «         Z™ G d>„ d?¦  «        Zš eš¦   «         Z›d d@lxmœZœm�Z�  G dA„ dBe¦  «        Zž�d dE„ZŸ G dF„ dGej         ¦  «        Z¡ e¡¦   «         Z¢i a£dHedI<   �d!dJ„Z¤e�d"dL„¦   «         Z¥e�d#dT„¦   «         Z¦e�d$dW„¦   «         Z¦e�d%dZ„¦   «         Z¦�d&d]„Z¦�d'd^„Z§ejeR         Z¨d'edY<   eRZ©d'ed_<   e�d(d`„¦   «         Zªe�d)dc„¦   «         Zªe�d*dg„¦   «         Zªe�d+di„¦   «         Zªe�d,dk„¦   «         Zªe�d-dm„¦   «         Zªe�d.dn„¦   «         Zªe�d/dp„¦   «         Zªe�d0ds„¦   «         Zªe�d1du„¦   «         Zªe›dv„ f�d2dy„Zª�d3d}„Z«�d4d€„Z¬�d4d�„Z­ej®        �d5dƒ„¦   «         Z¯	 �d6�d7d‰„Z°�d8�d9dŽ„Z±de�z  e?z  e‚z  epz  e²d�         z  e”d�         z  e³e´d�f         z  e5z  eµz  e¶z  e·z  Z¸d'ed�<   �d8�d:d‘„Z¹ed’d“œ�d;d•„¦   «         Zºe�d"d–„¦   «         Z»e�d"d—„¦   «         Z¼�d<d˜„Z½�d=dž„Z¾�d>d¡„Z¿e!eRed¢         ee˜d¢f         f         ZÀe!e5ed£         ee˜d£f         f         ZÁ�d?d§„ZÂe G d¨„ dR¦  «        ¦   «         ZÃ�d@dª„ZÄe�dAd¬„¦   «         ZÅe�dBd®„¦   «         ZÅe�dCd°„¦   «         ZÅe�dDd²„¦   «         ZÅ�dEd³„ZÅe5e(jÆ        jÇ        eHfZÈ�dFd·„ZÉ�dGd»„ZÊ�dHdÀ„ZË G dÁ„ dÂ¦  «        ZÌe G dÃ„ dÄ¦  «        ¦   «         ZÍ�dIdÆ„ZÎ G dÇ„ dÈeS¦  «        ZÏ	 �d6�dJdÌ„ZÐ�dKdÐ„ZÑe(jÒ        	 �d6�dLd×„¦   «         ZÓ�dMdÛ„ZÔ ejÕ        dÜd¬Ý¦  «        ZÖdÞedÜ<   e�dNdà„¦   «         Z× G dá„ dâe_¦  «        ZØ eÑeØ¦  «        ZÙ G dã„ däe_¦  «        ZÚ eÑeÚ¦  «        ZÛ eÜe(jÝ        jÞ        jß        e(jÝ        jÞ        jà        e(jÝ        jÞ        já        e(jÝ        jÞ        jâ        e(jÝ        jÞ        jã        e(jÝ        jÞ        jä        e(jÝ        jÞ        jå        h¦  «        Zæd dålVmçZç  eçjè        e(jÝ        jÞ        já        e(jÝ        jÞ        jâ        e(jÝ        jÞ        jä        e(jÝ        jÞ        jå        h¦  «          G dæ„ d¶ee¦  «        Zé�dOdç„Zê�dPdè„Zë G dé„ dêe+jì        jí        ¦  «        Zî G dë„ dìe+jï        ¦  «        Zð G dí„ dîe+jï        ¦  «        Zñ�dQdõ„Zò�dRdø„Zóe�d"dù„¦   «         Zô G dú„ dûeõ¦  «        Zö G dü„ dý¦  «        Z÷ G dþ„ dÿeÏ¦  «        Zø G �d „ �d¦  «        Zùdaú�de�d<   e�dS�d„¦   «         Zû	 	 	 �dTdŠdŠdŠd’dŠdŠdŠ�dœ�dU�d„Zü�dV�d„Zý�dW�d„Zþ�dW�d„Zÿ�dX�d„�Z e�dY�d„¦   «         �Z�dZ�d„�Z	 	 �d[�d\�d„�Z�d]�d„�ZdS (^  é    )ÚannotationsN)ÚdefaultdictÚOrderedDict)ÚCallableÚ	GeneratorÚMappingÚSequence)Ú_GeneratorContextManagerÚcontextmanagerÚ	ExitStackÚnullcontext)Ú	dataclass)	ÚAnyÚConcatenateÚLiteralÚoverloadÚProtocolÚTYPE_CHECKINGÚ	TypeAliasÚTypeVarÚUnion)Ú	ParamSpecÚSelfÚTypeVarTupleÚUnpack)ÚWeakKeyDictionary)ÚSymBoolÚSymIntÚTensor)Úenable_python_dispatcher)ÚFakeScriptObject)Úget_reconstruct_fnÚis_opaque_reference_typeÚis_opaque_valueÚis_opaque_value_typeÚ
OpaqueBaseÚshould_hoist)Útrace_structured)ÚHigherOrderOperatorÚ
OpOverload)Úfast_detach)Ú
FakeTensorÚFakeTensorModeÚget_plain_tensorsÚis_fakeÚunset_fake_temporarily)ÚFunctionalTensor)Úis_sparse_any)ÚGraphModuleÚProxyÚTracer)Ú_assign_attr)Ú1_side_effectful_need_to_be_preserved_pre_dispatchÚArgumentÚTarget)Ú_extract_tensor_metadata)ÚModule)ÚTorchFunctionMode)Ú_disable_infra_modeÚ
_push_modeÚ_unset_infra_modeÚautograd_would_have_decomposedÚTorchDispatchModeÚTraceableWrapperSubclass)Úcount)ÚThunk)Ú_WeakHashRefÚWeakIdKeyDictionaryÚWeakTensorKeyDictionaryé   )ÚBackwardState)ÚSymNode)ÚMutableMapping)ÚFunctionalizeCtxWrapper)ÚBoolLikeTypeÚFloatLikeTypeÚIntLikeType)ÚPythonKeyTracerÚdispatch_traceÚmake_fxÚDecompositionInterpreterÚselective_decomposeÚpy_sym_typesÚget_innermost_proxy_modeÚget_proxy_modeÚhandle_sym_dispatchÚmaybe_enable_thunkifyÚmaybe_disable_thunkify)rP   Ú_GraphAppendingTracerEx©ÚrealÚfakeÚsymbolicr   Ú_TracingModeÚnot_implementedÚTÚUÚ_PÚRÚ_Tsc                ó$   — t          | ¦  «        d fS ©N)Úlist©Úxss    úPC:\Projects\DSCons\.venv\Lib\site-packages\torch\fx\experimental\proxy_tensor.pyú<lambda>rm   ˆ   s   € •�R‘”˜$Ð€ ó    c                ó    — t          | ¦  «        S rh   )Útuple)rk   Ú_s     rl   rm   rm   ‰   s   € •%˜‘)”)€ rn   c                ó8   — d„ t          | ¦  «        D ¦   «         d fS )Nc                ó@   — g | ]\  }}t          j        |¦  «        |f‘ŒS © )ÚpytreeÚSequenceKey)Ú.0ÚiÚxs      rl   ú
<listcomp>z<lambda>.<locals>.<listcomp>Œ   s,   € Ð>Ð>Ð>©¨¨1�&Ô
˜QÑ
Ô
 Ð	#Ð>Ð>Ð>rn   )Ú	enumeraterj   s    rl   rm   rm   ‹   s#   € Ø>Ð>µ	¸"±´Ð>Ñ>Ô>Øð%€ rn   z
torch.Size)Úflatten_with_keys_fnÚserialized_type_nameÚfnúCallable[_P, R]ÚnargsÚintÚreturnc                óŒ   — d                      d„ t          |¦  «        D ¦   «         ¦  «        }t          d|› d|› d�d| i¦  «        S )z*FX gets confused by varargs, de-confuse itú,c              3  ó    K  — | ]	}d |› �V — Œ
dS )ÚargNrt   )rw   rx   s     rl   ú	<genexpr>z!fake_signature.<locals>.<genexpr>œ   s(   è è € Ð8Ð8 a˜	˜a˜	˜	Ð8Ð8Ð8Ð8Ð8Ð8rn   zlambda z: fn(ú)r~   )ÚjoinÚrangeÚeval)r~   r€   Úargnamess      rl   Úfake_signaturer�   š   sP   € à�xŠxÐ8Ð8­5°©<¬<Ð8Ñ8Ô8Ñ8Ô8€HÝÐ4˜(Ð4Ð4¨Ð4Ð4Ð4°t¸R°jÑAÔAÐArn   Údecomposition_tableú.Mapping[OpOverload, Callable[..., Any]] | Noneú>Generator[Mapping[OpOverload, Callable[..., Any]], None, None]c              #  ó¬   K  — t          ¦   «         }|€t          d¦  «        ‚|                     | ¦  «        5 }|V — d d d ¦  «         d S # 1 swxY w Y   d S )NúExpected proxy mode to be set)rW   ÚAssertionErrorÚenable_decompositions)rŽ   ÚmodeÚtables      rl   Ú	decomposer—       s¦   è è € õ ÑÔ€DØ€|ÝÐ<Ñ=Ô=Ð=Ø	×	#Ò	#Ð$7Ñ	8Ô	8ð ¸EØˆˆˆðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ·A	Á	AÁAc                  ó   — e Zd ZdS )Ú
_NoDefaultN©Ú__name__Ú
__module__Ú__qualname__rt   rn   rl   r™   r™   ¯   ó   € € € € € Ø€Drn   r™   )rU   Ú	PySymTypec                  ó   — e Zd ZU ded<   dS )Ú_HasMetazdict[str, PySymType]ÚmetaN©r›   rœ   r�   Ú__annotations__rt   rn   rl   r¡   r¡   ¸   s   € € € € € € ØÐÐÑÐÐrn   r¡   ÚnodeÚboolc                ó’   — t          | d¦  «        st          d¦  «        ‚d| j        v ot          | j        d         t          ¦  «        S )Nr¢   z3All nodes traced with proxy_tensor should have metaÚval)Úhasattrr“   r¢   Ú
isinstancerU   )r¥   s    rl   Úis_sym_noder«   ¼   sG   € Ý�4˜Ñ Ô ð TÝÐRÑSÔSÐSØ�D”IÐÐL¥*¨T¬Y°uÔ-=½|Ñ"LÔ"LÐLrn   c                  ó   — e Zd ZU dZded<   dS )Ú_DisableUpdateTensorTrackerFr¦   ÚvalueN)r›   rœ   r�   r®   r¤   rt   rn   rl   r­   r­   Â   s#   € € € € € € Ø€EÐÐÐÑÐÐrn   r­   zdict[int, torch.fx.Node]Ú'_FAKE_TENSOR_ID_TO_PROXY_MAP_FOR_EXPORTc                 ó   — t           j        S )zC
    Returns current state of disabling update tensor tracker.
    ©Ú"_disable_update_tensor_tracker_tlsr®   rt   rn   rl   Ú/_is_proxy_tensor_update_tensor_tracker_disabledr³   Ì   s   € õ .Ô3Ð3rn   úGenerator[None, None, None]c               #  ó~   K  — t           j        } dt           _        	 dV — | t           _        dS # | t           _        w xY w)aä  
    NOTE "Do not clobber inplace ops"
    By default tensor_tracker is updated every time.
    This leads to chaining every operation by the FakeTensor.
    For example for mutable ops if we have several consecutive mutable operations:

    def f(x, y, z):
        x.copy_(y)
        x.copy_(z)
        return x

    Default graph result:
    def f_graph(x, y, z)
        x_1 = x.copy_(y)
        x_2 = x_1.copy_(z)
        return x_2

    This chaining simplifies the fx passes and helps to prevent the reordering.
    But in some cases, we want those nodes to be disconnected.
    E.g. in case of splitting joint graph into forward and backward.
    If first inplace op happened in forward, second in backward,
    we want them after split to be properly placed.

    Enabling this context manager for copy_ will result in:
    def f_graph_2(x, y, z):
        x_1 = x.copy_(y)
        x_2 = x.copy_(z)
        return x

    Results of copy_ x1 and x2 will have empty users in the graph.
    The reason why this behavior is not enabled for all inplace ops is that
    some fx passes (e.g. fx quantization) rely on chaining inplace ops like add_
    in their fusions passes.
    We could revisit enabling this logic for all inplace ops in future.
    TNr±   )Ú
orig_values    rl   Ú+_proxy_tensor_disable_update_tensor_trackerr·   Ó   sL   è è € õJ 4Ô9€JØ/3Õ&Ô,ð>Øˆˆˆà3=Õ*Ô0Ð0Ð0ø°:Õ*Ô0Ð=Ð=Ð=Ð=s   œ. ®<Úobjr   ÚtracerÚ_ProxyTracerÚproxyÚ_ProxyTensorÚNonec                ó   — d S rh   rt   ©r¸   r¹   r»   s      rl   Úset_proxy_slotrÀ      s   € ØTWÐTWrn   ú!_AnyScriptObjectType | OpaqueBaser4   c                ó   — d S rh   rt   r¿   s      rl   rÀ   rÀ     ó	   € ð ˆ3rn   rŸ   Ú_PySymProxyTypec                ó   — d S rh   rt   r¿   s      rl   rÀ   rÀ   
  rÃ   rn   ú6PySymType | _AnyScriptObjectType | Tensor | OpaqueBaseÚobjectc                óÜ  — t                                d| t          | ¦  «        |¦  «         t          | t          ¦  «        rYt          |t
          ¦  «        st          dt          |¦  «        › �¦  «        ‚| |j        vst          ¦   «         s||j        | <   d S d S t          | t          ¦  «        st          | ¦  «        �rt          |t          ¦  «        st          dt          |¦  «        › �¦  «        ‚t          | t          j        ¦  «        r||j        | <   d S d }t          | t           ¦  «        r-	 t"                               | d¦  «        }n# t&          $ r Y nw xY w|�X|j                             t          |¦  «        ¦  «        }|�||j        | <   d S ||j        | <   ||j        t          |¦  «        <   d S ||j        | <   d S t          | t.          ¦  «        st          dt          | ¦  «        › �¦  «        ‚| |j        vrkt3          j        t6          |¦  «        }||j        | <   dd l}t          | j        j        |j        ¦  «        r&tA          || ¦  «        |j!        | j        j        <   d S d S d S )Nzset_proxy_slot %s (%s) %szExpected _ProxyTensor, got úExpected Proxy, got Úreal_objúExpected py_sym_types, got r   )"ÚlogÚdebugÚidrª   r   r¼   r“   ÚtypeÚtensor_trackerr³   Ú_AnyScriptObjectr$   r4   ÚtorchÚScriptObjectÚscript_object_trackerr!   rÇ   Ú__getattribute__ÚAttributeErrorÚ_opaque_real_obj_proxyÚgetÚopaque_trackerrU   Úsymnode_trackerÚtypingÚcastrÄ   Úsympyr¥   ÚexprÚSymbolÚ_SympyExprTrackerValueÚsympy_expr_tracker)r¸   r¹   r»   rÊ   ÚexistingrÝ   s         rl   rÀ   rÀ     s¨  € õ
 ‡I‚IÐ)¨3µ°3±´¸Ñ?Ô?Ð?Ý�#•vÑÔð Kõ ˜%¥Ñ.Ô.ð 	NÝ Ð!L½tÀE¹{¼{Ð!LÐ!LÑMÔMÐMð �vÔ,Ð,Ð,ÝBÑDÔDð -ð */ˆFÔ! #Ñ&Ð&Ð&ð -Ð,õ 
�CÕ*Ñ	,Ô	,ð @µÀÑ0DÔ0Dñ @Ý˜%¥Ñ'Ô'ð 	GÝ Ð!E½¸U¹¼Ð!EÐ!EÑFÔFÐFõ
 �c�5Ô-Ñ.Ô.ð 	3Ø05ˆFÔ(¨Ñ-Ð-Ð-ð ˆHÝ˜#Õ/Ñ0Ô0ð ðÝ%×6Ò6°s¸JÑGÔG�H�HøÝ%ð ð ð Ø�Dðøøøð Ð#Ø!Ô8×<Ò<½RÀ¹\¼\ÑJÔJ�ØÐ'Ø19�FÔ)¨#Ñ.Ð.Ð.à16�FÔ)¨#Ñ.ØBG�FÔ1µ"°X±,´,Ñ?Ð?Ð?à-2�Ô% cÑ*Ð*Ð*õ ˜#�|Ñ,Ô,ð 	LÝ Ð!J½tÀC¹y¼yÐ!JÐ!JÑKÔKÐKØ�fÔ,Ð,Ð,Ý”K¥°Ñ7Ô7ˆEØ*/ˆFÔ" 3Ñ'ð ˆLˆLˆLå˜#œ(œ-¨¬Ñ6Ô6ð Ý;QØ˜3ñ<ô <�Ô)¨#¬(¬-Ñ8Ð8Ð8ð' -Ð,ð$ð s   Ä0E Å
EÅEc                ó¸   — t          | t          t          f¦  «        st          dt	          | ¦  «        › �¦  «        ‚t          t          | |dd„ ¦  «        ¦  «        S )Nz Expected Tensor or SymNode, got Fc                ó   — dS ©NTrt   )rq   s    rl   rm   z has_proxy_slot.<locals>.<lambda>h  s   € ¸T€ rn   )rª   r   rJ   r“   rÏ   r¦   Úget_proxy_slot©r¸   r¹   s     rl   Úhas_proxy_slotrè   d  sU   € Ý�c�F¥GÐ,Ñ-Ô-ð MÝÐKÅÀSÁ	Ä	ÐKÐKÑLÔLÐLå•˜s F¨E°>°>ÑBÔBÑCÔCÐCrn   Ú_OpaqueObjectProxyTypec                ó   — d S rh   rt   rç   s     rl   ræ   ræ   o  s	   € ð �3rn   Údefaultú_ProxyTensor | Uc                ó   — d S rh   rt   ©r¸   r¹   rë   s      rl   ræ   ræ   v  s	   € ð
 �srn   Ú	transformúCallable[[_ProxyTensor], R]úR | Uc                ó   — d S rh   rt   ©r¸   r¹   rë   rï   s       rl   ræ   ræ   ~  ó	   € ð ˆCrn   Ú_AnyScriptObjectTypec                ó   — d S rh   rt   rç   s     rl   ræ   ræ   ‡  s	   € ð ˆCrn   ú	Proxy | Uc                ó   — d S rh   rt   rî   s      rl   ræ   ræ   Ž  s	   € ð
 �rn   úCallable[[Proxy], R]c                ó   — d S rh   rt   ró   s       rl   ræ   ræ   –  rô   rn   c                ó   — d S rh   rt   rç   s     rl   ræ   ræ   Ÿ  s	   € ð �crn   úT | _PySymProxyTypec                ó   — d S rh   rt   rî   s      rl   ræ   ræ   ¦  s	   € ð
 ˜#rn   r&   úT | _OpaqueObjectProxyTypec                ó   — d S rh   rt   rî   s      rl   ræ   ræ   ®  s	   € ð
 "% rn   úCallable[[_PySymProxyType], R]c                ó   — d S rh   rt   ró   s       rl   ræ   ræ   ¶  rô   rn   c                ó   — | S rh   rt   ©ry   s    rl   rm   rm   Æ  s   € ¨a€ rn   ú6Tensor | _AnyScriptObjectType | PySymType | OpaqueBaseúCallable[..., Any]c           	     óÎ  — t          | t          ¦  «        r|j        }n‰t          | t          ¦  «        st	          | ¦  «        r*t          | t
          j        ¦  «        r|j        }nC|j        }n;t          | t          ¦  «        st          dt          | ¦  «        › �¦  «        ‚|j        }|                     | ¦  «        }|€Œt          | t          ¦  «        rw| j                             ¦   «         r^|j                             | j        j        ¦  «        x}�|j        }n0t'          || j        j        | ¦  «         |                     | ¦  «        }|€At          | t(          ¦  «        r,|j                             t-          | j        ¦  «        ¦  «        }|€Kt          |t0          ¦  «        r4t3          | › dt          | ¦  «        › dt-          | ¦  «        › d|› �¦  «        ‚|S  ||¦  «        }|S )NrË   z (z, z)is not tracked with proxy for )rª   r   rÐ   rÑ   r$   rÒ   rÓ   rÔ   rÙ   rU   r“   rÏ   rÚ   rØ   r¥   Úis_symbolicrá   rÞ   r»   Ú_build_proxy_for_sym_exprr!   r×   rÎ   rÊ   r™   ÚRuntimeError)r¸   r¹   rë   rï   Útrackerr®   ÚtmpÚress           rl   ræ   ræ   Â  sÚ  € õ �#•vÑÔð 
)ØÔ'ˆˆÝ	�CÕ)Ñ	*Ô	*ð )­o¸cÑ.BÔ.Bð )Ý�c�5Ô-Ñ.Ô.ð 	,ØÔ2ˆGˆGàÔ+ˆGˆGå˜#�|Ñ,Ô,ð 	LÝ Ð!J½tÀC¹y¼yÐ!JÐ!JÑKÔKÐKØÔ(ˆð �KŠK˜ÑÔ€Eà€}� C­Ñ6Ô6€}ØŒ8×ÒÑ!Ô!ð 
	)ð Ô0×4Ò4°S´X´]ÑCÔCÐC�ÐPØœ	��õ *¨&°#´(´-ÀÑEÔEÐEàŸš CÑ(Ô(�à€}� CÕ)9Ñ:Ô:€}ð
 Ô-×1Ò1µ"°S´\Ñ2BÔ2BÑCÔCˆà€}å�g�zÑ*Ô*ð 	ÝØÐWÐW�$˜s™)œ)ÐWÐW¥r¨#¡w¤wÐWÐWÈvÐWÐWñô ð ð ˆà
ˆ)�EÑ
Ô
€CØ€Jrn   Útú'torch.Tensor | TraceableWrapperSubclassúlist[Proxy]c                ó   — g }t           j                             t           j        j        j        ¦  «        }|€|S t          |t          ¦  «        st          dt          |¦  «        › �¦  «        ‚|j	        }t          | g ¬¦  «        D ]w}t          |t          ¦  «        rt          j        |j        ¦  «        }t          |t           j        ¦  «        sŒKt          ||¦  «        }|�|                     |j        ¦  «         Œx|S )Nú%Expected ProxyTorchDispatchMode, got )Úout)rÒ   Ú_CÚ_get_dispatch_modeÚ_TorchDispatchModeKeyÚPROXYrª   ÚProxyTorchDispatchModer“   rÏ   r¹   r.   r1   Ú_from_functional_tensorÚelemr   ræ   Úappendr»   )r  Úproxiesr•   r¹   Út_innerÚproxy_tensors         rl   Ú_get_proxiesr  ý  sï   € Ø€GÝŒ8×&Ò&¥u¤xÔ'EÔ'KÑLÔL€DØ€|ØˆÝ�dÕ2Ñ3Ô3ð SÝÐQÅTÈ$ÁZÄZÐQÐQÑRÔRÐRØŒ[€FÝ$ Q¨BÐ/Ñ/Ô/ð /ð /ˆÝ�gÕ/Ñ0Ô0ð 	BÝÔ3°G´LÑAÔAˆGÝ˜'¥5¤<Ñ0Ô0ð 	ØÝ% g¨vÑ6Ô6ˆØÐ#Ø�NŠN˜<Ô-Ñ.Ô.Ð.øØ€Nrn   Úargsr   c                 ó@   — t          j        t          j        | ¦  «        S rh   )Ú	functoolsÚreducerÒ   Úsym_max©r  s    rl   Ú_nary_sym_maxr%    ó   € ÝÔ�EœM¨4Ñ0Ô0Ð0rn   c                 ó@   — t          j        t          j        | ¦  «        S rh   )r!  r"  rÒ   Úsym_minr$  s    rl   Ú_nary_sym_minr)    r&  rn   ú*dict[type[sympy.Expr], Callable[..., Any]]c                 ó,  — ddl } ddl}i }|j        j        j                             ¦   «                              ¦   «         D ]D\  }}t          t          |d¦  «        }|�|||<   Œ#|dk    rt          ||<   Œ4|dk    r
t          ||<   ŒE|j        || j        <   |S )z’
    Returns a dict mapping sympy types to Python callables
    (e.g. ``sympy.Mul`` -> ``operator.mul``, ``sympy.Add`` -> ``torch.sym_sum``).
    r   NÚmaximumÚminimum)rÝ   Útorch.utils._sympy.interpÚutilsÚ_sympyÚinterpÚhandlersÚitemsÚgetattrÚoperatorr%  r)  Úsym_sumÚAdd)rÝ   rÒ   r2  ÚkÚvÚops         rl   Ú_sympy_handlersr;    s°   € ð €L€L€Là$Ð$Ð$Ð$à€HØ”Ô"Ô)×2Ò2Ñ4Ô4×:Ò:Ñ<Ô<ð (ð (‰ˆˆ1Ý•X˜q $Ñ'Ô'ˆØˆ>ØˆH�Q‰KˆKð �)Š^ˆ^Ý'ˆH�Q‰KˆKØ�)Š^ˆ^Ý'ˆH�Q‰Køð
  œ-€HˆUŒYÑØ€Orn   rÞ   ú
sympy.Exprr  úPySymType | Noneú1IntLikeType | FloatLikeType | BoolLikeType | Nonec                ó  — | j                              |¦  «        x}�|rt          d¦  «        ‚|j        S t	          |t
          t          t          f¦  «        r|S |j        rt          |¦  «        S |j	        rt          |¦  «        S g }|j
        D ],}t          | |¦  «        x}€ dS |                     |¦  «         Œ-t          ¦   «                              |j        ¦  «        }|sdS |€ ||Ž }nt          | |t!          |¦  «        |¦  «         |S )a  
    Decompose `expr` and look for the pieces as inputs. If `out` is provided
    then that will be the resulting SymNode (and `out.expr` must be the same as
    `expr`).

    This function is used when the ProxyTorchDispatchMode sees a SymNode
    that it hasn't seen before to try to associate it with traced inputs.

    How can this happen?

    First thing to remember is that although sympy.Exprs are interned (so
    `sympy.Expr("s3*s4")` will always have the same `id` and will always compare
    equal) SymNode does not (so doing `SymNode("s3")*SymNode("s4")` twice in a
    row will give two unique SymNodes).

    - On way for this to happen is if we turn off tracing to compute an
      intermediate value and then USE that value with tracing turned on - for
      example if we turn off tracing to do some FakeTensor propagation to
      compute a size (dtensor does this) but then turn tracing back on and use
      that computed size.

    - Another way is if we compute a size in one graph and stash it somewhere
      hidden (such as in some meta-data) and later use it in a different graph
      (dtensor does this too). Since the size was computed in the first graph
      and it's not an official input to the second graph it's not tracked
      properly. This is often going to show up as it usually works in fullgraph
      but a graph break causes a failure.

    To handle this we decompose the sympy.Expr and look for the pieces as
    inputs. But there are problems with this approach:

    - We lose operation provanance: We end up figuring out where to get the
      inputs - but those may not actually be correct. If we have "s1" coming in
      from both tensor1 and tensor2 and we pick the wrong one we could end up
      keeping a tensor alive longer than intended.

    - There's no guarantee that those values are inputs to the graph: If we have
      "s1*s2" computed in a graph #1 and used in graph #2 there's no guarantee
      that the input that holds "s1" is actually an input on graph #2.

    - The decomposition isn't guaranteed to be the same: Sympy can "simplify"
      expressions so it's possible that our inputs are "s1*s2" and "s3" but we
      decompose it into "s1" and "s2*s3" - which wouldn't be found.

    Other ways we could handle this:

    - Don't: Just require that all inputs are tracked properly. This is the
      "correct" solution but harder because you need to track down each
      potential problem one by one and fix them. And when it fails it's a lot of
      work to figure out both why it's failing and the right way to fix it. This
      is complicated by the fact that a stashed value could be incorrect but
      work fine until we happen to get an graph break in the wrong place - so it
      may be a while before the bug is found. (Maybe we need a "dynamo abuse
      mode" where we run tests with as many graph breaks inserted as possible?)

    - Track SymNode ops separately from proxy tracing: Right now SymNode
      operations are tracked as part of the proxy tracing - so when we disable
      proxy tracing we also disable SymNode tracing. But we don't have to do
      that - we could instead always have SymNodes track where they came from
      and just use that when needed. This solves the problem of tracing being
      temporarily turned off but doesn't help if an input isn't present after a
      graph break.

    - Better decomposition: Right now the decomposition is pretty simple. We do
      have a sat-solver available to us so we could theoretically do a better
      job figuring out a "correct" decomposition. But that still relies on
      having the inputs available at all - which isn't a guarantee.
    Nz6out should be empty when expr is in sympy_expr_tracker)rá   rØ   r“   r®   rª   r�   Úfloatr¦   Ú
is_IntegerÚis_Floatr  r  r  r;  ÚfuncÚ_sym_registerrp   )r¹   rÞ   r  r®   r  r†   Ú	arg_valuerC  s           rl   r  r  =  s2  € ðP Ô*×.Ò.¨tÑ4Ô4Ð4ˆÐAØð 	Ý ØHñô ð ð Œ{Ðå�$��e¥TÐ*Ñ+Ô+ð ØˆØ„ð Ý�4‰yŒyÐØ„}ð Ý�T‰{Œ{Ðà€DØŒyð ð ˆÝ2°6¸3Ñ?Ô?Ð?ˆIÐHØ�4�4Ø�Š�IÑÔÐÐå-Ñ/Ô/×3Ò3°D´IÑ>Ô>€DØð Øˆtà
€{Øˆd�Dˆkˆˆå�f˜d¥E¨$¡K¤K°Ñ5Ô5Ð5Ø€Jrn   Fr¨   Úinclude_realúTensor | Nonec                ó€   — t          | t          ¦  «        rt          | j        | |¦  «        S |                      ¦   «         S rh   )rª   r,   r+   Ú	fake_modeÚdetach)r¨   rF  s     rl   Úsnapshot_fakerK  ¤  s8   € õ �#•zÑ"Ô"ð Ý˜3œ=¨#¨|Ñ<Ô<Ð<à�zŠz‰|Œ|Ðrn   Ú_ExtractValType)rL  .c                ó~  — t          | ¦  «        rt          | |¬¦  «        S t          | t          ¦  «        r| S t          | t          t
          f¦  «        r| S t          | t          ¦  «        r| S t          | ¦  «        r| S t          | t          t          f¦  «        r|  
                    d„ | D ¦   «         ¦  «        S t          | t          ¦  «        rd„ |                      ¦   «         D ¦   «         S t          | t          ¦  «        r€| j        swddlm}  || ¦  «        }|st#          d¬¦  «        }|5  t%          j        | j        |                      ¦   «         | j        | j        ¬¦  «        cd d d ¦  «         S # 1 swxY w Y   n*d S t          | t0          t2          t4          f¦  «        r| S | €d S t7          j        | ¦  «         d S )	N©rF  c                ó,   — g | ]}t          |¦  «        ‘ŒS rt   ©Úextract_val©rw   ry   s     rl   rz   zextract_val.<locals>.<listcomp>Ê  s   € Ð:Ð:Ð:°�k¨!™nœnÐ:Ð:Ð:rn   c                ó4   — i | ]\  }}|t          |¦  «        “ŒS rt   rP  )rw   r8  r9  s      rl   ú
<dictcomp>zextract_val.<locals>.<dictcomp>Ì  s$   € Ð:Ð:Ð:¡d a¨�•;˜q‘>”>Ð:Ð:Ð:rn   r   )Údetect_fake_modeT)Úallow_fallback_kernels)ÚdeviceÚdtype)r/   rK  rª   rU   rÑ   r&   rI   r$   ri   rp   Ú	__class__Údictr3  r   Ú	is_sparseÚtorch._guardsrU  r-   rÒ   Úempty_stridedÚshapeÚstriderW  rX  r�   r@  r¦   Útyping_extensionsÚassert_never)r¨   rF  rU  Úfake_tensor_modes       rl   rQ  rQ  ¾  s  € Ýˆs�|„|ð $Ý˜S¨|Ð<Ñ<Ô<Ð<Ý	�C�Ñ	&Ô	&ð "Øˆ
Ý	�CÕ*­JÐ7Ñ	8Ô	8ð  Øˆ
Ý	�C�Ñ	'Ô	'ð Øˆ
Ý	˜Ñ	Ô	ð Øˆ
Ý	�C�$¥˜Ñ	'Ô	'ð Ø�}Š}Ð:Ð:°cÐ:Ñ:Ô:Ñ;Ô;Ð;Ý	�C�Ñ	Ô	ð Ø:Ð:¨c¯iªi©k¬kÐ:Ñ:Ô:Ð:Ý	�C�Ñ	 Ô	 ð ØŒ}ð 	ð 7Ð6Ð6Ð6Ð6Ð6à/Ð/°Ñ4Ô4ÐØ#ð OÝ#1ÈÐ#NÑ#NÔ#NÐ Ø!ð ð ÝÔ*Ø”I˜sŸzšz™|œ|°C´JÀcÄiðñ ô ðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð
 �4Ý	�C�#�u¥dÐ+Ñ	,Ô	,ð Øˆ
Ø	ˆØˆtåÔ" 3Ñ'Ô'Ð'Ð'Ð's   Ä-9E3Å3E7Å:E7T©Úenablerd  c             #  óV   K  — | j         }|| _         	 dV — || _         dS # || _         w xY w)a{  
    Enable thunkification inside the context manager.  Thunkification prevents
    SymNode computation from directly being traced into an FX graph; instead,
    the compute is only added to the graph if it is actually used.  This helps
    us track SymNode compute when it is computed (since we need /something/
    to put in the tracker) even if it is unlikely to be used.
    N)Úenable_thunkify)r¹   rd  Úolds      rl   Ú_enable_thunkifyrh  è  sH   è è € ð Ô
 €CØ#€FÔð%Øˆˆˆà!$ˆÔÐÐø ˆÔÐ$Ð$Ð$Ð$s   ’ Ÿ	(c               #  óœ   K  — t          ¦   «         } | �5t          | j        d¬¦  «        5  dV — ddd¦  «         dS # 1 swxY w Y   dS dV — dS )a[  Within a context, disable thunkification.  See :func:`maybe_enable_thunkify`
    for more details.  This is helpful if you have a wrapper function which
    you want to enable thunkification on, but in some segment on the inside (say,
    the original user function), you want to disable thunkification as you know
    it is not needed there.
    NFrc  ©rW   rh  r¹   ©Ú
proxy_modes    rl   rZ   rZ   û  s«   è è € õ  Ñ!Ô!€JØÐÝ˜jÔ/¸Ð>Ñ>Ô>ð 	ð 	ØˆEˆEˆEð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ˆˆˆˆˆs   ©;»?Á?c               #  ó˜   K  — t          ¦   «         } | �3t          | j        ¦  «        5  dV — ddd¦  «         dS # 1 swxY w Y   dS dV — dS )a3  Within this context manager, if you are doing make_fx tracing, we will thunkify
    all SymNode compute and avoid tracing it into the graph unless it is actually needed.
    You should prefer to avoid using this as much as possible, as lazy evaluation of
    SymNode tracing can lead to long chains of thunks which will stack overflow
    if you evaluate them.  However, this is currently sometimes necessary as there
    are buggy parts of PT2 which will fail with "s0 is not tracked with proxy" error
    due to insufficient tracing of SymNode computation.
    Nrj  rk  s    rl   rY   rY     s¦   è è € õ  Ñ!Ô!€JØÐÝ˜jÔ/Ñ0Ô0ð 	ð 	ØˆEˆEˆEð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ˆˆˆˆˆs   §9¹=Á =c                ó~  — t          || j        j        dk    ¬¦  «        | j        j        d<   t	          | j        ¦  «        5  t          |¦  «        rt          |¦  «        | j        j        d<   n8t          |t          ¦  «        r#|j
        st          |¦  «        | j        j        d<   d d d ¦  «         n# 1 swxY w Y   | S )NÚplaceholderrN  r¨   Útensor_meta)rQ  r¥   r:  r¢   rh  r¹   r/   r:   rª   r   r[  )r»   r¨   s     rl   Úset_metarq  $  s  € Ý(Ø˜5œ:œ=¨MÒ9ðñ ô €E„J„O�EÑõ 
˜%œ,Ñ	'Ô	'ð Kð Kå�3‰<Œ<ð 	KÝ-EÀcÑ-JÔ-JˆEŒJŒO˜MÑ*Ð*Ý˜�VÑ$Ô$ð 	K¨S¬]ð 	KÝ-EÀcÑ-JÔ-JˆEŒJŒO˜MÑ*ðKð Kð Kñ Kô Kð Kð Kð Kð Kð Kð Køøøð Kð Kð Kð Kð €Ls   ÁA%B2Â2B6Â9B6Úfú_P.argsÚkwargsú	_P.kwargsúThunk[R]c                óŠ   ‡— | j         r"t          t          j        |g|¢R i |¤Ž¦  «        S  ||i |¤ŽŠt          ˆfd„¦  «        S )zT
    Delays computation of f until it's called again
    Also caches the result
    c                 ó   •— ‰ S rh   rt   )Úrs   €rl   rm   zthunkify.<locals>.<lambda>=  s   ø€ ˜Q€ rn   )rf  rD   r!  Úpartial)r¹   rr  r  rt  ry  s       @rl   Úthunkifyr{  2  sa   ø€ ð Ôð  Ý•YÔ& qÐ:¨4Ð:Ð:Ð:°6Ð:Ð:Ñ;Ô;Ð;àˆAˆtÐ�vÐÐˆÝ�Y�Y�Y�YÑÔÐrn   ÚtensorÚconstantc               óÞ  ‡‡— dˆfd„}t          | j        ¦  «        D ]\  }} ||ˆˆfd„|¦  «         Œt          | ¦  «        s8t          |                      ¦   «         ¦  «        D ]\  }} ||ˆˆfd„|¦  «         Œ ||                      ¦   «         ˆˆfd„¦  «         t          | ¦  «        s" ||                      ¦   «         ˆˆfd„¦  «         t          | ‰t          ‰|¦  «        ¦  «         d S )NÚouter_srO   Úproxy_callableú+Callable[Concatenate[PySymType, _P], Proxy]r  rs  rt  ru  r‚   r½   c           
     ó  •— t          |¦  «        st          d¦  «        ‚t          | t          ¦  «        rKt	          ‰¦  «        5  t          | ‰t          ‰|| g|¢R i |¤Ž¦  «         d d d ¦  «         d S # 1 swxY w Y   d S d S )Nzproxy_callable must be callable)Úcallabler“   rª   r   rh  rÀ   r{  )r  r€  r  rt  r¹   s       €rl   Útry_set_proxy_slotz(track_tensor.<locals>.try_set_proxy_slotC  sê   ø€ õ ˜Ñ'Ô'ð 	DÝ Ð!BÑCÔCÐCÝ�g�vÑ&Ô&ð 	Ý! &Ñ)Ô)ð ð ÝØØÝ˜V ^°WÐN¸tÐNÐNÐNÀvÐNÐNñô ð ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð ð	ð 	s   Á"A3Á3A7Á:A7c                ó†   •— t          ‰                     dt          j        j        j        j        ‰|fi ¦  «        | ¦  «        S ©NÚcall_function)rq  Úcreate_proxyrÒ   ÚopsÚatenÚsym_sizer�   ©ry   rx   r»   r¹   s     €€rl   rm   ztrack_tensor.<locals>.<lambda>[  s@   ø€ �Ø×#Ò#Ø#¥U¤Y¤^Ô%<Ô%@À5È!À*Èbñô ð ñ	ô € rn   c                ó†   •— t          ‰                     dt          j        j        j        j        ‰|fi ¦  «        | ¦  «        S r†  )rq  rˆ  rÒ   r‰  rŠ  Ú
sym_strider�   rŒ  s     €€rl   rm   ztrack_tensor.<locals>.<lambda>h  sB   ø€ �XØ×'Ò'Ø'­¬¬Ô)BÔ)FÈÐPQÈ
ÐTVñô ð ñ	ô € rn   c                ó„   •— t          ‰                     dt          j        j        j        j        ‰fi ¦  «        | ¦  «        S r†  )rq  rˆ  rÒ   r‰  rŠ  Ú	sym_numelrë   ©ry   r»   r¹   s    €€rl   rm   ztrack_tensor.<locals>.<lambda>s  s>   ø€ •(Ø×ÒØ¥¤¤Ô!9Ô!AÀEÀ8ÈRñô ð ñ	
ô 
€ rn   c                ó„   •— t          ‰                     dt          j        j        j        j        ‰fi ¦  «        | ¦  «        S r†  )rq  rˆ  rÒ   r‰  rŠ  Úsym_storage_offsetrë   r‘  s    €€rl   rm   ztrack_tensor.<locals>.<lambda>}  sA   ø€ •hØ×#Ò#Ø#Ý”I”NÔ5Ô=Ø�HØñ	ô ð ñô € rn   )
r  rO   r€  r�  r  rs  rt  ru  r‚   r½   )r{   r^  r2   r_  ÚnumelÚstorage_offsetrÀ   r¼   )r|  r»   r}  r¹   r„  rx   Úss    ` `   rl   Útrack_tensorr—  @  sš  øø€ ðð ð ð ð ð õ* ˜&œ,Ñ'Ô'ð 

ð 

‰ˆˆ1ØÐØðð ð ð ð ð ñ		
ô 		
ð 		
ð 		
õ ˜Ñ Ô ð Ý˜fŸmšm™oœoÑ.Ô.ð 
	ð 
	‰DˆAˆqØÐØðð ð ð ð ð ñ	ô 	ð 	ð 	ð ÐØ�Š‰Œð	
ð 	
ð 	
ð 	
ð 	
ñô ð õ ˜Ñ Ô ð 
ØÐØ×!Ò!Ñ#Ô#ðð ð ð ð ñ	
ô 	
ð 	
õ �6˜6¥<°°xÑ#@Ô#@ÑAÔAÐAÐAÐArn   Ú_NestedProxysÚ_NestedTensorsÚ	inner_resÚ	proxy_resú_NestedTensors | Nonec               óR   ‡‡— t          | |¦  «         d
ˆˆfd	„Š ‰| ||¦  «         | S )NÚerÇ   r»   r˜  r}  rœ  r‚   r½   c           	     ó”  •‡— t          | t          ¦  «        r�t          ‰t          ¦  «        st          dt	          ‰¦  «        › �¦  «        ‚|�4t          |t          ¦  «        st          dt	          |¦  «        › �¦  «        ‚t          | ‰‰|¬¦  «         t          ‰| ¦  «         d S t          | t          ¦  «        rht          ‰t          ¦  «        st          dt	          ‰¦  «        › �¦  «        ‚t          ‰| ¦  «         t          | ‰t          ‰ˆfd„¦  «        ¦  «         d S t          | t          ¦  «        st          | ¦  «        r¡t          ‰t          ¦  «        st          dt	          ‰¦  «        › �¦  «        ‚t          t	          | ¦  «        ¦  «        r.t          t	          | ¦  «        ¦  «        st          ‰| ¦  «         d S t          | ‰‰¦  «         t          ‰| ¦  «         d S t          | t          t          f¦  «        rbt          ‰t           j        ¦  «        rt          ‰| ¦  «         dd
„}t#          | ¦  «        D ]"\  }} ‰	|‰|          |||¦  «        ¦  «         Œ#d S t          | t$          ¦  «        rj|�t          d¦  «        ‚t          ‰t           j        ¦  «        rt          ‰| ¦  «         |                      ¦   «         D ]\  }} ‰	|‰|         d ¦  «         Œd S t          | t(          ¦  «        rMt          ‰t          ¦  «        st          dt	          ‰¦  «        › �¦  «        ‚t          ‰| ¦  «         ‰| _        d S d S )NrÉ   zExpected None or Tensor, got )r¹   r}  c                 ó   •— ‰ S rh   rt   ©r»   s   €rl   rm   z<track_tensor_tree.<locals>.wrap_with_proxy.<locals>.<lambda>·  s   ø€ ¸u€ rn   Úcrœ  Úidxr�   r‚   c                ó�   — | €d S t          | t          t          f¦  «        st          dt	          | ¦  «        › �¦  «        ‚| |         S )NzExpected list or tuple, got )rª   ri   rp   r“   rÏ   )r¢  r£  s     rl   Úget_constantz@track_tensor_tree.<locals>.wrap_with_proxy.<locals>.get_constantË  sL   € ð �9Ø˜4å% a­$µ¨Ñ7Ô7ð WÝ,Ð-UÍDÐQRÉGÌGÐ-UÐ-UÑVÔVÐVà˜Sœ6�Mrn   zExpected constant to be None)r¢  rœ  r£  r�   r‚   rœ  )rª   r   r4   r“   rÏ   r—  rq  rU   rÀ   r{  rÑ   r$   r%   r'   rp   ri   Úfxr{   rZ  r3  rI   r»   )
rž  r»   r}  r¥  r£  ÚeeÚkeyr¨   r¹   Úwrap_with_proxys
    `      €€rl   r©  z*track_tensor_tree.<locals>.wrap_with_proxy¨  sw  øø€ õ �a�Ñ Ô ð H	Ý˜e¥UÑ+Ô+ð KÝ$Ð%I½DÀ¹K¼KÐ%IÐ%IÑJÔJÐJØÐ$­
°8½VÑ(DÔ(DÐ$Ý$Ð%UÅTÈ(Á^Ä^Ð%UÐ%UÑVÔVÐVÝ˜˜E¨&¸8ÐDÑDÔDÐDÝ�U˜AÑÔÐÐÐÝ˜�<Ñ(Ô(ð A	Ý˜e¥UÑ+Ô+ð KÝ$Ð%I½DÀ¹K¼KÐ%IÐ%IÑJÔJÐJå�U˜AÑÔÐÝ˜1˜f¥h¨v°}°}°}°}Ñ&EÔ&EÑFÔFÐFÐFÐFÝ˜Õ+Ñ,Ô,ð ;	µÀÑ0BÔ0Bð ;	Ý˜e¥UÑ+Ô+ð KÝ$Ð%I½DÀ¹K¼KÐ%IÐ%IÑJÔJÐJõ
 %¥T¨!¡W¤WÑ-Ô-ðå$¥T¨!¡W¤WÑ-Ô-ðõ ˜ Ñ"Ô"Ð"Ø�Ý˜1˜f eÑ,Ô,Ð,Ý�U˜AÑÔÐÐÐÝ˜�E¥4˜=Ñ)Ô)ð -	å˜%¥¤Ñ*Ô*ð #Ý˜ Ñ"Ô"Ð"ð	"ð 	"ð 	"ð 	"õ % Q™<œ<ð Mð M‘��Rð  �  E¨#¤J°°¸XÀsÑ0KÔ0KÑLÔLÐLÐLðMð Mõ
 ˜�4Ñ Ô ð 	ð Ð#Ý$Ð%CÑDÔDÐDå˜%¥¤Ñ*Ô*ð #Ý˜ Ñ"Ô"Ð"àŸGšG™IœIð 7ð 7‘��SØ�  U¨3¤Z°Ñ6Ô6Ð6Ð6ð7ð 7õ ˜�=Ñ)Ô)ð 	Ý˜e¥UÑ+Ô+ð KÝ$Ð%I½DÀ¹K¼KÐ%IÐ%IÑJÔJÐJÝ�U˜AÑÔÐØˆAŒGˆGˆGð ˆDrn   )rž  rÇ   r»   r˜  r}  rœ  r‚   r½   )Ú_set_unbacked_bindings)rš  r›  r}  r¹   r©  s      `@rl   Útrack_tensor_treer«  ’  s]   øø€ õ( ˜9 iÑ0Ô0Ð0ðKð Kð Kð Kð Kð Kð KðZ €O�I˜y¨(Ñ3Ô3Ð3àÐrn   c                  ó$   — e Zd ZU ded<   ded<   dS )r¼   r4   r»   rG  r}  Nr£   rt   rn   rl   r¼   r¼   ú  s'   € € € € € € à€L€L�LØÐÐÑÐÐrn   ú1Callable[[PySymType], bool | int | float | Proxy]c                ó   ‡ — dˆ fd„}|S )Nrž  rŸ   r‚   úint | bool | float | Proxyc                óæ  •— | j         }|j        �|j        S | j         j        j        rut	          | t
          ¦  «        rt          | j         j        ¦  «        S t	          | t          ¦  «        rt          | j         j        ¦  «        S t          | j         j        ¦  «        S t	          | t          ¦  «        st          dt          | ¦  «        › �¦  «        ‚t          | ‰¦  «                             ¦   «         S )NrË   )r¥   r}  rÞ   Ú	is_numberrª   r   r¦   r   r�   r@  rU   r“   rÏ   ræ   Úforce)rž  Únr¹   s     €rl   Úinnerzfetch_sym_proxy.<locals>.inner  sÏ   ø€ ØŒFˆØŒ:Ð!Ø”:ÐØŒ6Œ;Ô ð 
	5Ý˜!�WÑ%Ô%ð (Ý˜AœFœKÑ(Ô(Ð(Ý˜A�vÑ&Ô&ð (Ý˜1œ6œ;Ñ'Ô'Ð'Ý˜œœÑ%Ô%Ð%å˜a¥Ñ.Ô.ð NÝ$Ð%LÅ4ÈÁ7Ä7Ð%LÐ%LÑMÔMÐMå! ! VÑ,Ô,×2Ò2Ñ4Ô4Ð4rn   )rž  rŸ   r‚   r¯  rt   )r¹   r´  s   ` rl   Úfetch_sym_proxyrµ     s(   ø€ ð5ð 5ð 5ð 5ð 5ð 5ð  €Lrn   ú_ProxyTensor | Tensorc                ó   — d S rh   rt   ©r¹   r  s     rl   Úfetch_object_proxyr¹    s   € ØRUÐRUrn   úProxy | _AnyScriptObjectTypec                ó   — d S rh   rt   r¸  s     rl   r¹  r¹    s	   € ð $' 3rn   ú_PySymProxyType | PySymTypec                ó   — d S rh   rt   r¸  s     rl   r¹  r¹     s	   € ð #& #rn   ú"_OpaqueObjectProxyType | PySymTypec                ó   — d S rh   rt   r¸  s     rl   r¹  r¹  &  s	   € ð *-¨rn   c                ó$   — t          || |¦  «        S rh   ©ræ   r¸  s     rl   r¹  r¹  ,  s   € õ ˜!˜V QÑ'Ô'Ð'rn   rC  rl  r  c                ó\  — |j         s|j        sdS t          | t          j        j        ¦  «        sdS t          t          t          |j	        j
        j        ¦  «        ¦  «        ¦  «        }|j                             d¦  «        }t          j        t          j        f}t          |t          j        ¦  «        o|j        |v }|s]|j        D ]U}t'          |d¦  «        r|j                             d¦  «        nd}t          |t          j        ¦  «        r|j        |v rd} nŒV|sdS d|j        d<   dS )z¸
    Records operators whose tensor outputs or inputs are fp16/bf16 so downstream pointwise code can
    emulate eager's rounding behavior when emulate_precision_casts is enabled.
    Nr¨   r¢   TÚlow_precision_pointwise_barrier)Údecomp_layersÚemulate_precision_castsrª   rÒ   Ú_opsr*   ÚnextÚiterÚreversedr¹   ÚgraphÚnodesr¢   rØ   Úbfloat16Úfloat16r   rX  Úall_input_nodesr©   )rC  rl  Ú	last_noder  Ú	low_pr_fpÚoutput_low_precisionÚ
input_noder¨   s           rl   Ú_maybe_record_pointwise_barrierrÓ  6  s1  € ð Ôð  zÔ'Ið Øˆå�d�EœJÔ1Ñ2Ô2ð Øˆå•T�( :Ô#4Ô#:Ô#@ÑAÔAÑBÔBÑCÔC€IØŒ×Ò˜5Ñ!Ô!€AÝ”¥¤Ð/€Iå% a­¬Ñ6Ô6ÐO¸1¼7ÀiÐ;OÐàð Ø#Ô3ð 	ð 	ˆJÝ07¸
ÀFÑ0KÔ0KÐU�*”/×%Ò% eÑ,Ô,Ð,ÐQUˆCÝ˜#�uœ|Ñ,Ô,ð °´¸iÐ1GÐ1GØ'+Ð$Ø�øàð Øˆà8<€I„NÐ4Ñ5Ð5Ð5rn   Úflat_args_kwargsú!list[object] | tuple[object, ...]ú-tuple[list[object], tuple[object, ...], bool]c                óà   ‡— ˆfd„| D ¦   «         }t          d„ |D ¦   «         ¦  «         ot          d„ | D ¦   «         ¦  «         }d„ |D ¦   «         }ˆfd„|D ¦   «         }|t          |¦  «        |fS )zÉ
    Given flat arguments, fetch the proxies and whether they are all constants.
    This is later used in proxy_call or when someone is trying to stitch together
    graph node in tf or td modes.
    c                óŠ   •— g | ]?}t          |t          t          f¦  «        st          |¦  «        rt	          ‰|¦  «        n|‘Œ@S rt   )rª   r   rÑ   r$   r¹  )rw   ry   r¹   s     €rl   rz   z8_fetch_proxies_and_all_constant_flag.<locals>.<listcomp>^  sc   ø€ ð ð ð ð õ ˜!�fÕ&6Ð7Ñ8Ô8ðÝ<KÈAÑ<NÔ<NðÕ˜v qÑ)Ô)Ð)àð	ð ð rn   c              3  óR   K  — | ]"}t          |t          ¦  «        ¯|j        d u V — Œ#d S rh   ©rª   r¼   r}  ©rw   r  s     rl   r‡   z7_fetch_proxies_and_all_constant_flag.<locals>.<genexpr>k  sM   è è € ð 
ð 
àÝ˜!�\Ñ*Ô*ð
ØŒJ˜$Ðð
ð 
ð 
ð 
ð 
ð 
rn   c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S rh   ©rª   rU   rR  s     rl   r‡   z7_fetch_proxies_and_all_constant_flag.<locals>.<genexpr>r  s,   è è € ÐJÐJ°A•J˜q¥,Ñ/Ô/ÐJÐJÐJÐJÐJÐJrn   c                óJ   — g | ] }t          |t          ¦  «        r|j        n|‘Œ!S rt   )rª   r¼   r»   )rw   rž  s     rl   rz   z8_fetch_proxies_and_all_constant_flag.<locals>.<listcomp>u  s:   € ð ð ð Ø:;•:˜a¥Ñ.Ô.Ð5ˆŒˆ°Aðð ð rn   c                ón   •— g | ]1}t          |t          ¦  «        r t          ‰¦  «        |¦  «        n|‘Œ2S rt   )rª   rU   rµ  )rw   rž  r¹   s     €rl   rz   z8_fetch_proxies_and_all_constant_flag.<locals>.<listcomp>y  sP   ø€ ð ð ð àõ (2°!µ\Ñ'BÔ'BÐ	IÐ	 �˜Ñ	 Ô	  Ñ	#Ô	#Ð	#Èðð ð rn   )Úanyrp   )rÔ  r¹   Úf_flat_args_kwargsÚall_constantÚproxy_flat_args_kwargss    `   rl   Ú$_fetch_proxies_and_all_constant_flagrä  V  sé   ø€ ðð ð ð ð "ðñ ô Ðõ ð 
ð 
à'ð
ñ 
ô 
ñ 
ô 
ð 	
ð 	Kõ ÐJÐJÐ9IÐJÑJÔJÑJÔJÐJð ðð Ø?Qðñ ô Ððð ð ð à'ðñ ô Ðð
 �uÐ%;Ñ<Ô<¸lÐJÐJrn   r*   Úpre_dispatchútuple[object, ...]údict[str, object]c           	     óª	  ‡ ‡‡— g Št          j        ||f¦  «        \  }}dˆ ˆfd„Št          ˆfd„|D ¦   «         ¦  «        s"t                               d‰¦  «         t
          S t          ‰ |||¦  «        }|t
          urt          |‰ ¦  «         |S |s¡|t          j	        j
        j        j        t          j	        j
        j        j        t          j	        j
        j        j        fvrOt          ||¦  «        r?‰ 5   |j        |i |¤Ž}|t
          ur|cd d d ¦  «         S 	 d d d ¦  «         n# 1 swxY w Y   |t          j	        j
        j        j        u rj‰ 5  t          j        |d                              ¦   «         d	k    d
„ ¦  «         |d         dk                         ¦   «         cd d d ¦  «         S # 1 swxY w Y   ‰ j        }t-          ||¦  «        \  }	}
}t          j        j        |j        v rŒ|rRd„ |	D ¦   «         }t          j        ||¦  «        \  }}t7          ¦   «         5   ||i |¤Žcd d d ¦  «         S # 1 swxY w Y   ‰ j        r1t          j        t<          d„ ||f¦  «        rt?          d|› d�¦  «        ‚t          j        |
|¦  «        \  }}|t          j	        j
        j         j        u rt          j	        j
        j!        j        }‰ j         "                    d|||‰ j        j#         $                    |j%        j&        ¦  «        ¬¦  «        }tO          ‰ j        ¦  «        5   ||i |¤Ž}d d d ¦  «         n# 1 swxY w Y   tQ          d„ |	D ¦   «         ¦  «        }d }dd„}|t          j	        j
        j!        j        u r¥|                     ¦   «         tR          k    rˆt7          ¦   «         5  tU          |d         tV          t<          f¦  «        s%tY          dt[          |d         ¦  «        › �¦  «        ‚|d          .                    ¦   «         }d d d ¦  «         n# 1 swxY w Y   nŒt          j        j/        |j        vrr|rp|rnt          j        t<          ||¦  «        rSt7          ¦   «         5  d„ |	D ¦   «         }t          j        ||¦  «        \  }} ||i |¤Ž}d d d ¦  «         n# 1 swxY w Y   nd }ta          ||||¬¦  «         t          |‰ ¦  «         |S )Nry   r   r‚   r¦   c                óø   •— t          | ¦  «        t          v pt          | ‰j        ¦  «        }‰j        r"|pt          | ¦  «        t
          j        j        u }|s"‰                     t          | ¦  «        ¦  «         |S rh   )	rÏ   ÚHANDLED_TYPESrè   r¹   Ú_allow_fake_constantrÒ   Ú_subclassesr,   r  )ry   ry  rl  Úunrecognized_typess     €€rl   Úcan_handle_tensorz%proxy_call.<locals>.can_handle_tensor‹  sr   ø€ Ý�‰GŒG•}Ð$ÐL­°q¸*Ô:KÑ(LÔ(LˆØÔ*ð 	=ØÐ<•T˜!‘W”W¥Ô 1Ô <Ð<ˆAØð 	/Ø×%Ò%¥d¨1¡g¤gÑ.Ô.Ð.Øˆrn   c              3  óX   •K  — | ]$}t          |t          ¦  «        ¯ ‰|¦  «        V — Œ%d S rh   )rª   r   )rw   ry   rî  s     €rl   r‡   zproxy_call.<locals>.<genexpr>•  s>   øè è € ÐWÐW¨ÅÈAÍvÑAVÔAVÐWÐ Ð  Ñ#Ô#ÐWÐWÐWÐWÐWÐWrn   zEProxyTensorMode tensors without proxy had unrecognized subclasses: %sr   rH   c                 ó   — dS )Nz=Boolean value of Tensor with more than one value is ambiguousrt   rt   rn   rl   rm   zproxy_call.<locals>.<lambda>µ  s   € ÐW€ rn   c                óJ   — g | ] }t          |t          ¦  «        r|j        n|‘Œ!S rt   rÚ  rÛ  s     rl   rz   zproxy_call.<locals>.<listcomp>Á  ó=   € ð &ð &ð &àõ )¨­LÑ9Ô9Ð@�”
�
¸qð&ð &ð &rn   c                ó"   — t          | ¦  «         S rh   )r/   ©r  s    rl   rm   zproxy_call.<locals>.<lambda>Î  s   € ¥'¨!¡*¤*˜n€ rn   zHIt appears that you're trying to get value out of a tracing tensor with zÌ - erroring out! It's likely that this is caused by data-dependent control flow or similar.  It may be possible to trace this with dynamic shapes; try setting tracing_mode='symbolic' in your make_fx call.r‡  )Únamec              3  óR   K  — | ]"}t          |t          ¦  «        ¯|j        d uV — Œ#d S rh   rÚ  rÛ  s     rl   r‡   zproxy_call.<locals>.<genexpr>  sM   è è € ð ð àÝ�a�Ñ&Ô&ðØ	Œ
˜$Ððð ð ð ð ð rn   r  c                ó<   — |                       ¦   «         t          k    S rh   )r”  ÚCONSTANT_NUMEL_LIMITrô  s    rl   Útensor_numel_in_limitz)proxy_call.<locals>.tensor_numel_in_limit%  s   € Ø�wŠw‰yŒyÕ0Ò0Ð0rn   zExpected Proxy or Tensor, got c                óJ   — g | ] }t          |t          ¦  «        r|j        n|‘Œ!S rt   rÚ  rÛ  s     rl   rz   zproxy_call.<locals>.<listcomp>;  rò  rn   ©r}  r¹   )ry   r   r‚   r¦   )r  r   r‚   r¦   )1ru   Útree_flattenÚallÚnot_implemented_logrÍ   ÚNotImplementedÚmaybe_handle_decomprÓ  rÒ   r‰  rŠ  Úsizerë   r_  r•  r@   r—   Ú
is_nonzeroÚ_checkr”  Úitemr¹   rä  ÚTagÚdata_dependent_outputÚtagsÚtree_unflattenr0   Ú_error_on_data_dependent_opsÚtree_all_onlyr   r	  Ú
lift_freshÚlift_fresh_copyrˆ  rÊ  Ú_target_to_strÚoverloadpacketr›   rh  rà  rø  rª   r4   r“   rÏ   ÚcloneÚnondeterministic_seededr«  )rl  rC  rå  r  rt  rÔ  Úspecry  r¹   rá  rã  râ  Úconst_flat_args_kwargsÚ
const_argsÚconst_kwargsÚ
proxy_argsÚproxy_kwargsÚ	proxy_outr  Úany_constantr}  rù  rî  rí  s   `                     @@rl   Ú
proxy_callr  �  s<  øøø€ ð &(ÐÝ#Ô0°$¸°Ñ@Ô@ÑÐ�dðð ð ð ð ð ð õ ÐWÐWÐWÐWÐ-=ÐWÑWÔWÑWÔWð Ý×!Ò!ØSØñ	
ô 	
ð 	
õ Ðå˜J¨¨d°FÑ;Ô;€AØ•ÐÐÝ'¨¨jÑ9Ô9Ð9Øˆð ðàåŒIŒNÔÔ'ÝŒIŒNÔ!Ô)ÝŒIŒNÔ)Ô1ð
ð
ð 
õ +¨4Ð1AÑBÔBð
ð ð 	ð 	Ø�” Ð/¨Ð/Ð/ˆAØ�Ð&Ð&Øð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	à&ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð
 �uŒyŒ~Ô(Ô0Ð0Ð0Øð 	)ð 	)ÝŒLØ�Q”—’‘” 1Ò$ØWÐWñô ð ð ˜”G˜q’L×&Ò&Ñ(Ô(ð	)ð 	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)ð Ô€Få,Ð-=¸vÑFÔFñ =ÐÐ.°õ „yÔ&¨$¬)Ð3Ð3àð 		9ð&ð &à+ð&ñ &ô &Ð"õ (.Ô'<Ø&¨ñ(ô (Ñ$ˆJ˜õ (Ñ)Ô)ð 9ð 9Ø�t˜ZÐ8¨<Ð8Ð8ð9ð 9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9ð
 Ô2ð 	µvÔ7KÝÐ,Ð,¨t°V¨nñ8
ô 8
ð 	õ ð(Ð[_ð (ð (ð (ñô ð õ  &Ô4Ð5KÈTÑRÔRÑ€J�ðF �uŒyŒ~Ô(Ô0Ð0Ð0ÝŒyŒ~Ô-Ô5ˆàÔ!×.Ò.ØØØØØÔÔ$×3Ò3°DÔ4GÔ4PÑQÔQð /ñ ô €Iõ 
˜*Ô+Ñ	,Ô	,ð $ð $Øˆd�DÐ#˜FÐ#Ð#ˆð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $õ0 ð ð à#ðñ ô ñ ô €Lð €Hð1ð 1ð 1ð 1ð 	•”	”Ô.Ô6Ð6Ð6Ø�IŠI‰KŒKÕ/Ò/Ð/å#Ñ%Ô%ð 	'ð 	'Ý˜d 1œg­­v Ñ7Ô7ð WÝ$Ð%UÅdÈ4ÐPQÌ7ÁmÄmÐ%UÐ%UÑVÔVÐVØ˜A”w—}’}‘”ˆHð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'øõ
 	Œ	Ô)°´Ð:Ð:Øð 	;àð 	;õ Ô ¥Ð)>ÀÑDÔDð 	;õ $Ñ%Ô%ð 	9ð 	9ð&ð &à+ð&ñ &ô &Ð"õ (.Ô'<Ø&¨ñ(ô (Ñ$ˆJ˜ð �t˜ZÐ8¨<Ð8Ð8ˆHð	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9øð ˆåØØàØðñ ô ð õ $ D¨*Ñ5Ô5Ð5Ø€Jsn   Ã6D(Ä(D,Ä/D,ÅAF/Æ/F3Æ6F3È!H6È6H:È=H:Ì#	L8Ì8L<Ì?L<Î*A"PÐPÐPÑ)-R"Ò"R&Ò)R&c                  óN   — e Zd ZdZdd„Zdd	„Zdd
„Zdd„Z	 ddd„Zdd„Z	dd„Z
dS )Ú_SymNodeDictzM
    Wrapper around a dictionary that will hash SymInts with their nodes
    r‚   r½   c                ó   — i | _         d S rh   )Úsym_node_dict©Úselfs    rl   Ú__init__z_SymNodeDict.__init__V  s   € Ø?AˆÔÐÐrn   r¨  rŸ   r®   rÄ   c                ó$   — || j         |j        <   d S rh   ©r  r¥   )r  r¨  r®   s      rl   Ú__setitem__z_SymNodeDict.__setitem__Y  s   € Ø',ˆÔ˜3œ8Ñ$Ð$Ð$rn   c                ó&   — | j         |j                 S rh   r"  ©r  r¨  s     rl   Ú__getitem__z_SymNodeDict.__getitem__\  s   € ØÔ! #¤(Ô+Ð+rn   r¦   c                ó   — |j         | j        v S rh   )r¥   r  r%  s     rl   Ú__contains__z_SymNodeDict.__contains___  s   € ØŒx˜4Ô-Ð-Ð-rn   Nrë   ú_PySymProxyType | Nonec                óB   — | j                              |j        |¦  «        S rh   )r  rØ   r¥   )r  r¨  rë   s      rl   rØ   z_SymNodeDict.getb  s   € ð
 Ô!×%Ò% c¤h°Ñ8Ô8Ð8rn   r   c                ó   — t           ‚rh   )ÚNotImplementedErrorr  s    rl   Ú__iter__z_SymNodeDict.__iter__i  s   € Ý!Ð!rn   r�   c                ó*   — t          | j        ¦  «        S rh   )Úlenr  r  s    rl   Ú__len__z_SymNodeDict.__len__l  s   € Ý�4Ô%Ñ&Ô&Ð&rn   ©r‚   r½   )r¨  rŸ   r®   rÄ   r‚   r½   )r¨  rŸ   r‚   rÄ   )r¨  rŸ   r‚   r¦   rh   )r¨  rŸ   rë   r)  r‚   rÄ   )r‚   r   )r‚   r�   )r›   rœ   r�   Ú__doc__r   r#  r&  r(  rØ   r-  r0  rt   rn   rl   r  r  Q  sº   € € € € € ðð ðBð Bð Bð Bð-ð -ð -ð -ð,ð ,ð ,ð ,ð.ð .ð .ð .ð AEð9ð 9ð 9ð 9ð 9ð"ð "ð "ð "ð'ð 'ð 'ð 'ð 'ð 'rn   r  c                  ó$   — e Zd ZU ded<   ded<   dS )rà   rÄ   r»   rŸ   r®   Nr£   rt   rn   rl   rà   rà   p  s*   € € € € € € àÐÐÑØÐÐÑÐÐrn   rà   ú)PythonKeyTracer | _GraphAppendingTracerExc                óô   — t          ¦   «         | _        t          ¦   «         | _        t	          dt
          ¬¦  «        | _        t	          ¦   «         | _        i | _        i | _	        d| _
        i | _        d| _        dS )zZInitialize the tracker dictionaries shared by PythonKeyTracer and _GraphAppendingTracerEx.N)rZ  Úref_typeF)rG   rÐ   r  rÚ   rF   rE   rÔ   rÙ   r×   rá   Útorch_fn_metadataÚtorch_fn_countsrf  ©r¹   s    rl   Ú_init_proxy_trackersr:  v  so   € å3Ñ5Ô5€FÔÝ)™^œ^€FÔÝ#6¸DÍ<Ð#XÑ#XÔ#X€FÔ Ý/Ñ1Ô1€FÔØ$&€FÔ!Ø "€FÔà#€FÔð  €FÔØ"€FÔÐÐrn   c                  ó  ‡ — e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   dZded<   dFˆ fd„ZdGd „ZdHd'„ZdIˆ fd*„ZdJd-„Z	e
dKd1„¦   «         Ze
dLd4„¦   «         Ze
dMd7„¦   «         ZdNd9„Z	 	 dOdPˆ fdE„Zˆ xZS )QrP   ú)MutableMapping[torch.ScriptObject, Proxy]rÔ   ú4MutableMapping[FakeScriptObject | OpaqueBase, Proxy]rÙ   údict[int, Proxy]r×   r  rÚ   ú*dict[sympy.Symbol, _SympyExprTrackerValue]rá   ú$MutableMapping[Tensor, _ProxyTensor]rÐ   úOpOverload | Noner7  údict[OpOverload, int]r8  Fr¦   rf  r‚   r½   c                ój   •— t          ¦   «                              d¬¦  «         t          | ¦  «         d S )Nrt   )Úautowrap_modules©Úsuperr   r:  )r  rY  s    €rl   r   zPythonKeyTracer.__init__—  s2   ø€ Ý‰Œ×Ò¨"ÐÑ-Ô-Ð-Ý˜TÑ"Ô"Ð"Ð"Ð"rn   Úmr;   Úforwardr  r  útuple[Any, ...]rt  údict[str, Any]r   c                ó   —  ||i |¤ŽS rh   rt   )r  rG  rH  r  rt  s        rl   Úcall_modulezPythonKeyTracer.call_modulež  s   € ð ˆw˜Ð' Ð'Ð'Ð'rn   ÚattrÚstrÚattr_valrÇ   Úparameter_proxy_cacheúdict[str, Proxy]c                ó   — |S rh   rt   )r  rM  rO  rP  s       rl   r4  zPythonKeyTracer.getattr¨  s	   € ð ˆrn   Úaúfx.node.Nodec                óf  •— t          |t          j        j        ¦  «        r€| j                             ¦   «         D ]#\  }}||u r|                      d|di ¦  «        c S Œ$|                      d¦  «        }t          | j        ||¦  «         |                      d|di ¦  «        S t          |t          ¦  «        r'|j
        j        €t          d¦  «        ‚|j
        j        S t          |t          t          f¦  «        r|                      |¦  «        }|�|S t!          ¦   «                              |¦  «        S )NÚget_attrrt   Ú_param_constantz"a.node.constant should not be None)rª   rÒ   ÚnnÚ	ParameterÚrootÚnamed_parametersÚcreate_nodeÚget_fresh_qualnameÚsetattrrU   r¥   r}  r“   r!   r&   Ú_try_reconstruct_opaquerF  Ú
create_arg)r  rS  r³  ÚpÚqualnamer¥   rY  s         €rl   r`  zPythonKeyTracer.create_arg­  s4  ø€ Ý�a�œÔ+Ñ,Ô,ð 	#Øœ	×2Ò2Ñ4Ô4ð Cð C‘��1Ø˜�6�6Ø×+Ò+¨J¸¸2¸rÑBÔBÐBÐBÐBð ð ×.Ò.Ð/@ÑAÔAˆHÝ�D”I˜x¨Ñ+Ô+Ð+à×#Ò# J°¸"¸bÑAÔAÐAÝ˜�<Ñ(Ô(ð 	#ØŒvŒÐ&Ý$Ð%IÑJÔJÐJØ”6”?Ð"õ �aÕ*­JÐ7Ñ8Ô8ð 	Ø×/Ò/°Ñ2Ô2ˆDØÐØ�å‰wŒw×!Ò! !Ñ$Ô$Ð$rn   úFakeScriptObject | OpaqueBaseúfx.node.Node | Nonec                ó°  ‡ — t          |t          ¦  «        r|j        n|}t          t	          |¦  «        ¦  «        sdS t          t	          |¦  «        ¦  «        }|€dS dˆ fd„} |||‰ ¦  «        }|€dS d|j        j        vrt          ||¦  «         t          |‰ |¦  «         t          |¦  «        ‰ j        vr|‰ j        t          |¦  «        <   |j        S )	a·  Try to reconstruct an opaque object from existing graph inputs.

        When make_fx encounters an untracked opaque reference type (e.g. a
        DeviceMesh submesh captured by a backward closure), this method checks
        if the type has a registered reconstruct_fn that can derive the object
        from inputs already in the graph.  Returns an FX Node on success,
        None on failure (falls back to get_attr constant).
        Nr¸   r&   r‚   úProxy | Nonec                ó  •— ‰j                              t          | ¦  «        ¦  «        }|�|S t          | ‰d ¦  «        }|�|S ‰j                             ¦   «         D ]*\  }}t          |t          ¦  «        sŒ|j        | k    r|c S Œ+d S rh   )	r×   rØ   rÎ   ræ   rÙ   r3  rª   r!   rÊ   )r¸   r»   Útracked_objra  r  s       €rl   Úget_tracked_proxyzBPythonKeyTracer._try_reconstruct_opaque.<locals>.get_tracked_proxyÙ  s¡   ø€ ØÔ/×3Ò3µB°s±G´GÑ<Ô<ˆEØÐ Ø�Ý" 3¨¨dÑ3Ô3ˆEØÐ Ø�ð #'Ô"5×";Ò";Ñ"=Ô"=ð ð ‘�˜QÝ! +Õ/?Ñ@Ô@ð ØØÔ'¨3Ò.Ð.Ø�H�H�Hð /à�4rn   r¨   )r¸   r&   r‚   rf  )rª   r!   rÊ   r#   rÏ   r"   r¥   r¢   rq  rÀ   rÎ   r×   )r  rS  rÊ   Úreconstruct_fnri  Úresults   `     rl   r_  z'PythonKeyTracer._try_reconstruct_opaqueÅ  sý   ø€ õ .8¸Õ;KÑ-LÔ-LÐS˜qœz˜zÐRSˆå'­¨X©¬Ñ7Ô7ð 	Ø�4å+­D°©N¬NÑ;Ô;ˆØÐ!Ø�4ð	ð 	ð 	ð 	ð 	ð 	ð&  � Ð*;¸TÑBÔBˆØˆ>Ø�4ð ˜œÔ(Ð(Ð(Ý�V˜QÑÔÐõ 	�q˜$ Ñ'Ô'Ð'Ýˆh‰<Œ<˜tÔ:Ð:Ð:Ø8>ˆDÔ'­¨8©¬Ñ5àŒ{Ðrn   rž  r   úProxy | Tensorc                ó   — d S rh   rt   ©r  rž  s     rl   Úunwrap_proxyzPythonKeyTracer.unwrap_proxy   s   € Ø9<¸rn   rŸ   úProxy | PySymTypec                ó   — d S rh   rt   rn  s     rl   ro  zPythonKeyTracer.unwrap_proxy  s   € Ø?B¸srn   rõ   rº  c                ó   — d S rh   rt   rn  s     rl   ro  zPythonKeyTracer.unwrap_proxy  s   € ØUXÐUXrn   rb   c                ó  — t          |t          ¦  «        rt          || |d„ ¦  «        S t          |t          ¦  «        rt          || |d„ ¦  «        S t          |t          ¦  «        st          |¦  «        rt          || |¦  «        S |S )Nc                ó   — | j         S rh   r¡  r  s    rl   rm   z.PythonKeyTracer.unwrap_proxy.<locals>.<lambda>  s   € ¸¼€ rn   c                ó*   — |                       ¦   «         S rh   )r²  )rž  s    rl   rm   z.PythonKeyTracer.unwrap_proxy.<locals>.<lambda>  s   € ¸¿º¹	¼	€ rn   )rª   r   ræ   rU   rÑ   r$   rn  s     rl   ro  zPythonKeyTracer.unwrap_proxy	  s�   € Ý�a�Ñ Ô ð 	Ý! ! T¨1Ð.?Ð.?Ñ@Ô@Ð@Ý˜�<Ñ(Ô(ð 	Ý! ! T¨1Ð.AÐ.AÑBÔBÐBÝ˜Õ+Ñ,Ô,ð 	µÀÑ0BÔ0Bð 	Ý! ! T¨1Ñ-Ô-Ð-àˆHrn   NÚkindÚtargetr9   útuple[Argument, ...]údict[str, Argument]rõ  ú
str | NoneÚ	type_exprú
Any | Noneútorch.fx.Nodec                ól  •— t          ¦   «                              ||||||¦  «        }|j        dv rd|j        v r|j        d= |dk    r t	          |t
          ¦  «        st          dt          |¦  «        › �¦  «        ‚t          | j	        |¦  «        }t	          |t          j        ¦  «        r=t          ¦   «         5  t          |¦  «        |j        d<   d d d ¦  «         n# 1 swxY w Y   dd
„}	t          |||f¦  «        r6t          j        j                             ||f|	¦  «        \  }
}|
|f|j        d<   |S )N©ro  ÚoutputÚstack_tracerV  zExpected str, got r¨   r9  r   r‚   ú_ExtractValType | Nonec                ó  — t          | t          j        j        ¦  «        r	d| j        vrd S | j        d         }t          |t          j        ¦  «        rt          |t          ¦  «        sd S t          | j        d         ¦  «        S )Nr¨   )rª   rÒ   r¦  ÚNoder¢   r   r,   rQ  )r9  r¨   s     rl   Úmap_fnz+PythonKeyTracer.create_node.<locals>.map_fn)  st   € Ý˜a¥¤¤Ñ/Ô/ð °5ÀÄÐ3FÐ3FØ�tØ”&˜”-ˆCõ ˜#�uœ|Ñ,Ô,ð µZÀÅZÑ5PÔ5Pð Ø�tÝ˜qœv eœ}Ñ-Ô-Ð-rn   Úeager_input_vals)r9  r   r‚   r‚  )rF  r\  r:  r¢   rª   rN  r“   rÏ   r4  rZ  rÒ   r   Údisable_proxy_modes_tracingrQ  Ú_should_save_eager_input_valsr¦  r¥   Úmap_aggregate)r  rv  rw  r  rt  rõ  r{  r¥   rM  r…  Úarg_inpÚ	kwarg_inprY  s               €rl   r\  zPythonKeyTracer.create_node  s‡  ø€ õ ‰wŒw×"Ò" 4¨°°v¸tÀYÑOÔOˆàŒ7Ð/Ð/Ð/°MÀTÄYÐ4NÐ4NØ”	˜-Ð(à�:ÒÐÝ˜f¥cÑ*Ô*ð JÝ$Ð%H½$¸v¹,¼,Ð%HÐ%HÑIÔIÐIÝ˜4œ9 fÑ-Ô-ˆDÝ˜$¥¤Ñ-Ô-ð 9Ý0Ñ2Ô2ð 9ð 9Ý'2°4Ñ'8Ô'8�D”I˜eÑ$ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9ð	.ð 	.ð 	.ð 	.õ )¨°$¸°Ñ@Ô@ð 	Aõ "'¤¤×!<Ò!<¸dÀF¸^ÈVÑ!TÔ!TÑˆG�YØ-4°iÐ,@ˆDŒIÐ(Ñ)àˆs   Â9CÃC!Ã$C!r1  )
rG  r;   rH  r  r  rI  rt  rJ  r‚   r   ©rM  rN  rO  rÇ   rP  rQ  r‚   rÇ   )rS  rÇ   r‚   rT  )rS  rc  r‚   rd  )rž  r   r‚   rl  )rž  rŸ   r‚   rp  )rž  rõ   r‚   rº  )rž  rb   r‚   rÇ   )NN)rv  rN  rw  r9   r  rx  rt  ry  rõ  rz  r{  r|  r‚   r}  )r›   rœ   r�   r¤   rf  r   rL  r4  r`  r_  r   ro  r\  Ú__classcell__©rY  s   @rl   rP   rP   †  s–  ø€ € € € € € ð EÐDÐDÑDð IÐHÐHÑHð -Ð,Ð,Ñ,Ø!Ð!Ð!Ñ!ØBÐBÐBÑBØ8Ð8Ð8Ñ8Ø(Ð(Ð(Ñ(Ø*Ð*Ð*Ñ*Ø!€OÐ!Ð!Ð!Ñ!ð#ð #ð #ð #ð #ð #ð(ð (ð (ð (ðð ð ð ð
%ð %ð %ð %ð %ð %ð09ð 9ð 9ð 9ðv Ø<Ð<Ð<ñ „XØ<àØBÐBÐBñ „XØBàØXÐXÐXñ „XØXðð ð ð ð   Ø $ð)ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )rn   rP   rw  Úargs_kwargsú7tuple[tuple[Argument, ...], dict[str, Argument]] | Nonec                ó`  — ddl m} t          | ¦  «        sdS t          | t          j        j        j        t          j        j        j        |f¦  «        rdS |�©| t          j	        j
        j        u s| t          j	        j
        j        u ry|d         }t          |d         t          j        j        t          j        j        f¦  «        s%t!          dt#          |d         ¦  «        › �¦  «        ‚t%          |d         d ¦  «        S | t          j	        j
        j        u rdS t          | t          j        j        ¦  «        r-t)          j        t$          |¦  «        rt-          d| › d�¦  «        ‚t          | t          j        j        ¦  «        r)ddlm}  || ¦  «        t          j        j        j        k    S dS )	Nr   )ÚInvokeSubgraphHOPFTz0Expected OpOverload or HigherOrderOperator, got zNYI: The HOP z” has an input that is an OpOverload that needs exact strides. We probably need special logic to propagate the FakeTensor vals. Please file an issue.)Úget_layout_constraint_tag)Ú'torch._higher_order_ops.invoke_subgraphr’  rƒ  rª   rÒ   Ú_higher_order_opsÚtriton_kernel_wrapÚTritonKernelWrapperFunctionalÚTritonKernelWrapperMutationr‰  Úhigher_orderÚauto_functionalizedÚauto_functionalized_v2rÆ  r*   r)   r“   rÏ   rˆ  Úwith_effectsru   Útree_anyr	  Útorch._library.utilsr“  r  r  Úneeds_exact_strides)rw  r�  r’  r  r“  s        rl   rˆ  rˆ  ?  sÆ  € ð JÐIÐIÐIÐIÐIå�FÑÔð ØˆuÝØåÔ#Ô6ÔTÝÔ#Ô6ÔRØð	
ñô ð ð ˆtØÐØ•%”)Ô(Ô<Ð<Ð<Ø•U”YÔ+ÔBÐBÐBà˜1Œ~ˆÝØ�ŒG•e”jÔ+­U¬ZÔ-KÐLñ
ô 
ð 	õ !ØRÅ4ÈÈQÌÁ=Ä=ÐRÐRñô ð õ -¨T°!¬W°dÑ;Ô;Ð;Ø•”Ô'Ô4Ð4Ð4ð ˆuÝ�&�%œ*Ô8Ñ9Ô9ð ÝŒ?Õ8¸+ÑFÔFð 	ÝðH ð Hð Hð Hñô ð õ
 �&�%œ*Ô/Ñ0Ô0ð UØBÐBÐBÐBÐBÐBà(Ð(¨Ñ0Ô0µE´H´LÔ4TÒTÐTØˆ5rn   Úmode_tyútype[TorchFunctionMode]ú@Callable[[], _GeneratorContextManager[TorchFunctionMode | None]]c                ó.   ‡ — t           dˆ fd„¦   «         }|S )Nr‚   ú/Generator[TorchFunctionMode | None, None, None]c               3  ó�  •K  — ddl m} m}m} g }d } | ¦   «         dk    r@ |¦   «         }t	          |‰¦  «        r|}n#|                     |¦  «          | ¦   «         dk    °@t          |¦  «        D ]} ||¦  «         Œ	 |V — |�\t          |¦  «        }|dk    r |¦   «         }|dz  }|dk    °|                     |¦  «         t          |¦  «        D ]} ||¦  «         Œd S d S # |�\t          |¦  «        }|dk    r |¦   «         }|dz  }|dk    °|                     |¦  «         t          |¦  «        D ]} ||¦  «         Œw w xY w)Nr   )Ú_len_torch_function_stackÚ	_pop_moder>   rH   )Útorch.overridesr¦  r§  r>   rª   r  rÉ  r/  )r¦  r§  r>   Útemp_elementsÚremoved_moder•   rC   r   s          €rl   Úcontext_manager_fnzB_make_temp_remove_mode_context_manager.<locals>.context_manager_fnq  sé  øè è € àTÐTÐTÐTÐTÐTÐTÐTÐTÐTàˆØˆà'Ð'Ñ)Ô)¨AÒ-Ð-Ø�9‘;”;ˆDÝ˜$ Ñ(Ô(ð +Ø#�Øà×$Ò$ TÑ*Ô*Ð*ð (Ð'Ñ)Ô)¨AÒ-Ð-õ ˜]Ñ+Ô+ð 	ð 	ˆDØˆJ�tÑÔÐÐð	%ØÐÐÐð Ð'Ý˜MÑ*Ô*�Ø˜a’i�iØ$˜9™;œ;�DØ˜Q‘J�Eð ˜a’i�ið ×$Ò$ \Ñ2Ô2Ð2å$ ]Ñ3Ô3ð %ð %�DØ�J˜tÑ$Ô$Ð$Ð$ð (Ð'ð%ð %øð Ð'Ý˜MÑ*Ô*�Ø˜a’i�iØ$˜9™;œ;�DØ˜Q‘J�Eð ˜a’i�ið ×$Ò$ \Ñ2Ô2Ð2å$ ]Ñ3Ô3ð %ð %�DØ�J˜tÑ$Ô$Ð$Ð$ð (ð%øøøs   Á>C$ Ã$A!E)r‚   r¤  )r   )r   r«  s   ` rl   Ú&_make_temp_remove_mode_context_managerr¬  n  s6   ø€ õ ð%ð %ð %ð %ð %ñ „^ð%ð@ Ðrn   rZ  úModule | Callable[..., Any]r5   Úconcrete_argsútuple[object, ...] | Noner3   c                ó  — |                      | |¦  «        }dd„}|                     |¦  «         ddlm}  ||¦  «         t	          | t
          ¦  «        r| j        j        n| j        }t          j	         
                    |j        ||¦  «        S )	Nr³  úfx.Noder‚   r¦   c                óò   — ddl m} |                      ¦   «         rdS  || ¦  «        rdS t          | j                             d¦  «        t          ¦  «        r t          d„ | j        D ¦   «         ¦  «        rdS dS )NrH   )Úis_accessor_nodeTFr¨   c              3  ó¤   K  — | ]K}t          |t          j        ¦  «        ¯t          |j                             d ¦  «        t
          ¦  «        V — ŒLdS )r¨   N)rª   r¦  r„  r¢   rØ   rU   )rw   rS  s     rl   r‡   z6dispatch_trace.<locals>.impure_pred.<locals>.<genexpr>¯  s`   è è € ð ð àÝ˜a¥¤Ñ)Ô)ðÝ˜1œ6Ÿ:š: eÑ,Ô,­lÑ;Ô;ðð ð ð ð ð rn   )	Úsymbolic_shapesr³  Ú	is_impurerª   r¢   rØ   rU   rý  r  )r³  r³  s     rl   Úimpure_predz#dispatch_trace.<locals>.impure_predž  s§   € Ø5Ð5Ð5Ð5Ð5Ð5ð �;Š;‰=Œ=ð 	Ø�4ð Ð˜AÑÔð 	Ø�5õ
 �q”v—z’z %Ñ(Ô(­,Ñ7Ô7ð
	õ ð ð àœðñ ô ñ ô ð	
	ð �5ð ˆtrn   r   )Údedupe_symints)r³  r±  r‚   r¦   )ÚtraceÚeliminate_dead_codeÚ,torch._inductor.fx_passes.dedupe_symint_usesr¸  rª   r;   rY  r›   r¦  Ú_lazy_graph_moduleÚ_make_graph_modulerZ  )rZ  r¹   r®  rÊ  r·  r¸  rõ  s          rl   rQ   rQ   •  s    € ð �LŠL˜˜}Ñ-Ô-€Eðð ð ð ð8 
×Ò˜kÑ*Ô*Ð*ØKÐKÐKÐKÐKÐKà€N�5ÑÔÐÝ&0°µvÑ&>Ô&>ÐQˆ4Œ>Ô"Ð"ÀDÄM€DÝÔ ×3Ò3°F´KÀÈÑMÔMÐMrn   úCallable[[Unpack[_Ts]], R]Útensorsútuple[Unpack[_Ts]]c                ó‚   ‡ ‡‡‡— t          j        ‰¦  «        \  Š}t          j        ‰ ¦  «        dˆ ˆˆˆfd„¦   «         }|S )	Nr  rs  Ú_unusedru  r‚   re   c                 ó
  •— t          j        | ¦  «        \  }}t          |¦  «        t          ‰	¦  «        k    r/t          dt          |¦  «        › dt          ‰	¦  «        › �¦  «        ‚t	          ¦   «         5 }t          |t          ¦  «        st          dt          |¦  «        › �¦  «        ‚t          ‰	|d ‰¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          ‰dd¦  «        rd„ t          ‰
| ¦  «        D ¦   «         Š
dˆfd„} ‰‰
Ž }t          j        t          ||¦  «        }t          j        t          ˆfd„|¦  «        }t          j        t          ˆfd„|¦  «        }dˆfd„}t          j        t          ||¦  «        }|S )NzExpected same length: z vs r  rû  Úproxy_module_inputsFc                óZ   — g | ](\  }}t          |t          j        j        ¦  «        r|n|‘Œ)S rt   )rª   rÒ   rX  r;   )rw   r  ra  s      rl   rz   z-wrap_key.<locals>.wrapped.<locals>.<listcomp>Ù  sC   € ð ð ð á�A�qõ   ¥5¤8¤?Ñ3Ô3Ð:��¸ðð ð rn   r  r   r‚   úTensor | Proxyc                ó*   •— t          | ‰| d„ ¦  «        S )Nc                ó   — | j         S rh   r¡  r  s    rl   rm   zJwrap_key.<locals>.wrapped.<locals>.get_tensor_proxy_slot.<locals>.<lambda>ß  s   € ¸!¼'€ rn   rÁ  ©r  r¹   s    €rl   Úget_tensor_proxy_slotz8wrap_key.<locals>.wrapped.<locals>.get_tensor_proxy_slotÞ  s   ø€ Ý! ! V¨QÐ0AÐ0AÑBÔBÐBrn   c                ó*   •— t          | ‰| d„ ¦  «        S )Nc                ó   — | S rh   rt   r  s    rl   rm   z=wrap_key.<locals>.wrapped.<locals>.<lambda>.<locals>.<lambda>ä  s   € Èq€ rn   rÁ  rÉ  s    €rl   rm   z+wrap_key.<locals>.wrapped.<locals>.<lambda>ä  s   ø€ ­°q¸&À!À[À[Ñ(QÔ(Q€ rn   c                ó*   •— t          | ‰| d„ ¦  «        S )Nc                ó   — | S rh   rt   r  s    rl   rm   z=wrap_key.<locals>.wrapped.<locals>.<lambda>.<locals>.<lambda>ç  s   € È€ rn   rÁ  rÉ  s    €rl   rm   z+wrap_key.<locals>.wrapped.<locals>.<lambda>ç  s   ø€ ¥.°°F¸A¸{¸{Ñ"KÔ"K€ rn   rŸ   r4   c                óH   •— t          | ‰¦  «                             ¦   «         S rh   )ræ   r²  rÉ  s    €rl   Úget_sym_proxy_slotz5wrap_key.<locals>.wrapped.<locals>.get_sym_proxy_slotê  s   ø€ Ý! ! VÑ,Ô,×2Ò2Ñ4Ô4Ð4rn   )r  r   r‚   rÆ  )r  rŸ   r‚   r4   )ru   rü  r/  r“   r‡  rª   r  rÏ   r«  r4  ÚzipÚtree_map_onlyr   rÑ   r&   rU   )r  rÂ  Úflat_proxiesÚ_proxies_specrG  rÊ  r  rÐ  rr  Úflat_tensorsr¿  r¹   s           €€€€rl   Úwrappedzwrap_key.<locals>.wrappedÊ  s,  ø€ õ '-Ô&9¸'Ñ&BÔ&BÑ#ˆ�mÝˆ|ÑÔ¥ LÑ 1Ô 1Ò1Ð1Ý ØS­¨\Ñ):Ô):ÐSÐSÅÀLÑ@QÔ@QÐSÐSñô ð õ )Ñ*Ô*ð 	X¨aÝ˜aÕ!7Ñ8Ô8ð XÝ$Ð%VÍTÐRSÉWÌWÐ%VÐ%VÑWÔWÐWÝ˜l¨LÀ4ÐPVÐWÑWÔWÐWð	Xð 	Xð 	Xñ 	Xô 	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xøøøð 	Xð 	Xð 	Xð 	Xõ
 �6Ð0°%Ñ8Ô8ð 	ðð å ¨Ñ1Ô1ðñ ô ˆGð
	Cð 	Cð 	Cð 	Cð 	Cð 	Cð ˆa�ˆkˆÝÔ"¥6Ð+@À#ÑFÔFˆÝÔ"ÝÐQÐQÐQÐQÐSVñ
ô 
ˆõ Ô"ÝÐKÐKÐKÐKÈSñ
ô 
ˆð	5ð 	5ð 	5ð 	5ð 	5ð 	5õ Ô"¥<Ð1CÀSÑIÔIˆØˆ
s   Á6AC
Ã
CÃC)r  rs  rÂ  ru  r‚   re   )ru   rü  r!  Úwraps)rr  r¿  r¹   rå  Ú_tensors_specrÖ  rÕ  s   ```   @rl   Úwrap_keyrÙ  Â  sg   øøøø€ õ #)Ô"5°gÑ">Ô">Ñ€L�-å„_�QÑÔð#ð #ð #ð #ð #ð #ð #ð #ñ Ôð#ðJ €Nrn   ÚORIGINAL_ATEN)rë   z%contextvars.ContextVar[object | None]ú+OpOverload | torch._ops.HigherOrderOperatorc              #  óx  K  — t                                ¦   «         €št          j        ¦   «         r‡t                                | ¦  «        }| t          j        d<   	 d V — t                                |¦  «         d t          j        d<   d S # t                                |¦  «         d t          j        d<   w xY wd V — d S )NÚoriginal_aten)rÚ  rØ   Úfx_tracebackÚhas_preserved_node_metaÚsetÚcurrent_metaÚreset)rC  Útokens     rl   Úset_original_aten_oprä  ù  sº   è è € õ ×ÒÑÔÐ"¥|Ô'KÑ'MÔ'MÐ"Ý×!Ò! $Ñ'Ô'ˆØ59�Ô! /Ñ2ð	>ØˆEˆEˆEå×Ò Ñ&Ô&Ð&Ø9=�LÔ% oÑ6Ð6Ð6øõ ×Ò Ñ&Ô&Ð&Ø9=�LÔ% oÑ6Ð=Ð=Ð=Ð=àˆˆˆˆˆs   ÁB Â+B3c                  ó$   — e Zd Zdd„Z	 	 ddd„ZdS )ÚTorchFunctionMetadataModer¹   rº   r‚   r½   c                ó   — || _         d S rh   r9  ©r  r¹   s     rl   r   z"TorchFunctionMetadataMode.__init__
  s   € ØˆŒˆˆrn   rt   NrC  r*   Útypesú tuple[torch._C._TensorMeta, ...]r  ræ  rt  údict[str, object] | NonerÇ   c                óÊ  — |pi }|| j         _        | j         j                             |d¦  «        dz   | j         j        |<   |t          j        j        j        j        u rt          |¦  «        dk    rlt          |d         t          ¦  «        rQt          d„ |d                              ¦   «         D ¦   «         ¦  «        r t	          j        j        j        j        |i |¤ŽS  ||i |¤ŽS )Nr   rH   c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S rh   rÝ  )rw   r–  s     rl   r‡   z?TorchFunctionMetadataMode.__torch_function__.<locals>.<genexpr>  s,   è è € ÐHÐH°A•J˜q¥,Ñ/Ô/ÐHÐHÐHÐHÐHÐHrn   )r¹   r7  r8  rØ   rÒ   r‰  rŠ  r  rë   r/  rª   r   rà  r‹  ©r  rC  ré  r  rt  s        rl   Ú__torch_function__z,TorchFunctionMetadataMode.__torch_function__  sÛ   € ð �˜2ˆà(,ˆŒÔ%Ø,0¬KÔ,G×,KÒ,KÈDÐRSÑ,TÔ,TÐWXÑ,XˆŒÔ# DÑ)à•E”I”NÔ'Ô/Ð/Ð/Ý�D‘	”	˜Q’�Ý˜4 œ7¥FÑ+Ô+ð åÐHÐH¸¸a¼¿º¹¼ÐHÑHÔHÑHÔHð õ ”9”>Ô*Ô2°DÐC¸FÐCÐCÐCØˆt�TÐ$˜VÐ$Ð$Ð$rn   ©r¹   rº   r‚   r½   ©rt   N©
rC  r*   ré  rê  r  ræ  rt  rë  r‚   rÇ   ©r›   rœ   r�   r   rï  rt   rn   rl   ræ  ræ  	  sI   € € € € € ðð ð ð ð $&Ø+/ð%ð %ð %ð %ð %ð %ð %rn   ræ  c                  ó$   — e Zd Zdd„Z	 	 ddd„ZdS )ÚPreDispatchTorchFunctionModer¹   rº   r‚   r½   c                ó"   — || _         g | _        d S rh   )r¹   Úenter_autocast_nodesrè  s     rl   r   z%PreDispatchTorchFunctionMode.__init__+  s   € ØˆŒð :<ˆÔ!Ð!Ð!rn   rt   NrC  úOpOverload | Callable[..., Any]ré  rê  r  ræ  rt  rë  rÇ   c                ó\  — |pi }|t           v rè|t          j        j        j        u r| j                             ¦   «         }|f}| j                             d||i ¦  «        }|t          j        j        j	        u r| j         
                    |¦  «         |t          j        j        t          j        j        j	        t          j        j        j        fv r
d |j        d<   |t          j        j        u r ||i |¤Ž |S |t          j        j        j        t          j        j        j        t          j        j        j        t          j        j        j        t          j        j        j        t          j        j        j        t          j        j        j        t          j        j        j        t          j        j        j        t          j        j        j        t          j        j        j        t          j        j        j        fv r°t;          || j        ¦  «        \  }}}| j                             d|||¦  «        }	 ||i |¤Ž}
|t>          v rOt          j                              ¦   «         5  tC          |
|	d | j        ¬¦  «         d d d ¦  «         n# 1 swxY w Y   ntC          |
|	d | j        ¬¦  «         |
S  ||i |¤ŽS )Nr‡  r¨   rû  )"r7   rÒ   ÚampÚautocast_modeÚ_exit_autocastr÷  Úpopr¹   r\  Ú_enter_autocastr  r  Ú_set_grad_enabledr¢   Ú
_functorchÚpredispatchÚ_add_batch_dimÚ_remove_batch_dimÚ_vmap_increment_nestingÚ_vmap_decrement_nestingÚvmapÚlazy_load_decompositionsÚ
_make_dualÚ_unpack_dualÚ_jvp_increment_nestingÚ_jvp_decrement_nestingÚ_unwrap_for_gradÚ_enter_dual_levelÚ_exit_dual_levelrä  rˆ  Ú_jvp_predispatch_functionsÚ_DisableFuncTorchr«  )r  rC  ré  r  rt  Ú
enter_noder¥   rq   r  Ú	out_proxyr  s              rl   rï  z/PreDispatchTorchFunctionMode.__torch_function__2  sÆ  € ð �˜2ˆØÕDÐDÐDð
 •u”yÔ.Ô=Ð=Ð=Ø!Ô6×:Ò:Ñ<Ô<�
Ø"�}�Ø”;×*Ò*¨?¸DÀ$ÈÑKÔKˆDØ•u”yÔ.Ô>Ð>Ð>ØÔ)×0Ò0°Ñ6Ô6Ð6ØÝ”Ô*Ý”	Ô'Ô7Ý”	Ô'Ô6ðð ð ð
 $(�”	˜%Ñ ð •u”xÔ1Ð1Ð1à��dÐ%˜fÐ%Ð%Ð%ØˆKð ÝÔÔ(Ô7ÝÔÔ(Ô:ÝÔÔ(Ô@ÝÔÔ(Ô@ÝÔÔ!Ô:ÝÔÔ(Ô3ÝÔÔ(Ô5ÝÔÔ(Ô?ÝÔÔ(Ô?ÝÔÔ(Ô9ÝÔÔ(Ô:ÝÔÔ(Ô9ð
ð 
ð 
õ AÀÀtÄ{ÑSÔS‰MˆAˆw˜Øœ×0Ò0ØØØØñ	ô ˆIð �$˜Ð' Ð'Ð'ˆCð Õ1Ð1Ð1Ý”X×/Ò/Ñ1Ô1ð Yð YÝ% c¨9¸tÈDÌKÐXÑXÔXÐXðYð Yð Yñ Yô Yð Yð Yð Yð Yð Yð Yøøøð Yð Yð Yð Yøõ " # y¸4ÈÌÐTÑTÔTÐTØˆJØˆt�TÐ$˜VÐ$Ð$Ð$s   ÉJ Ê JÊJrð  rñ  )
rC  rø  ré  rê  r  ræ  rt  rë  r‚   rÇ   ró  rt   rn   rl   rõ  rõ  *  sP   € € € € € ð<ð <ð <ð <ð $&Ø+/ðC%ð C%ð C%ð C%ð C%ð C%ð C%rn   rõ  )Ú_side_effectful_functionsc                  ó°   ‡ — e Zd Zed,d„¦   «         Z	 	 	 	 d-d.ˆ fd„Ze	 	 d/d0d„¦   «         Zd1ˆ fd„Zd2ˆ fd&„Z	e
d,d'„¦   «         Zed3d)„¦   «         Zd4d+„Zˆ xZS )5r  r‚   r¦   c                ó   — dS rå   rt   r  s    rl   Úenable_tracingz%ProxyTorchDispatchMode.enable_tracingž  ó   € àˆtrn   FTNr¹   rº   Útracing_moder`   rå  rë  r	  rŽ   r�   r½   c                óŽ  •— |rt           j        j        j        nd }t	          ¦   «                              |¦  «         || _        || _        || _        || _	        || _
        t           j        j        j        | _        g | _        |pi | _        g | _        d| _        t%          ¦   «         | _        i | _        ddlm} |j        | _        d S )Nr   ©Úconfig)rÒ   r  ÚDispatchKeyÚPreDispatchrF  r   r¹   r  rå  rë  r	  r  r  Ú	_mode_keyÚenter_stackrŽ   Ú_decomposition_table_stackrÄ  rà  Ú_invoke_subgraph_namesÚ_invoke_subgraph_cacheÚtorch._inductorr  rÅ  )
r  r¹   r  rå  rë  r	  rŽ   Údkr  rY  s
            €rl   r   zProxyTorchDispatchMode.__init__¢  sÝ   ø€ ð 2>ÐG�UŒXÔ!Ô-Ð-À4ˆÝ‰Œ×Ò˜ÑÔÐØˆŒØ(ˆÔØ(ˆÔØ$8ˆÔ!Ø,HˆÔ)õ œÔ7Ô=ˆŒð ACˆÔàÐ% 2ð 	Ô ð
 ð 	Ô'ð #$ˆÔå03±´ˆÔ#ð ð 	Ô#ð 	+Ð*Ð*Ð*Ð*Ð*à-3Ô-KˆÔ$Ð$Ð$rn   rt   rC  r*   ré  rê  r  ræ  rt  rë  rÇ   c                óÞ   — t          |¦  «        5  |pi }|t          j        j        k    r ||i |¤Žcd d d ¦  «         S t	          | || j        ||¦  «        cd d d ¦  «         S # 1 swxY w Y   d S rh   )rä  ÚprimrW  rë   r  rå  rî  s        rl   Ú__torch_dispatch__z)ProxyTorchDispatchMode.__torch_dispatch__É  sý   € õ " $Ñ'Ô'ð 	Kð 	KØ�\˜rˆFà•t”{Ô*Ò*Ð*Ø�t˜TÐ, VÐ,Ð,ð		Kð 	Kð 	Kð 	Kñ 	Kô 	Kð 	Kð 	Kõ ˜d D¨$Ô*;¸TÀ6ÑJÔJð	Kð 	Kð 	Kð 	Kñ 	Kô 	Kð 	Kð 	Kð 	Kð 	Kð 	Kð 	Køøøð 	Kð 	Kð 	Kð 	Kð 	Kð 	Ks   �!A"¾A"Á"A&Á)A&r   c                ó¾   •— t          t          j        j        j        ¦  «        }| j                             |¦  «         t          ¦   «                              ¦   «         S rh   )	r?   rÒ   r  r  r  r  r  rF  Ú	__enter__)r  Úmaybe_prev_proxy_moderY  s     €rl   r)  z ProxyTorchDispatchMode.__enter__Ù  sG   ø€ å 1µ%´(Ô2PÔ2VÑ WÔ WÐØÔ×ÒÐ 5Ñ6Ô6Ð6Ý‰wŒw× Ò Ñ"Ô"Ð"rn   Úexc_typeútype[BaseException] | NoneÚ	exc_valueúBaseException | NoneÚ	tracebackútypes.TracebackType | Noneúbool | Nonec                ó¢   •— t          ¦   «                              |||¦  «        }| j                             ¦   «         }|�t	          |¦  «         |S rh   )rF  Ú__exit__r  rý  r>   )r  r+  r-  r/  ÚbÚmb_previous_proxy_moderY  s         €rl   r3  zProxyTorchDispatchMode.__exit__ß  sQ   ø€ õ ‰GŒG×Ò˜X y°)Ñ<Ô<ˆð "&Ô!1×!5Ò!5Ñ!7Ô!7ÐØ!Ð-ÝÐ-Ñ.Ô.Ð.àˆrn   c                ó   — dS rå   rt   )Úclss    rl   Úis_infra_modez$ProxyTorchDispatchMode.is_infra_modeî  r  rn   r�   c              #  óê   K  — |pi }| j                              | j        ¦  «         || _        	 |V — | j                              ¦   «         | _        d S # | j                              ¦   «         | _        w xY wrh   )r   r  rŽ   rý  )r  rŽ   r–   s      rl   r”   z,ProxyTorchDispatchMode.enable_decompositionsò  sƒ   è è € ð
 $Ð) rˆØÔ'×.Ò.¨tÔ/GÑHÔHÐHØ#(ˆÔ ð	MØˆKˆKˆKà'+Ô'F×'JÒ'JÑ'LÔ'LˆDÔ$Ð$Ð$ø tÔ'F×'JÒ'JÑ'LÔ'LˆDÔ$ÐLÐLÐLÐLs   ®A Á A2rç  c                ó>  — |t           j        u r^t          |d         t          ¦  «        r|d         dk    r|d         S t          |d         t          ¦  «        r|d         dk    r|d         S |rt	          d¦  «        ‚ ||i |¤Ž}t          | j        |||¦  «         |S )NrH   r   zExpected no keyword arguments)r5  Úmulrª   r�   r“   rD  r¹   )r  rC  ré  r  rt  r  s         rl   Ú__sym_dispatch__z'ProxyTorchDispatchMode.__sym_dispatch__ÿ  s°   € ð •8”<ÐÐÝ˜$˜qœ'¥3Ñ'Ô'ð ¨D°¬G°qªL¨LØ˜A”w�Ý˜D œG¥SÑ)Ô)ð ¨d°1¬g¸ªl¨lØ˜A”w�ð
 ð 	BÝ Ð!@ÑAÔAÐAØˆd�DÐ#˜FÐ#Ð#ˆÝ�d”k 4¨¨sÑ3Ô3Ð3Øˆ
rn   ©r‚   r¦   )FFTN)r¹   rº   r  r`   rå  r¦   rë  r¦   r	  r¦   rŽ   r�   r‚   r½   rñ  rò  )r‚   r   )r+  r,  r-  r.  r/  r0  r‚   r1  ©rŽ   r�   r‚   r�   )
rC  r*   ré  rê  r  ræ  rt  rç  r‚   rÇ   )r›   rœ   r�   Úpropertyr  r   rC   r'  r)  r3  Úclassmethodr8  r   r”   r<  r�  rŽ  s   @rl   r  r  œ  s<  ø€ € € € € àðð ð ñ „Xðð #Ø%*Ø-1ØNRð%Lð %Lð %Lð %Lð %Lð %Lð %LðN ð
 $&Ø+/ðKð Kð Kð Kñ „UðKð#ð #ð #ð #ð #ð #ðð ð ð ð ð ð ðð ð ñ „[ðð ð
Mð 
Mð 
Mñ „^ð
Mðð ð ð ð ð ð ð rn   c                óŠ   — t          |t          ¦  «        r-t          | t          | |||¬¦  «        }t	          || |¦  «         d S d S )N)rC  r  r  )rª   rU   r{  Ú_compute_proxyrÀ   )r¹   rC  r  r  Úp_out_thunks        rl   rD  rD    s[   € õ �#•|Ñ$Ô$ð 1ÝØ•N F°¸DÀcð
ñ 
ô 
ˆõ 	�s˜F KÑ0Ô0Ð0Ð0Ð0ð	1ð 1rn   c                óh  ‡ — t          |¦  «        dk    rEt          |d         t          t          f¦  «        r#t          ˆ fd„|d         D ¦   «         ¦  «        f}nt          ˆ fd„|D ¦   «         ¦  «        }‰                      d||i ¦  «        }t          j        |‰ ¦  «        }t          ||¦  «         |S )NrH   r   c              3  ó”   •K  — | ]B}t          |t          ¦  «        r't          |‰¦  «                             ¦   «         j        n|V — ŒCd S rh   ©rª   rU   ræ   r²  r¥   ©rw   rS  r¹   s     €rl   r‡   z!_compute_proxy.<locals>.<genexpr>-  si   øè è € ð ð ð õ " !¥\Ñ2Ô2ð•N 1 fÑ-Ô-×3Ò3Ñ5Ô5Ô:Ð:àð	ð ð ð ð ð rn   c              3  ó”   •K  — | ]B}t          |t          ¦  «        r't          |‰¦  «                             ¦   «         j        n|V — ŒCd S rh   rF  rG  s     €rl   r‡   z!_compute_proxy.<locals>.<genexpr>7  si   øè è € ð 
ð 
ð õ ˜a¥Ñ.Ô.ð•˜q &Ñ)Ô)×/Ò/Ñ1Ô1Ô6Ð6àð	
ð 
ð 
ð 
ð 
ð 
rn   r‡  )r/  rª   ri   rp   r\  r¦  r4   rq  )r¹   rC  r  r  Ún_argsÚn_outÚp_outs   `      rl   rB  rB  &  sæ   ø€ õ
 ˆ4�y„y�A‚~€~�* T¨!¤W­tµU¨mÑ<Ô<€~åð ð ð ð ð ˜aœðñ ô ñ ô ð	
ˆˆõ ð 
ð 
ð 
ð 
ð ð
ñ 
ô 
ñ 
ô 
ˆð ×Ò˜°°f¸bÑAÔA€EÝŒH�U˜FÑ#Ô#€EÝˆU�CÑÔÐØ€Lrn   c                  ó€   ‡ — e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   dZded<   dˆ fd„Zˆ xZS )r[   r<  rÔ   r=  rÙ   r>  r×   r  rÚ   r@  rÐ   r?  rá   rA  r7  rB  r8  Fr¦   rf  rÊ  úfx.graph.Graphr‚   r½   c                óh   •— t          ¦   «                              |¦  «         t          | ¦  «         d S rh   rE  )r  rÊ  rY  s     €rl   r   z _GraphAppendingTracerEx.__init__U  s/   ø€ Ý‰Œ×Ò˜ÑÔÐÝ˜TÑ"Ô"Ð"Ð"Ð"rn   )rÊ  rM  r‚   r½   )r›   rœ   r�   r¤   rf  r   r�  rŽ  s   @rl   r[   r[   H  s²   ø€ € € € € € ØDÐDÐDÑDØHÐHÐHÑHð -Ð,Ð,Ñ,Ø!Ð!Ð!Ñ!Ø8Ð8Ð8Ñ8ØBÐBÐBÑBØ(Ð(Ð(Ñ(Ø*Ð*Ð*Ñ*Ø!€OÐ!Ð!Ð!Ñ!ð#ð #ð #ð #ð #ð #ð #ð #ð #ð #rn   r[   c                  óT   ‡ — e Zd Z	 ddˆ fd„Zdˆ fd„Zdˆ fd„Zdˆ fd„Zdˆ fd„Zˆ xZS )rS   NÚmoduleúfx.GraphModuleÚ	new_graphúfx.GraphrŽ   r�   rt  rÇ   r‚   r½   c                óÐ   •—  t          ¦   «         j        |fi |¤Ž || _        t          | j        ¦  «        | _        |pi | _        t          | j        d| j        ¬¦  «        | _        d S )Nr]   )r  rŽ   )rF  r   rR  r[   r¹   rŽ   r  r•   )r  rP  rR  rŽ   rt  rY  s        €rl   r   z!DecompositionInterpreter.__init__]  sq   ø€ ð 	�‰ŒÔ˜Ð*Ð* 6Ð*Ð*Ð*Ø"ˆŒÝ-¨d¬nÑ=Ô=ˆŒà#6Ð#<¸"ˆÔ Ý*ØŒKØØ $Ô 8ð
ñ 
ô 
ˆŒ	ˆ	ˆ	rn   rw  rN  r  ræ  rç  c                óâ   •— t          ¦   «                              |||¦  «        }t          j        | j                             |¦  «        | j        ¦  «        }t          ||d | j        ¬¦  «         |S ©Nrû  )rF  ro  r¦  r4   rR  r¹   r«  ©r  rw  r  rt  r  r»   rY  s         €rl   ro  z$DecompositionInterpreter.placeholderp  sa   ø€ õ ‰gŒg×!Ò! &¨$°Ñ7Ô7ˆÝ”˜œ×3Ò3°FÑ;Ô;¸T¼[ÑIÔIˆÝ˜#˜u¨t¸D¼KÐHÑHÔHÐHàˆ
rn   c                óâ   •— t          ¦   «                              |||¦  «        }t          j        | j                             |¦  «        | j        ¦  «        }t          ||d | j        ¬¦  «         |S rV  )rF  rV  r¦  r4   rR  r¹   r«  rW  s         €rl   rV  z!DecompositionInterpreter.get_attr}  sa   ø€ õ ‰gŒg×Ò˜v t¨VÑ4Ô4ˆÝ”˜œ×0Ò0°Ñ8Ô8¸$¼+ÑFÔFˆÝ˜#˜u¨t¸D¼KÐHÑHÔHÐHØˆ
rn   c                óÂ   •‡ ‡— t          ¦   «                              |||¦  «        }d
d„Šdˆˆ fd	„}‰ j                             t          j        ||¦  «        ¦  «         |S )Nry   r¼   r‚   rT  c                ó   — | j         j        S rh   )r»   r¥   r  s    rl   Úget_proxy_nodez7DecompositionInterpreter.output.<locals>.get_proxy_node“  s   € Ø”7”<Ðrn   rž  r   úTensor | fx.Nodec                ó2   •— t          | ‰j        | ‰¦  «        S rh   )ræ   r¹   )rž  r[  r  s    €€rl   Úunwrapz/DecompositionInterpreter.output.<locals>.unwrap–  s   ø€ Ý! ! T¤[°!°^ÑDÔDÐDrn   )ry   r¼   r‚   rT  )rž  r   r‚   r\  )rF  r€  rR  ru   Útree_map)r  rw  r  rt  r  r^  r[  rY  s   `     @€rl   r€  zDecompositionInterpreter.output‹  s‡   øøø€ õ ‰gŒg�nŠn˜V T¨6Ñ2Ô2ˆð	 ð 	 ð 	 ð 	 ð	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Œ×Ò�fœo¨f°cÑ:Ô:Ñ;Ô;Ð;Øˆ
rn   c                óx   •— | j         5   t          ¦   «         j        |i |¤Žcd d d ¦  «         S # 1 swxY w Y   d S rh   )r•   rF  Úrun)r  r  rt  rY  s      €rl   ra  zDecompositionInterpreter.runœ  s‰   ø€ ð ŒYð 	0ð 	0Ø•5‘7”7”; Ð/¨Ð/Ð/ð	0ð 	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð 	0ð 	0s   ‰/¯3¶3rh   )
rP  rQ  rR  rS  rŽ   r�   rt  rÇ   r‚   r½   )rw  rN  r  ræ  rt  rç  r‚   rÇ   )r  rÇ   rt  rÇ   r‚   rÇ   )	r›   rœ   r�   r   ro  rV  r€  ra  r�  rŽ  s   @rl   rS   rS   \  sÁ   ø€ € € € € ð
 OSð	
ð 
ð 
ð 
ð 
ð 
ð 
ð&
ð 
ð 
ð 
ð 
ð 
ð	ð 	ð 	ð 	ð 	ð 	ðð ð ð ð ð ð"0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0rn   rS   c                  óD   ‡ — e Zd Zdˆ fd„Zedd„¦   «         Zdˆ fd„Zˆ xZS )Ú_SelectiveDecomposeInterpreterrP  rQ  Úshould_decomposeúCallable[[fx.Node], bool]rŽ   r�   rt  rÇ   r‚   r½   c                óX   •—  t          ¦   «         j        |fi |¤Ž || _        || _        dS )z�
        For all nodes in `module`, selectively decompose if is `should_decompose`,
        following the given `decomposition_table`.
        N)rF  r   rd  rŽ   )r  rP  rd  rŽ   rt  rY  s        €rl   r   z'_SelectiveDecomposeInterpreter.__init__¤  s:   ø€ ð 	�‰ŒÔ˜Ð*Ð* 6Ð*Ð*Ð*Ø 0ˆÔØ#6ˆÔ Ð Ð rn   Úgmc                óT  — | j         j        D ]�}|j        dk    r€t          |j        t
          ¦  «        rfg }|j        D ]H}t          |t          j        ¦  «        rt          j
        |||fi |¤Ž}n|}|                     |¦  «         ŒIt          |¦  «        |_        ŒŽt          | ||fi |¤ŽS )aâ  
        Recursively wrap gm and its sub graph modules. Specifically, HOP takes
        sub graph module as args. We may not want to decompose all nodes within
        these sub graph modules. So we also need to wrap these sub graph modules.
        As a result:
        - if should_decompose(hop) is True, we decompose all nodes within the hop.
        - if should_decompose(hop) is False, we check each node within the hop
            and decide whether decompose or not.
        r‡  )rÊ  rË  r:  rª   rw  r)   r  r¦  r3   rc  Úrecursive_wrapr  rp   )rg  rd  rŽ   rt  r¥   Únew_argsr†   Únew_args           rl   ri  z-_SelectiveDecomposeInterpreter.recursive_wrap³  sã   € ð  ”H”Nð 	,ð 	,ˆDØŒw˜/Ò)Ð)­jØ”Õ0ñ/ô /Ð)ð �Øœ9ð -ð -�CÝ! #¥r¤~Ñ6Ô6ð &Ý"@Ô"OØÐ!1Ð3Fð#ð #ØJPð#ð #˜˜ð #&˜Ø—O’O GÑ,Ô,Ð,Ð,Ý! (™OœO�”	øå-ØÐ Ð"5ð
ð 
Ø9?ð
ð 
ð 	
rn   r³  r±  r   c                ó  •— |                       |¦  «        rNt          | j        ¦  «        5  t          ¦   «                              |¦  «        }d d d ¦  «         n# 1 swxY w Y   n!t          ¦   «                              |¦  «        }|S rh   )rd  r—   rŽ   rF  Úrun_node)r  r³  rk  rY  s      €rl   rm  z'_SelectiveDecomposeInterpreter.run_nodeÖ  sµ   ø€ Ø× Ò  Ñ#Ô#ð 	)Ý˜4Ô3Ñ4Ô4ð -ð -Ý™œ×)Ò)¨!Ñ,Ô,�ð-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -øõ ‘W”W×%Ò% aÑ(Ô(ˆFØˆs   «"AÁAÁ A)
rP  rQ  rd  re  rŽ   r�   rt  rÇ   r‚   r½   )
rg  rQ  rd  re  rŽ   r�   rt  rÇ   r‚   rc  )r³  r±  r‚   r   )r›   rœ   r�   r   Ústaticmethodri  rm  r�  rŽ  s   @rl   rc  rc  £  s|   ø€ € € € € ð7ð 7ð 7ð 7ð 7ð 7ð ð 
ð  
ð  
ñ „\ð 
ðDð ð ð ð ð ð ð ð ð rn   rc  Újoint_gmrQ  Údecompositionrd  úCallable[..., bool]Útrace_joint_graphc               óZ   ‡ ‡‡‡— |r
d
ˆˆˆ ˆfd„}ndˆˆ ˆfd„} t          |i ¬	¦  «        ‰Ž S )zARetrace a joint graph module and selectively apply decomposition.Úprimalsú	list[Any]Útangentsr‚   r   c                óJ   •— t                               ‰‰‰¦  «        j        ‰Ž S rh   ©rc  ri  ra  )rt  rv  r  rp  ro  rd  s     €€€€rl   Úwrap_fnz$selective_decompose.<locals>.wrap_fnì  ó-   ø€ Ý1×@Ò@ØÐ*¨Mñô ä�4ðð rn   r  c                 óJ   •— t                               ‰‰‰¦  «        j        | Ž S rh   rx  )r  rp  ro  rd  s    €€€rl   ry  z$selective_decompose.<locals>.wrap_fnò  rz  rn   )rŽ   )rt  ru  rv  ru  r‚   r   ©r  r   r‚   r   )rR   )ro  rp  rd  rr  r  ry  s   ``` ` rl   rT   rT   ß  s†   øøøø€ ð ð ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð
 4�7�7°Ð3Ñ3Ô3°TÐ:Ð:rn   úCallable[..., R]ú0tuple[Callable[[list[object]], R], list[object]]c                óN   ‡ ‡— t          j        ||f¦  «        \  }Šdˆ ˆfd„}||fS )NÚ	flat_argsúlist[object]r‚   re   c                óD   •— t          j        | ‰¦  «        \  }} ‰|i |¤ŽS rh   )ru   r  )r€  Úfn_argsÚ	fn_kwargsrC  r  s      €€rl   rÖ  z-wrapper_and_args_for_make_fx.<locals>.wrapped	  s/   ø€ Ý#Ô2°9¸dÑCÔCÑˆ�Øˆt�WÐ* 	Ð*Ð*Ð*rn   )r€  r�  r‚   re   )ru   rü  )rC  r  rt  r€  rÖ  r  s   `    @rl   Úwrapper_and_args_for_make_fxr…  ú  sN   øø€ õ
 Ô)¨4°¨.Ñ9Ô9�O€Iˆtð+ð +ð +ð +ð +ð +ð +ð �IÐÐrn   c               #  ó¼   K  — t          j        ¦   «         } t          j        d¦  «         	 d V — t          j        | ¦  «         d S # t          j        | ¦  «         w xY w©NF)rÒ   Úis_autocast_cache_enabledÚset_autocast_cache_enabled)Ú	old_values    rl   Údisable_autocast_cacher‹  	  sa   è è € åÔ/Ñ1Ô1€IÝ	Ô$ UÑ+Ô+Ð+ð4ØˆˆˆåÔ(¨Ñ3Ô3Ð3Ð3Ð3ø�Ô(¨Ñ3Ô3Ð3Ð3øøøs   «A ÁAc                  ó   — e Zd ZdS )Ú#_ModuleNotInstalledAsSubmoduleErrorNrš   rt   rn   rl   r�  r�  	  rž   rn   r�  c                  ó   — e Zd Zd	d„ZdS )
Ú
_AttrProxyÚbaser;   ÚpathrN  r‚   r½   c                ó   — d S rh   rt   )r  r�  r‘  s      rl   Úreset_proxy_mappingz_AttrProxy.reset_proxy_mapping	  s   € Øˆrn   N)r�  r;   r‘  rN  r‚   r½   )r›   rœ   r�   r“  rt   rn   rl   r�  r�  	  s(   € € € € € ðð ð ð ð ð rn   r�  c                  ó`   ‡ — e Zd ZdZd$ˆ fd„Zd%d
„Zd&ˆ fd„Zd'ˆ fd„Zd(d„Zd)d!„Z	d*ˆ fd#„Z
ˆ xZS )+Ú_ModuleStackTracera»  Customized version of PythonKeyTracer that retains module stack
    information in node.meta["nn_module_stack"].

    FX symbolic trace actually does this already, but it relies on `self.root`
    being the actual module being traced. Since make_fx traces a lambda of our
    creation, things don't work properly.

    So for this version we hold onto a reference to the original module
    (scope_root) and use that to match the path. Also when we see,
            A
           / \
          B   C
           \ /
            D
    we want to record the path as A.B.D by recording only one path.
    See Note [Preserving the nn module stack metadata during export non-strict mode]  # noqa: W605
    Ú
scope_rootr3   r‚   r½   c                ó  •‡‡— t          ¦   «                              ¦   «          t          j        j         | _        d| _        || _        d| _        i | _	        | j         
                    d¬¦  «        D ]G\  }}|| j	        v r/t                               d| j	        |         |¦  «         d| _        Œ=|| j	        |<   ŒHt          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        d| _        t%          t&          ¦  «        | _        | j         
                    d¬¦  «        D ]2\  }}| j        t+          |¦  «                                      |¦  «         Œ3| Š G ˆˆfd„dt.          ¦  «        Š‰| _        d S )NTF)Úremove_duplicatez<Shared module found between %s and %s, AttrProxy is enabled.r   c                  ól   •‡ — e Zd Zdˆfd„Zdˆˆ ˆfd
„Zdˆfd„Zdˆˆ ˆfd„Zedˆˆfd„¦   «         Zˆ xZ	S )ú._ModuleStackTracer.__init__.<locals>.AttrProxyr�  úModule | _AttrProxyr‘  rN  r‚   r½   c                ó²  •— t          |t          ¦  «        r|                     ¦   «         }t          |t          ¦  «        st	          dt          |¦  «        › �¦  «        ‚t          |j        j        | j        |j        fi ¦  «        | _        |j        | _        |j        j	        | j        _	        |j        j
        | j        _
        |‰j        | <   |‰j        | <   d S )NúExpected Module, got )rª   r�  Úget_baser;   r“   rÏ   rY  r›   Ú__dict__rœ   r�   Úproxy_pathsÚproxy_modules)r  r�  r‘  r¹   s      €rl   r   z7_ModuleStackTracer.__init__.<locals>.AttrProxy.__init__P	  sÇ   ø€ Ý˜d¥JÑ/Ô/ð +ØŸ=š=™?œ?�Då! $­Ñ/Ô/ð OÝ(Ð)MÅÀdÁÄÐ)MÐ)MÑNÔNÐNõ "&Ø”NÔ+Ø”^ T¤^Ð4Øñ"ô "�”ð
 !%¤�”Ø,0¬NÔ,E�”Ô)Ø.2¬nÔ.I�”Ô+ð ,0�Ô" 4Ñ(Ø-1�Ô$ TÑ*Ð*Ð*rn   rõ  Ú	AttrProxyc                ó  •— t          | t          ¦  «        st          dt          | ¦  «        › �¦  «        ‚t	          ¦   «                              |¦  «        }t          |t          ¦  «        s|S  ‰|‰j        |          dz   |z   ¦  «        S )Nr�  ú.)rª   r;   r“   rÏ   rF  Ú__getattr__r   )r  rõ  rO  r¢  rY  r¹   s      €€€rl   r¥  z:_ModuleStackTracer.__init__.<locals>.AttrProxy.__getattr__h	  s‡   ø€ Ý! $­Ñ/Ô/ð OÝ(Ð)MÅÀdÁÄÐ)MÐ)MÑNÔNÐNõ !™7œ7×.Ò.¨tÑ4Ô4�Ý! (­FÑ3Ô3ð $Ø#�Oà �y ¨6Ô+=¸dÔ+CÀcÑ+IÈDÑ+PÑQÔQÐQrn   r;   c                ó   •— ‰j         |          S rh   )r¡  rè  s    €rl   rž  z7_ModuleStackTracer.__init__.<locals>.AttrProxy.get_baset	  s   ø€ ØÔ+¨DÔ1Ð1rn   r£  úint | slicec                óœ  •— t          |t          ¦  «        �rt          | t          j        j        ¦  «        rrt          j                             t          t          | j                             ¦   «         ¦  «        |         ¦  «        ¦  «        } ‰|‰j	        |          › d|› �¦  «        S t          | t          j        j
        ¦  «        ret          j         
                    t          | j                             ¦   «         ¦  «        |         ¦  «        } ‰|‰j	        |          › d|› �¦  «        S t          ¦   «                              |¦  «        S ©Nr¤  )rª   ÚslicerÒ   rX  Ú
Sequentialr   ri   Ú_modulesr3  r   Ú
ModuleListÚvaluesrF  r&  )r  r£  r  r¢  rY  r¹   s      €€€rl   r&  z:_ModuleStackTracer.__init__.<locals>.AttrProxy.__getitem__w	  s  ø€ Ý˜c¥5Ñ)Ô)ñ SÝ! $­¬Ô(;Ñ<Ô<ð Så#œh×1Ò1Ý'­¨T¬]×-@Ò-@Ñ-BÔ-BÑ(CÔ(CÀCÔ(HÑIÔIñô ˜ð  )˜y¨°Ô1CÀDÔ1IÐ.QÐ.QÈCÐ.QÐ.QÑRÔRÐRÝ# D­%¬(Ô*=Ñ>Ô>ð Så#œh×1Ò1µ$°t´}×7KÒ7KÑ7MÔ7MÑ2NÔ2NÈsÔ2SÑTÔT˜à(˜y¨°Ô1CÀDÔ1IÐ.QÐ.QÈCÐ.QÐ.QÑRÔRÐRå‘w”w×*Ò*¨3Ñ/Ô/Ð/rn   údict[str, AttrProxy]c                óü   •‡ — d‰ j         vrt          d¦  «        ‚‰ j         d         }t          |t          ¦  «        st          dt	          |¦  «        › �¦  «        ‚ˆˆ ˆfd„|                     ¦   «         D ¦   «         S )Nr¬  z_modules not in __dict__zExpected dict, got c           
     ót   •— i | ]4\  }}||�* ‰|‰j         ‰         dz   t          |¦  «        z   ¦  «        n|“Œ5S r©  )r   rN  )rw   r¨  r®   r¢  r  r¹   s      €€€rl   rT  zK_ModuleStackTracer.__init__.<locals>.AttrProxy._modules.<locals>.<dictcomp>�	  sd   ø€ ð ð ð ñ #˜˜Uð à Ð,ð "˜	 %¨Ô);¸DÔ)AÀCÑ)GÍ#ÈcÉ(Ì(Ñ)RÑSÔSÐSà"ð	ð ð rn   )rŸ  r“   rª   rZ  rÏ   r3  )r  Ú
submodulesr¢  r¹   s   ` €€rl   r¬  z7_ModuleStackTracer.__init__.<locals>.AttrProxy._modulesˆ	  s¡   øø€ à T¤]Ð2Ð2Ý(Ð)CÑDÔDÐDØ!œ]¨:Ô6�
Ý! *­dÑ3Ô3ð SÝ(Ð)Q½tÀJÑ?OÔ?OÐ)QÐ)QÑRÔRÐRðð ð ð ð ð ð '1×&6Ò&6Ñ&8Ô&8ðñ ô ð rn   )r�  r›  r‘  rN  r‚   r½   )rõ  rN  r‚   r¢  )r‚   r;   )r£  r§  r‚   r¢  )r‚   r¯  )
r›   rœ   r�   r   r¥  rž  r&  r?  r¬  r�  )rY  r¢  r¹   s   @€€rl   r¢  rš  O	  sã   øø€ € € € € ð2ð 2ð 2ð 2ð 2ð 2ð0
Rð 
Rð 
Rð 
Rð 
Rð 
Rð 
Rð 
Rð2ð 2ð 2ð 2ð 2ð 2ð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð" ðð ð ð ð ð ñ ŒXðð ð ð ð rn   r¢  )rF  r   r¦  r  Údo_not_emit_stack_tracesÚrecord_stack_tracesÚ!_record_forward_stack_traces_onlyr–  Úenable_attr_proxyÚsubmodule_pathsÚnamed_modulesrÌ   Úinfor   r   Úattr_proxy_mapr¡  Úcounterr   ri   Úmodule_id_cacherÎ   r  r�  Ú
proxy_type)r  r–  rõ  rG  Úmodr¢  r¹   rY  s        @@€rl   r   z_ModuleStackTracer.__init__/	  s§  øøø€ Ý‰Œ×ÒÑÔÐÝ')¤yÔ'IÐ#IˆÔ Ø15ˆÔ.Ø$ˆŒØ!&ˆÔØ!ˆÔØ”×4Ò4ÀeÐ4ÑLÔLð 		/ð 		/‰GˆD�!Ø�DÔ(Ð(Ð(Ý—’ØRØÔ(¨Ô+Øñô ð ð
 *.�Ô&Ð&à*.�Ô$ QÑ'Ð'å?PÑ?RÔ?RˆÔÝEVÑEXÔEXˆÔÝDUÑDWÔDWˆÔØˆŒå*­4Ñ0Ô0ˆÔØœ×6Ò6ÈÐ6ÑNÔNð 	7ð 	7‰IˆD�#ØÔ ¥ C¡¤Ô)×0Ò0°Ñ6Ô6Ð6Ð6ð
 ˆðH	ð H	ð H	ð H	ð H	ð H	ð H	ð H	�
ñ H	ô H	ð H	ðT $ˆŒˆˆrn   r¾  r;   rN  c                ó¼   — || j         u rdS t          |t          ¦  «        r| j        |         S 	 t	          j        | |¦  «        S # t          $ r}t          |‚d}~ww xY w)z£
        Use tracked access path during tracing instead of the default BFS behavior.
        Still use all the possible module paths to verify the result.
        Ú N)r–  rª   r�  r   r5   Úpath_of_moduleÚ	NameErrorr�  )r  r¾  rž  s      rl   rÁ  z!_ModuleStackTracer.path_of_module›	  su   € ð
 �$”/Ð!Ð!Ø�2å�c�:Ñ&Ô&ð 	)ØÔ# CÔ(Ð(ð	=ÝÔ(¨¨sÑ3Ô3Ð3øÝð 	=ð 	=ð 	=Ý5¸1Ð<øøøøð	=øøøs   ¯A Á
AÁAÁArM  rO  rÇ   rP  rQ  c                ó�  •— t          |t          ¦  «        r!t          |t          j        ¦  «        s| j        s#t          ¦   «                              |||¦  «        S t          |t          ¦  «        r|S || j        vr|  	                    ||¦  «        | j        |<   n!| j        |          
                    ||¦  «         | j        |         S rh   )rª   r;   r¦  r3   r¶  rF  r4  r�  rº  r½  r“  )r  rM  rO  rP  rY  s       €rl   r4  z_ModuleStackTracer.getattr«	  sÉ   ø€ õ ˜8¥VÑ,Ô,ð	Jå˜(¥B¤NÑ3Ô3ð	Jð Ô)ð	Jõ
 ‘7”7—?’? 4¨Ð3HÑIÔIÐIÝ�h¥
Ñ+Ô+ð 	ØˆOð ˜4Ô.Ð.Ð.Ø,0¯OªO¸HÀdÑ,KÔ,KˆDÔ Ñ)Ð)àÔ Ô)×=Ò=¸hÈÑMÔMÐMØÔ" 8Ô,Ð,rn   rZ  r­  r®  rë  rS  c                ó   •— t          ¦   «                              ||¦  «        }t                               ¦   «          | j                             ¦   «         D ]&\  }}|j        j        t          t          |¦  «        <   Œ'g }| j	         
                    ¦   «         D ]%\  }}|| j        v r|                     ||f¦  «         Œ&dd„}	|D ]9\  }
} |	| j	        |
¦  «         | j        |         }t          || j	        |
¦  «         Œ:|S )	Nr¸   r;   rw  rN  r‚   r¦   c                óÜ  — |                      d¦  «        }|d d…         |d         }}t          | t          ¦  «        st          dt	          | ¦  «        › �¦  «        ‚| }|D ]D}t          ||¦  «        s dS t          ||¦  «        }t          |t          t          f¦  «        s dS ŒEt          ||¦  «        sdS t          t          ||¦  «        t          ¦  «        sdS t          ||¦  «         dS )Nr¤  éÿÿÿÿr�  FT)	Úsplitrª   r;   r“   rÏ   r©   r4  r�  Údelattr)r¸   rw  Úatomsr‘  Útarget_submodr¾  r  s          rl   Ú_delete_proxy_attrz4_ModuleStackTracer.trace.<locals>._delete_proxy_attrÞ	  s  € ð —L’L Ñ%Ô%ˆEØ"'¨¨¨¤*¨e°B¬i�-ˆDÝ˜c¥6Ñ*Ô*ð JÝ$Ð%H½TÀ#¹Y¼YÐ%HÐ%HÑIÔIÐIØˆCð ð !ð !�Ý˜s DÑ)Ô)ð !Ø ˜5˜5å˜c 4Ñ(Ô(�å! #­
µFÐ';Ñ<Ô<ð !Ø ˜5˜5ð!õ ˜3 Ñ.Ô.ð Ø�uõ �g c¨=Ñ9Ô9½:ÑFÔFð Ø�uå�C˜Ñ'Ô'Ð'Ø�4rn   )r¸   r;   rw  rN  r‚   r¦   )rF  r¹  r¯   ÚclearrÐ   r3  r»   r¥   rÎ   rZ  r¸  r¡  r  r6   )r  rZ  r®  r  r¨  r¨   Ú!proxy_module_names_to_be_replacedrõ  rP  rË  Úproxy_module_nameÚproxy_moduleÚactual_modulerY  s                €rl   r¹  z_ModuleStackTracer.trace¾	  s.  ø€ õ ‰gŒg�mŠm˜D -Ñ0Ô0ˆõ 	0×5Ò5Ñ7Ô7Ð7àÔ+×1Ò1Ñ3Ô3ð 	Nð 	N‰HˆC�Ø?B¼y¼~Õ3µB°s±G´GÑ<Ð<ð KMÐ)Ø œI×3Ò3Ñ5Ô5ð 	Ið 	I‰LˆD�&Ø˜Ô+Ð+Ð+Ø1×8Ò8¸$À¸ÑHÔHÐHøð	ð 	ð 	ð 	ð< 0Qð 	Fð 	FÑ+Ð˜|ØÐ˜tœyÐ*;Ñ<Ô<Ð<Ø Ô.¨|Ô<ˆMÝ˜¨¬	Ð3DÑEÔEÐEÐEàˆ
rn   rG  rH  r  r  ræ  rt  rç  c                óä   — ddl m} t          ||t          f¦  «        r ||i |¤ŽS 	 t	          j        | ||||¦  «        S # t          $ r& t                               d|¦  «          ||i |¤ŽcY S w xY w)zlPythonKeyTracer overrides call_module to avoid the scope handling,
        but we actually want it.
        r   )ÚOptimizedModulezØUnable to find the path of the module %s. This might be because the module was not properly registered as a submodule, which is not good practice. We will trace through the module without recording stack information.)	Útorch._dynamorÒ  rª   r3   r5   rL  r�  rÌ   rÍ   )r  rG  rH  r  rt  rÒ  s         rl   rL  z_ModuleStackTracer.call_module
  s»   € ð 	2Ð1Ð1Ð1Ð1Ð1õ �a˜/­;Ð7Ñ8Ô8ð 	,Ø�7˜DÐ+ FÐ+Ð+Ð+ð
	,ÝÔ% d¨A¨w¸¸fÑEÔEÐEøÝ2ð 	,ð 	,ð 	,Ý�IŠIðJð ñô ð ð �7˜DÐ+ FÐ+Ð+Ð+Ð+Ð+ð	,øøøs   §? ¿-A/Á.A/Úmodule_qualified_namer¦   c                ó   — dS r‡  rt   )r  rG  rÔ  s      rl   Úis_leaf_modulez!_ModuleStackTracer.is_leaf_module%
  s   € Øˆurn   rT  c                ó$  •—  t          ¦   «         j        |i |¤Ž}|j        dvrš|j                             d¦  «        €!| j                             ¦   «         |j        d<   |j        d                              ¦   «         D ]?\  }\  }}t          |t          ¦  «        r"||j
        dz   |j        z   f|j        d         |<   Œ@|j        dk    rG| j        x}�>d|j        vr5|j        › d| j        |         › �|j        j        › d|j        › �f|j        d<   |S )aF  
        Create node and add on metadata.
        Add nn_module_stack here instead of TracerBase,
        since calls to make_fx() might not want to record module stack metadata.
        Add torch_fn by looking at torch_fn_metadata and torch_fn_counts.
        Add stack_trace by filtering out forward() stack frames.
        r  Únn_module_stackNr¤  r‡  Útorch_fnrq   )rF  r\  r:  r¢   rØ   Úmodule_stackÚcopyr3  rª   rÏ   rœ   r�   r7  r›   r8  rY  )	r  r  rt  r¥   r¨  ÚfqnÚmod_clsrÙ  rY  s	           €rl   r\  z_ModuleStackTracer.create_node(
  sA  ø€ ð #�u‰wŒwÔ" DÐ3¨FÐ3Ð3ˆð Œ7Ð3Ð3Ð3ØŒy�}Š}Ð.Ñ/Ô/Ð7Ø/3Ô/@×/EÒ/EÑ/GÔ/G�”	Ð+Ñ,à'+¤yÐ1BÔ'C×'IÒ'IÑ'KÔ'Kð ð Ñ#�‘^�c˜7Ý˜g¥tÑ,Ô,ð àØÔ*¨SÑ0°7Ô3GÑGð9�D”IÐ/Ô0°Ñ5øð ŒG�Ò&Ð&Ø!Ô3Ð3�Ð@Ø $¤)Ð+Ð+ð Ô$ÐGÐG tÔ';¸HÔ'EÐGÐGàÔ%Ô.ÐDÐD°Ô1BÐDÐDð	%ˆDŒI�jÑ!ð ˆrn   )r–  r3   r‚   r½   )r¾  r;   r‚   rN  rŒ  )rZ  r­  r®  rë  r‚   rS  )
rG  r;   rH  r  r  ræ  rt  rç  r‚   r½   )rG  r;   rÔ  rN  r‚   r¦   )r  rÇ   rt  rÇ   r‚   rT  )r›   rœ   r�   r2  r   rÁ  r4  r¹  rL  rÖ  r\  r�  rŽ  s   @rl   r•  r•  	  sì   ø€ € € € € ðð ð$j$ð j$ð j$ð j$ð j$ð j$ðX=ð =ð =ð =ð -ð -ð -ð -ð -ð -ð&Cð Cð Cð Cð Cð CðJ ,ð  ,ð  ,ð  ,ðDð ð ð ð#ð #ð #ð #ð #ð #ð #ð #ð #ð #rn   r•  c                  ó¦   — e Zd Z	 	 	 	 d<d=d„Zd>d„Zd?d#„Zed@d)„¦   «         ZdAd,„ZedBd-„¦   «         Z	dCd/„Z
dDd2„ZdEd4„ZdFd5„Z	 	 dGdHd8„ZdDd9„ZdId;„ZdS )JÚ_MakefxTracerFNrŽ   r�   r  r`   Ú_allow_non_fake_inputsr¦   rå  Úrecord_module_stackrë  r	  r´  Úparent_tracerú_MakefxTracer | NonerÄ  Ú_disable_torch_fn_metadata_moder‚   r½   c                ó  — t          |pi ¦  «        | _        | j                             t          j        j        j        j        t          j        j	        j        ¦  «         || _
        || _        || _        || _        || _        || _        d | _        t#          ¦   «         | _        t#          ¦   «         | _        d | _        t#          ¦   «         | _        t#          ¦   «         | _        || _        |	| _        |
| _        || _        d S rh   )rZ  rŽ   Ú
setdefaultrÒ   r‰  rŠ  r�  rë   Ú_decompÚdecompositionsr  rà  rå  rá  rë  r	  rb  r   rl  Úproxy_function_modeÚ	fx_tracerÚpython_dispatcher_modeÚtorch_fn_metadata_moder´  râ  rÄ  rä  )r  rŽ   r  rà  rå  rá  rë  r	  r´  râ  rÄ  rä  s               rl   r   z_MakefxTracer.__init__O
  sø   € õ  JNØÐ% 2ñJ
ô J
ˆÔ ð 	Ô ×+Ò+ÝŒIŒNÔ$Ô,­e¬mÔ.JÔ.Tñ	
ô 	
ð 	
ð +7ˆÔØ,BˆÔ#Ø".ˆÔØ)<ˆÔ Ø*>ˆÔ!Ø2NˆÔ)ð 8<ˆÔÝFQÁmÄmˆŒå‰MŒMð 	Ô ð 26ˆŒÝ?J¹}¼}ˆÔ#å‰MŒMð 	Ô#ð $7ˆÔ Ø3@ˆÔØ#6ˆÔ Ø/NˆÔ,Ð,Ð,rn   ru  c                óN   — | j         | j        | j        | j        | j        | j        gS rh   ©rb  rl  ré  rê  rë  rì  r  s    rl   Ú_checkpoint_modesz_MakefxTracer._checkpoint_modes
  s.   € àÔ!ØŒOØÔ$ØŒNØÔ'ØÔ'ð
ð 	
rn   Úprev_fake_tensor_modeúFakeTensorMode | NoneÚprev_proxy_modeú*nullcontext[None] | ProxyTorchDispatchModeÚprev_proxy_function_modeú0nullcontext[None] | PreDispatchTorchFunctionModeÚprev_fx_tracerúPythonKeyTracer | NoneÚprev_python_dispatcher_modeúnullcontext[None] | AnyÚprev_torch_fn_metadata_modeú-nullcontext[None] | TorchFunctionMetadataModec                óZ   — || _         || _        || _        || _        || _        || _        d S rh   rî  )r  rð  rò  rô  rö  rø  rú  s          rl   Ú_restore_modesz_MakefxTracer._restore_modes‰
  s8   € ð !6ˆÔØ)ˆŒØ#;ˆÔ Ø'ˆŒØ&AˆÔ#Ø&AˆÔ#Ð#Ð#rn   rr  r  r  ræ  r´   c              #  ó^  K  — |                       ¦   «         }	 ddlm} t          |d¦  «        r#| j        r|j        }t          |¦  «        | _        nNt          ¦   «         | _        | j	        ot          j        j         | j        _	        | j        j	        rd| j        _        | j        dk    r„dd l}|j        j                             |¦  «        }|€Wdd lmc m} |                     d¬¦  «        5  t-          d| j         |¦   «         d¬	¦  «        }d d d ¦  «         n# 1 swxY w Y   || _        nÈ| j        d
k    r›dd l}|j        j                             |¦  «        }|€X |¦   «         }	dd lmc m} |                     d¬¦  «        5  t-          d| j        |	¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |j        €t5          d¦  «        ‚|| _        n"| j        dk    st5          d| j        › �¦  «        ‚|                      | j        ¦  «         d V —  | j        |Ž  d S #  | j        |Ž  w xY w)NrH   )ÚShapeEnvÚ	_orig_modTr^   r   F)Ú(fake_tensor_allow_unsafe_data_ptr_access)rV  Úallow_non_fake_inputsÚ	shape_envÚstatic_shapesr_   )rV  r  r  ú2shape_env should be set if tracing with 'symbolic'r]   zUnexpected tracing type: )rï  rµ  rÿ  r©   rá  r   r•  rê  rP   r´  r¦  r  r³  rµ  r  rÓ  Ú_dynamor/  rU  Útorch._functorch.configr   Úpatchr-   rà  rb  r  r“   Ú_construct_modes_with_fx_tracerrý  )
r  rr  r  Ú
prev_modesrÿ  r–  rÒ   rb  Ú_configr  s
             rl   Ú_init_modes_from_inputsz%_MakefxTracer._init_modes_from_inputs™
  s4  è è € ð ×+Ò+Ñ-Ô-ˆ
ð<	-à1Ð1Ð1Ð1Ð1Ð1å�q˜+Ñ&Ô&ð L¨4Ô+Cð LØœ[�
õ "4°JÑ!?Ô!?�”�å!0Ñ!2Ô!2�”àÔ,ÐWµR´YÔ5WÐ1Wð ”Ô2ð ”>Ô5ð LØGK�D”NÔDàÔ  FÒ*Ð*Ø$Ð$Ð$Ð$à#(¤=Ô#6×#GÒ#GÈÑ#MÔ#MÐ Ø#Ð+Ø=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=à ŸšÐPU˜ÑVÔVð ð Ý+9Ø37Ø26Ô2MØ&. h¡j¤jØ*.ð	,ñ ,ô ,Ð(ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð )9�Ô%Ð%ØÔ" jÒ0Ð0Ø$Ð$Ð$Ð$à#(¤=Ô#6×#GÒ#GÈÑ#MÔ#MÐ Ø#Ð+Ø ( ¡
¤
�IØ=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=à ŸšÐPU˜ÑVÔVð ð Ý+9Ø38Ø26Ô2MØ&/ð,ñ ,ô ,Ð(ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð $Ô-Ð5Ý(ØLñô ð ð )9�Ô%Ð%àÔ(¨FÒ2Ð2Ý(ØG°DÔ4EÐGÐGñô ð ð ×0Ò0°´Ñ@Ô@Ð@ØˆEˆEˆEàˆDÔ Ð,Ð,Ð,Ð,øÐˆDÔ Ð,Ð,Ð,øøøsV   ˜CH  Ã.!DÄH  ÄDÄH  Ä"DÄ#A$H  ÆF+ÆH  Æ+F/Æ/H  Æ2F/Æ3A!H  È H,rê  rº   c                ó:  — t          || j        | j        | j        | j        | j        ¬¦  «        | _        | j        rt          |¦  «        | _        | j        dk    s| j        rt          ¦   «         | _
        | j        st          |¦  «        | _        | j        |_        d S )N)rŽ   rå  rë  r	  r_   )r  r  rŽ   rå  rë  r	  rl  rõ  ré  r    rë  rä  ræ  rì  rÄ  )r  rê  s     rl   r	  z-_MakefxTracer._construct_modes_with_fx_tracerÜ
  sª   € Ý0ØØÔØ $Ô 8ØÔ*Ø!%Ô!:Ø)-Ô)Jð
ñ 
ô 
ˆŒð Ôð 	OÝ'CÀIÑ'NÔ'NˆDÔ$ð Ô 
Ò*Ð*¨dÔ.?Ð*Ý*BÑ*DÔ*DˆDÔ'àÔ3ð 	OÝ*CÀIÑ*NÔ*NˆDÔ'Ø(,Ô(@ˆ	Ô%Ð%Ð%rn   c              #  ó  K  — |                       ¦   «         }	 |j        | _        dd„}|j        €t          d¦  «        ‚ ||j        ¦  «        | _        |                      | j        ¦  «         d V —  | j        |Ž  d S #  | j        |Ž  w xY w)Nrâ  rº   r‚   rP   c                óÞ   — t          | ¦  «        t          u rt          ¦   «         S t          | ¦  «        t          u rt          | j        ¦  «        S t	          dt          | ¦  «        › d�¦  «        ‚)NzUnexpected tracer type: r¤  )rÏ   rP   r•  r–  r	  ©râ  s    rl   Ú_create_sub_fx_tracerzD_MakefxTracer._init_modes_from_parent.<locals>._create_sub_fx_tracerý
  sn   € Ý˜Ñ&Ô&­/Ð9Ð9Ý*Ñ,Ô,Ð,Ý˜-Ñ(Ô(Õ,>Ð>Ð>Ý-¨mÔ.FÑGÔGÐGå&ØIµ4¸Ñ3FÔ3FÐIÐIÐIñô ð rn   z*parent_tracer.fx_tracer should not be None)râ  rº   r‚   rP   )rï  rb  rê  r“   r	  rý  )r  râ  r
  r  s       rl   Ú_init_modes_from_parentz%_MakefxTracer._init_modes_from_parentò
  s¸   è è € ð ×+Ò+Ñ-Ô-ˆ
ð	-Ø$1Ô$BˆDÔ!ðð ð ð ð Ô&Ð.Ý$Ð%QÑRÔRÐRØ2Ð2°=Ô3JÑKÔKˆDŒNØ×0Ò0°´Ñ@Ô@Ð@ØˆEˆEˆEàˆDÔ Ð,Ð,Ð,Ð,øÐˆDÔ Ð,Ð,Ð,øøøs   ˜AA= Á=B	rb   c                ó\   ‡ ‡— ‰ j         dk    r|S dŠdˆˆ fd„}t          j        ||¦  «        S )Nr]   r   ry   rÇ   r‚   c                óö  •— ddl m} ‰j        €t          d¦  «        ‚ |d‰› �¦  «        }t	          | t
          ¦  «        r!‰dz  Š‰j                             | |¬¦  «        S t          | ¦  «        t          u rh‰j	        dk    r]‰j        j
        €t          d¦  «        ‚‰j        j
                             ‰j        j
                             | |d ¬	¦  «        | |¬
¦  «        S t	          | t          j        ¦  «        st          | ¦  «        rHt!          t          | ¦  «        ¦  «        r| S t          j        j                             ‰j        | ¦  «        S t	          | t(          ¦  «        rt          d| › d�¦  «        ‚| S )Nr   )ÚConstantSourceú#fake_tensor_mode should not be NoneÚinputrH   )Úsourcer_   r  )Úpositive)Úhintr  zScriptObject z. has been fakified. Cannot wrap_fake it again.)Útorch._dynamo.sourcer  rb  r“   rª   r   Úfrom_tensorrÏ   r�   r  r  Úcreate_symintnodeÚcreate_symbolrÒ   rÓ   r$   r%   Ú_libraryÚfake_class_registryÚmaybe_to_fake_objr!   )ry   r  r  Ú	arg_countr  s      €€rl   Úinner_wrap_fakez<_MakefxTracer._convert_args_to_fake.<locals>.inner_wrap_fake  s¸  ø€ ð <Ð;Ð;Ð;Ð;Ð;àÔ$Ð,Ý$Ð%JÑKÔKÐKØ#�^Ð$7¨IÐ$7Ð$7Ñ8Ô8ˆFÝ˜!�VÑ$Ô$ð Ø˜Q‘�	ØÔ,×8Ò8¸À6Ð8ÑJÔJÐJå�a‘”�C�� DÔ$5¸Ò$CÐ$CØÔ(Ô2Ð:Ý(ØLñô ð ð Ô,Ô6×HÒHØÔ)Ô3×AÒAØ˜6¨Dð Bñ ô ð Ø!ð Iñ ô ð õ ˜A�uÔ1Ñ2Ô2ð µoÀaÑ6HÔ6Hð Ý'Ý˜‘G”Gñô ð ð �HÝ”~Ô9×KÒKØÔ)¨1ñô ð õ ˜!Õ-Ñ.Ô.ð Ý$ØU AÐUÐUÐUñô ð ð ˆHrn   )ry   rÇ   r‚   rÇ   )r  ru   r_  )r  r  r#  r"  s   `  @rl   Ú_convert_args_to_fakez#_MakefxTracer._convert_args_to_fake  sT   øø€ ØÔ Ò&Ð&ØˆKàˆ	ð(	ð (	ð (	ð (	ð (	ð (	ð (	õT Œ˜°Ñ5Ô5Ð5rn   rÇ   r3   c           	     ó~  ‡ ‡
— dd l Š
t          j        ˆ
fd„|¦  «        }‰                      |¦  «        }|}t	          t          j        |¦  «        d¦  «        r+t          j        |¦  «        j        j        t
          j	        z  rt          |t          |¦  «        ¦  «        }t          j        t          ‰ j        ¦  «        }t!          ¦   «         5 }‰ j        r|                     ‰ j        ¦  «         |                     ‰ j        ¦  «         |                     ‰ j        ¦  «         |                     ‰ j        ¦  «         |                     |¦  «         |                     t-          ¦   «         ¦  «         |                     t/          ‰ ¦  «        ¦  «         ‰ j        €t3          d¦  «        ‚	 t5          t7          ||‰ j        ‰ j        ¦  «        ‰ j        t;          |¦  «        ¬¦  «        }n%# t<          $ r t?          dd„ ˆ fd„¬	¦  «         ‚ w xY w	 d d d ¦  «         n# 1 swxY w Y   ‰                       ¦   «         rO‰
j!         "                    |¦  «        x}r3|j#        �,dd
l$m%}	  |	||j#        d¦  «         | &                    ¦   «          ‰ j'        dk    r'‰ j        €t3          d¦  «        ‚‰ j        j#        |_#        |S )Nr   c                ó&   •— ‰j         j        j        S rh   )r¦  Ú_symbolic_traceÚPH)rq   rÒ   s    €rl   rm   z,_MakefxTracer._trace_inner.<locals>.<lambda>I  s   ø€ ¨¬Ô(@Ô(C€ rn   Ú__code__zfx_tracer should not be None)r¹   r®  Úartifactc                 ó   — dddœS )NÚmake_fx_fail_partialÚstring)rõ  Úencodingrt   rt   rn   rl   rm   z,_MakefxTracer._trace_inner.<locals>.<lambda>s  s   € Ø 6Ø$,ð)ð )€ rn   c                 óT   •— ‰ j         j                             dddd¬¦  «        j        S )Nr  T)Úroot_moduleÚverboseÚinclude_strideÚinclude_device)rê  rÊ  Úpython_codeÚsrcr  s   €rl   rm   z,_MakefxTracer._trace_inner.<locals>.<lambda>w  s6   ø€  t¤~Ô';×'GÒ'GØ$*Ø $Ø'+Ø'+ð	 (Hñ (ô (ô
 ð rn   )Úmetadata_fnÚ
payload_fn)Úinsert_deferred_runtime_assertsÚreenter_make_fxr_   r  )(rÓ  ru   r_  r$  r©   Úinspectr^  r)  Úco_flagsÚ
CO_VARARGSr�   r/  rÛ   rÜ   r  rl  r   rb  Úenter_contextrë  ré  rì  r‹  Ú_set_make_fx_tracerrê  r“   rQ   rÙ  rå  rp   Ú	Exceptionr(   Úis_hop_subgraph_tracerÚ_guardsrU  r  Útorch.fx.passes.runtime_assertr8  Ú	recompiler  )r  rr  r  ÚphsrC  rl  Ústackr  rI  r8  rÒ   s   `         @rl   Ú_trace_innerz_MakefxTracer._trace_innerA  s)  øø€ ð 	ÐÐÐåŒoÐCÐCÐCÐCÀTÑJÔJˆà×)Ò)¨$Ñ/Ô/ˆð $%ˆå�œ qÑ)Ô)¨:Ñ6Ô6ð	/åŒ~˜aÑ Ô Ô)Ô2µWÔ5GÑGð	/õ " !¥S¨¡X¤XÑ.Ô.ˆDõ .4¬[Ý" D¤Oñ.
ô .
ˆ
õ ‰[Œ[ð  	˜EØÔ$ð ;Ø×#Ò# DÔ$9Ñ:Ô:Ð:Ø×Ò Ô ;Ñ<Ô<Ð<Ø×Ò Ô 8Ñ9Ô9Ð9Ø×Ò Ô ;Ñ<Ô<Ð<Ø×Ò 
Ñ+Ô+Ð+Ø×ÒÕ 6Ñ 8Ô 8Ñ9Ô9Ð9Ø×ÒÕ 3°DÑ 9Ô 9Ñ:Ô:Ð:àŒ~Ð%Ý$Ð%CÑDÔDÐDðÝ"Ý˜T 4¨¬¸Ô9JÑKÔKØœ>Ý"'¨¡*¤*ðñ ô ��øõ
 ð ð ð Ý Øð!ð !ð ð  ð  ð  ðñ ô ð ð ðøøøð ð 	ð  	ð  	ñ  	ô  	ð  	ð  	ð  	ð  	ð  	ð  	øøøð  	ð  	ð  	ð  	ðF ×'Ò'Ñ)Ô)ð	à#œm×<Ò<¸TÑBÔBÐB�ð	ð Ô#Ð/àVÐVÐVÐVÐVÐVà+Ð+¨A¨yÔ/BÐDUÑVÔVÐVØ�KŠK‰MŒMˆMàÔ 
Ò*Ð*ØÔ$Ð,Ý$Ð%JÑKÔKÐKØÔ/Ô9ˆAŒKØˆs+   ÃCHÆ,>G+Ç*HÇ+"HÈHÈH!È$H!rQ  c                ó~   — |                       ||¦  «        5   | j        |g|¢R Ž cd d d ¦  «         S # 1 swxY w Y   d S rh   )r  rF  )r  rr  r  s      rl   r¹  z_MakefxTracer.trace�  s”   € Ø×)Ò)¨!¨TÑ2Ô2ð 	/ð 	/Ø$�4Ô$ QÐ.¨Ð.Ð.Ð.ð	/ð 	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð 	/ð 	/s   —2²6¹6c                ó   — | j         d uS rh   r  r  s    rl   r@  z$_MakefxTracer.is_hop_subgraph_tracer”  s   € ØÔ!¨Ð-Ð-rn   r]   Údecomp_tablec           
     ót   — t          |�|n| j        || j        | j        | j        | j        | j        | ¬¦  «        S )Nr  )rß  rŽ   rà  rå  rá  rë  r	  )r  rI  r  s      rl   Ú_make_sub_tracerz_MakefxTracer._make_sub_tracer—  sN   € õ
 Ø(Ð4ˆLˆL¸$Ô:RØØÔ'ØÔØÔ$ØÔ%ØÔ-Øð	
ñ 	
ô 	
ð 		
rn   c                ó¤   — |                       ¦   «         }|                     | ¦  «        5   |j        |g|¢R Ž cd d d ¦  «         S # 1 swxY w Y   d S rh   )rK  r  rF  )r  rr  r  Ú
sub_tracers       rl   Útrace_subgraphz_MakefxTracer.trace_subgraph§  s£   € Ø×*Ò*Ñ,Ô,ˆ
Ø×/Ò/°Ñ5Ô5ð 	5ð 	5Ø*�:Ô*¨1Ð4¨tÐ4Ð4Ð4ð	5ð 	5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5ð 	5ð 	5s   ªAÁA	ÁA	ú'Mapping[OpOverload, Callable[..., Any]]c                ó  — t          |t          ¦  «        st          dt          |¦  «        › �¦  «        ‚|                      |¬¦  «        }|                     | ¦  «        5   |j        |g|¢R Ž cd d d ¦  «         S # 1 swxY w Y   d S )NzExpected Mapping, got )rI  )rª   r   r“   rÏ   rK  r  rF  )r  rr  rI  r  rM  s        rl   Útrace_subgraph_custom_decompz*_MakefxTracer.trace_subgraph_custom_decomp¬  sÜ   € õ ˜,­Ñ0Ô0ð 	PÝ Ð!N½$¸|Ñ:LÔ:LÐ!NÐ!NÑOÔOÐOØ×*Ò*¸Ð*ÑEÔEˆ
Ø×/Ò/°Ñ5Ô5ð 	5ð 	5Ø*�:Ô*¨1Ð4¨tÐ4Ð4Ð4ð	5ð 	5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5ð 	5ð 	5s   Á A;Á;A?ÂA?)FNFF)rŽ   r�   r  r`   rà  r¦   rå  r¦   rá  r¦   rë  r¦   r	  r¦   r´  r¦   râ  rã  rÄ  r¦   rä  r¦   r‚   r½   )r‚   ru  )rð  rñ  rò  ró  rô  rõ  rö  r÷  rø  rù  rú  rû  r‚   r½   )rr  r  r  ræ  r‚   r´   )rê  rº   r‚   r½   )râ  rß  r‚   r´   )r  rb   r‚   rb   )rr  r  r  rÇ   r‚   r3   )rr  r  r  rÇ   r‚   rQ  r=  )Nr]   )rI  r�   r  r`   r‚   rß  )rr  r  rI  rO  r  rÇ   r‚   r3   )r›   rœ   r�   r   rï  rý  r   r  r	  r  r$  rF  r¹  r@  rK  rN  rQ  rt   rn   rl   rß  rß  N
  sk  € € € € € ð %*Ø.2Ø$)Ø05ð.Oð .Oð .Oð .Oð .Oð`
ð 
ð 
ð 
ðBð Bð Bð Bð  ð@-ð @-ð @-ñ „^ð@-ðDAð Að Að Að, ð-ð -ð -ñ „^ð-ð806ð 06ð 06ð 06ðdMð Mð Mð Mð^/ð /ð /ð /ð.ð .ð .ð .ð
 HLØ%+ð
ð 
ð 
ð 
ð 
ð 5ð 5ð 5ð 5ð

5ð 
5ð 
5ð 
5ð 
5ð 
5rn   rß  rã  Ú_CURRENT_MAKE_FX_TRACERc              #  ó8   K  — t           }	 | a d V — |a d S # |a w xY wrh   )rR  )r¹   Úprev_tracers     rl   r>  r>  ¼  s?   è è € õ *€Kð.Ø"(ÐØˆˆˆà"-ÐÐÐø +ÐÐ-Ð-Ð-Ð-s   ‹ •r]   )rå  rá  rë  r	  r´  rÄ  rä  r  rà  rá  rë  r	  r´  rÄ  rä  úCallable[..., GraphModule]c               óÖ   ‡ ‡— |dvrt          d|› �¦  «        ‚ddlm} t          ||||||||p|j        j        dk    |	|
¬¦
  «
        Št          j        ‰ ¦  «        dˆ ˆfd„¦   «         }|S )a=  
    Given a function f, return a new function which when executed with valid
    arguments to f, returns an FX GraphModule representing the set of operations that
    were executed during the course of execution.

    If record_stack_traces is True, the stack trace will be preserved on node.meta["stack_trace"]
    r\   z-tracing_mode must be real/fake/symbolic, got r   r  rH   )r´  rÄ  rä  r  rÇ   r‚   r3   c                 ó    •—  ‰j         ‰g| ¢R Ž S rh   )r¹  )r  rr  Úmake_fx_tracers    €€rl   rÖ  zmake_fx.<locals>.wrappedò  s   ø€ à#ˆ~Ô# AÐ-¨Ð-Ð-Ð-Ð-rn   )r  rÇ   r‚   r3   )r“   r#  r  rß  r¹  Úprovenance_tracking_levelr!  r×  )rr  rŽ   r  rà  rå  rá  rë  r	  r´  rÄ  rä  r  rÖ  rX  s   `            @rl   rR   rR   Ç  sÈ   øø€ ð, Ð7Ð7Ð7ÝØJ¸LÐJÐJñ
ô 
ð 	
ð 'Ð&Ð&Ð&Ð&Ð&å"ØØØØØØØ$Ø/ð 7ØŒ<Ô1°QÒ6Ø/Ø(Gðñ ô €Nõ „_�QÑÔð.ð .ð .ð .ð .ð .ñ Ôð.ð €Nrn   úlist[TorchDispatchMode]c                 óH   — t           j        j                             ¦   «         S rh   )rÒ   r/  Ú_python_dispatchÚ _get_current_dispatch_mode_stackrt   rn   rl   Úget_torch_dispatch_modesr^  ù  s   € ÝŒ;Ô'×HÒHÑJÔJÐJrn   úProxyTorchDispatchMode | Nonec                 ó   — t          ¦   «         S rh   )rW   rt   rn   rl   rV   rV   ÿ  s   € ÝÑÔÐrn   c                 ó  — t           j                             t           j        j        j        ¦  «        } t           j                             t           j        j        j        ¦  «        }| �|�t          d| › d|› �¦  «        ‚| p|S )z–
    Current the currently active proxy tracing mode, or None if
    we are not currently tracing.  This includes pre-dispatch proxy
    tracing.
    Nzpre_dispatch_mode=z, mode=)rÒ   rÆ  Ú_get_dispatch_mode_pre_dispatchr  r  r  r  r“   )Úpre_dispatch_moder•   s     rl   rW   rW     s{   € õ œ
×BÒBÝŒÔ&Ô,ñô Ðõ Œ8×&Ò&¥u¤xÔ'EÔ'KÑLÔL€DØÐ%¨¨ÝÐRÐ2CÐRÐRÈDÐRÐRÑSÔSÐSØÐ$ Ð$rn   c                óÄ   — t          ¦   «         }|st          d¦  «        ‚t          ¦   «         5  g }|                     | |||¦  «        cddd¦  «         S # 1 swxY w Y   dS )z¢
    Call into the currently active proxy tracing mode to do a
    SymInt/SymFloat/SymBool dispatch trace on a function that operates on
    these arguments.
    r’   N)rW   r“   r‡  r<  )rC  r  rt  r•   ré  s        rl   rX   rX     sÈ   € õ ÑÔ€DØð >ÝÐ<Ñ=Ô=Ð=õ 
%Ñ	&Ô	&ð @ð @àˆØ×$Ò$ T¨5°$¸Ñ?Ô?ð@ð @ð @ð @ñ @ô @ð @ð @ð @ð @ð @ð @øøøð @ð @ð @ð @ð @ð @s   ®AÁAÁAú-Generator[ProxyTorchDispatchMode, None, None]c                 óH   — t          t          j        j        j        ¦  «        S rh   )r=   rÒ   r  r  r  rt   rn   rl   r‡  r‡  '  s   € å�uœxÔ=ÔCÑDÔDÐDrn   r:  c                ó
  ‡— ddl m} | j        }‰|v rk|                     ddˆfd„¦  «        rt          S | 5  | xj        dz  c_         |‰         |i |¤Ž}| xj        dz  c_        |cd d d ¦  «         S # 1 swxY w Y   t          S )Nr   )ÚCompilerBisectorÚaot_eager_decomp_partitionrp  c                 ó"   •— t          ‰ ¦  «        S rh   )Úrepr)r:  s   €rl   rm   z%maybe_handle_decomp.<locals>.<lambda>7  s   ø€ Å4ÈÁ8Ä8€ rn   rH   )Ú!torch._inductor.compiler_bisectorrh  rŽ   Údisable_subsystemrÿ  rÄ  )rl  r:  r  rt  rh  rI  r  s    `     rl   r   r   ,  s  ø€ ð CÐBÐBÐBÐBÐBàÔ1€LØ	ˆ\ÐÐØ×-Ò-Ø(¨/Ð;KÐ;KÐ;KÐ;Kñ
ô 
ð 	"õ "Ð!àð 	ð 	ØÐ$Ô$¨Ñ)Ð$Ô$Ø"�,˜rÔ" DÐ3¨FÐ3Ð3ˆCØÐ$Ô$¨Ñ)Ð$Ô$Øð		ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ Ðs   ¶0A3Á3A7Á:A7c                ó°   — t          | ||¦  «        \  }}t          ¦   «         5   t          |||¬¦  «        |¦  «        }ddd¦  «         n# 1 swxY w Y   |S )a  A helper function used to get the GraphModule for the given func.

    It's expected to be used in the ProxyTensor tracing context.
    It detaches the args and kwargs from the current tracer so that the trace of
    the current graph module can be created without any side-effects.
    )rŽ   r  N)r…  r‡  rR   )rC  r  rt  r  rŽ   rÖ  Úall_argsrg  s           rl   Úget_isolated_graphmodulerp  D  s¯   € õ 5°T¸4ÀÑHÔHÑ€GˆXå	$Ñ	&Ô	&ð ð ð
�WØÐ)<È<ð
ñ 
ô 
à
ñô ˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð €Is   £AÁAÁAr  c                ó(  — ddl m} t          j                             t          j        j        j        ¦  «        }|rR|j        rM ||j        | ¦  «        x}r<t          |t          ¦  «        st          d|› �¦  «        ‚||j        j        d<   dS dS dS dS )zOA helper function for setting up unbacked_bindings on the destination FX graph.rH   )Úcompute_unbacked_bindingsrÉ   Úunbacked_bindingsN)rµ  rr  rÒ   r  r  r  ÚFAKEr  rª   r4   r“   r¥   r¢   )r  r  rr  rI  Úsymbol_to_paths        rl   rª  rª  Z  sÉ   € à:Ð:Ð:Ð:Ð:Ð:õ ”×+Ò+­E¬HÔ,JÔ,OÑPÔP€IØð F�YÔ(ð FØ6Ð6°yÔ7JÈCÑPÔPÐPˆ>ð 	FÝ˜i­Ñ/Ô/ð IÝ$Ð%G¸IÐ%GÐ%GÑHÔHÐHØ7EˆIŒNÔÐ 3Ñ4Ð4Ð4ð	Fð Fð Fð Fð	Fð 	Frn   )r~   r   r€   r�   r‚   r   r>  )r¥   r¡   r‚   r¦   r=  )r‚   r´   )r¸   r   r¹   rº   r»   r¼   r‚   r½   )r¸   rÁ   r¹   rº   r»   r4   r‚   r½   )r¸   rŸ   r¹   rº   r»   rÄ   r‚   r½   )r¸   rÆ   r¹   rº   r»   rÇ   r‚   r½   )r¸   r   r¹   rº   r‚   r¦   )r¸   r   r¹   rº   r‚   r¼   )r¸   r   r¹   rº   rë   rc   r‚   rì   )
r¸   r   r¹   rº   rë   rc   rï   rð   r‚   rñ   )r¸   rõ   r¹   rº   r‚   r4   )r¸   rõ   r¹   rº   rë   rc   r‚   r÷   )
r¸   rõ   r¹   rº   rë   rc   rï   rù   r‚   rñ   )r¸   rŸ   r¹   rº   r‚   rÄ   )r¸   rŸ   r¹   rº   rë   rb   r‚   rü   )r¸   r&   r¹   rº   rë   rb   r‚   rþ   )
r¸   rŸ   r¹   rº   rë   rc   rï   r   r‚   rñ   )
r¸   r  r¹   rº   rë   rÇ   rï   r  r‚   rÇ   )r  r  r‚   r  r|  )r‚   r*  rh   )r¹   rº   rÞ   r<  r  r=  r‚   r>  )F)r¨   r   rF  r¦   r‚   rG  )r¨   rL  rF  r¦   r‚   rL  )r¹   rº   rd  r¦   r‚   r´   )r»   r4   r¨   rL  r‚   r4   )
r¹   rº   rr  r   r  rs  rt  ru  r‚   rv  )
r|  r   r»   r4   r}  rG  r¹   rº   r‚   r½   )
rš  rb   r›  r˜  r}  rœ  r¹   rº   r‚   rb   )r¹   rº   r‚   r­  )r¹   rº   r  r   r‚   r¶  )r¹   rº   r  rõ   r‚   rº  )r¹   rº   r  rŸ   r‚   r¼  )r¹   rº   r  r&   r‚   r¾  )r¹   rº   r  r  r‚   rÇ   )rC  rÇ   rl  r  r‚   r½   )rÔ  rÕ  r¹   rº   r‚   rÖ  )rl  r  rC  r*   rå  r¦   r  ræ  rt  rç  r‚   rÇ   )r¹   r4  r‚   r½   )rw  r   r�  r�  r‚   r¦   )r   r¡  r‚   r¢  )rZ  r­  r¹   r5   r®  r¯  r‚   r3   )
rr  r¾  r¿  rÀ  r¹   rº   rå  r¦   r‚   r   )rC  rÛ  r‚   r´   )
r¹   rº   rC  r*   r  ræ  r  rÇ   r‚   r½   )
r¹   rº   rC  r*   r  ræ  r  rŸ   r‚   r4   )ro  rQ  r  rÇ   rp  r�   rd  rq  rr  r¦   r‚   rQ  )rC  r}  r  ræ  rt  rç  r‚   r~  )r¹   rß  r‚   r´   )Nr]   F)rr  r  rŽ   r�   r  r`   rà  r¦   rå  r¦   rá  r¦   rë  r¦   r	  r¦   r´  r¦   rÄ  r¦   rä  r¦   r‚   rU  )r‚   rZ  )r‚   r_  )rC  r   r  rs  rt  ru  r‚   re   )r‚   re  )
rl  r  r:  r*   r  ræ  rt  rç  r‚   rÇ   )r]   N)rC  r  r  ræ  rt  rç  r  r`   rŽ   r�   r‚   r3   )r  rÇ   r  r˜  r‚   r½   (  Ú
__future__r   Úcontextvarsr!  r:  Úloggingr5  Ú	threadingrÛ   r`  Úcollectionsr   r   Úcollections.abcr   r   r   r	   Ú
contextlibr
   r   r   r   Údataclassesr   r   r   r   r   r   r   r   r   r   r   r   r   r   Úweakrefr   rÒ   Ú
torch._opsÚtorch.fxr¦  Útorch.fx.tracebackr/  rÞ  Útorch.utils._pytreer/  Ú_pytreeru   r   r   r   Útorch._dispatch.pythonr    Ú"torch._library.fake_class_registryr!   Útorch._library.opaque_objectr"   r#   r$   r%   r&   r'   Útorch._loggingr(   r)   r*   Útorch._subclasses.fake_implsr+   Útorch._subclasses.fake_tensorr,   r-   r.   r/   r0   Ú#torch._subclasses.functional_tensorr1   Útorch._subclasses.meta_utilsr2   r3   r4   r5   Útorch.fx.graph_moduler6   Útorch.fx.noder7   r8   r9   Útorch.fx.passes.shape_propr:   Útorch.nnr;   r¨  r<   Útorch.utils._python_dispatchr=   r>   r?   r@   rA   rB   Útorch.utils._statsrC   Útorch.utils._thunkrD   Útorch.utils.weakrE   rF   rG   Ú_backward_staterI   Úsym_noderJ   ré  rK   rÝ   Útorch._higher_order_ops.utilsrL   Útorch.typesrM   rN   rO   Ú__all__rº   r`   r¤   rÓ   rÑ   rõ   r‰  rŠ  r&  Ú	getLoggerr›   rÌ   Ú_loggingÚgetArtifactLoggerrþ  rø  rb   rc   rd   re   rf   Úregister_pytree_nodeÚSizerp   Ú!_pytree_subclasses_that_lose_infor�   r—   rÇ   Ú
proxy_slotr™   Ú
no_defaultrU   rŸ   r¡   r«   Úlocalr­   r²   r¯   r³   r·   rÀ   rè   rÄ   ré   ræ   r  r%  r)  Úcacher;  r  rK  ri   rZ  rN  r�   r@  r¦   rL  rQ  rh  rZ   rY   rq  r{  r—  r˜  r™  r«  r¼   rµ  r¹  rX  rY  rê  rÓ  rä  r  r  rà   r:  rP   rˆ  r¬  Ú_disable_dynamorQ   rÙ  Ú
ContextVarrÚ  rä  ræ  Ú)_temp_remove_metadata_torch_function_moderõ  Ú-_temp_remove_pre_dispatch_torch_function_modeÚ	frozensetr   r  r  r	  r
  r  r  r  r  r  r  Úupdater  rD  rB  r»   ÚGraphAppendingTracerr[   ÚInterpreterrS   rc  rT   r…  r‹  rÂ  r�  r�  r•  rß  rR  r>  rR   r^  rV   rW   rX   r‡  r   rp  rª  rt   rn   rl   ú<module>r«     s  ðð #Ð "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WØ !Ð !Ð !Ð !Ð !Ð !ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð DÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ %Ð %Ð %Ð %Ð %Ð %à €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ,Ð +Ð +Ð +Ð +Ð +Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4ðð ð ð ð ð ð ð ð ð ð ð ð ð ð AÐ @Ð @Ð @Ð @Ð @Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø .Ð .Ð .Ð .Ð .Ð .ðð ð ð ð ð ð ð ð ð ð
 @Ð ?Ð ?Ð ?Ð ?Ð ?Ø Ð Ð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð %Ð $Ð $Ð $Ð $Ð $Ø $Ð $Ð $Ð $Ð $Ð $Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ Wà *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð ð ð EØ€L€L€LØ.Ð.Ð.Ð.Ð.Ð.à€L€L€LàEÐEÐEÐEÐEÐEØDÐDÐDÐDÐDÐDÐDÐDÐDÐDðð ð €ð ÐAÔB€Ø!Ð"<Ô=€Ð =Ð =Ð =Ñ =àÔ&Ð(8Ð9Ð ØÔ)Ð,<Ñ<Ð à„y„~€Ø„y„~€à€gÔ˜Ñ!Ô!€Ø”n×6Ò6°xÐARÑSÔSÐ àÐ à€GˆC�L„L€Ø€GˆC�L„L€Ø€Yˆt�_„_€Ø€GˆC�L„L€Ø€l�5ÑÔ€ð €Ô Ø	„JØÐØÐðð ð &ð
ñ 
ô 
ð 
ð" &+¤Z°Ð$7Ð !ñBð Bð Bð Bð ñð ð ñ „ðð ˆV‰XŒX€
ð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð ˆZ‰\Œ\€
à /Ð /Ð /Ð /Ð /Ð /Ð /Ð /ðð ð ð ð ˆxñ ô ð ñMð Mð Mð Mðð ð ð ð  )¤/ñ ô ð ð &AÐ%@Ñ%BÔ%BÐ "ð EGÐ 'Ð FÐ FÐ FÑ Fñ4ð 4ð 4ð 4ð ñ)>ð )>ð )>ñ „ð)>ðX 
Ù WÐ WÐ Wñ 
„Ø Wð 
ñð ð ñ 
„ðð
 
ñð ð ñ 
„ðñ
Qð Qð Qð QñhDð Dð Dð Dð # 5œ\€Ð )Ð )Ð )Ñ )Ø$)Ð Ð )Ð )Ð )Ñ )ð 
ñð ð ñ 
„ðð 
ñð ð ñ 
„ðð 
ñð ð ñ 
„ðð 
ñð ð ñ 
„ðð 
ñð ð ñ 
„ðð 
ñð ð ñ 
„ðð 
ñð ð ñ 
„ðð 
ñð ð ñ 
„ðð 
ñ%ð %ð %ñ 
„ð%ð 
ñð ð ñ 
„ðð !Ø$/ Kð	4ñ 4ð 4ð 4ð 4ñvð ð ð ñ01ð 1ð 1ð 1ñ1ð 1ð 1ð 1ð „ñð ð ñ „ðð@ EIñdñ dð dð dð dñNñ ð ð ð ð 	Øñàñð ñð ñ	ð
 ÐÔñð Ð"Ô#ñ$ð ˆ3Ð!Ð!Ô"ñ#ð ñð 
ñ	
ð ñ
ð ñð ð ð ð ñ ñ '(ñ '(ð '(ð '(ð '(ðT à,0ð%ð %ñ %ð %ð %ñ „ð%ð$ ñð ð ñ „ðð ñð ð ñ „ðñ0ð ð ð ñ ð  ð  ð  ñGBð GBð GBð GBðT Ø	ˆ8�OÔ$ g¨f°oÐ.EÔ&FÐFô€ð Ø
ˆHÐ%Ô&¨°Ð8HÐ0HÔ(IÐIô€ñ
eð eð eð eðP ðð ð ð ð ñ ô ñ „ðñ
ð ð ð ð, 
Ù UÐ UÐ Uñ 
„Ø Uð 
ñ'ð 'ð 'ñ 
„ð'ð
 
ñ&ð &ð &ñ 
„ð&ð
 
ñ-ð -ð -ñ 
„ð-ñ
(ð (ð (ð (ð ˜œÔ+¨ZÐ8€ñ=ð =ð =ð =ñ@(Kð (Kð (Kð (KñVMð Mð Mð Mð`'ð 'ð 'ð 'ð 'ñ 'ô 'ð 'ð> ðð ð ð ð ñ ô ñ „ðñ
#ð #ð #ð #ð vð vð vð vð v�fñ vô vð vðv LPñ,ñ ,ð ,ð ,ð ,ñ^$ð $ð $ð $ðN Ôð 04ñ)Nñ )Nð )Nð )Nñ Ôð)NñX.ð .ð .ð .ðd 8N°{Ô7MØ˜Tð8ñ 8ô 8€ð ð ð ñ ð
 ñð ð ñ „ðð%ð %ð %ð %ð %Ð 1ñ %ô %ð %ð2 -SÐ,RØñ-ô -Ð )ðK%ð K%ð K%ð K%ð K%Ð#4ñ K%ô K%ð K%ð\ 1WÐ0VØ ñ1ô 1Ð -ð '˜YàÔÔ$Ô/ØÔÔ$Ô1ØÔÔ$Ô;ØÔÔ$Ô;ØÔÔ$Ô5ØÔÔ$Ô6ØÔÔ$Ô5ðñ
ô 
Ð ð  4Ð 3Ð 3Ð 3Ð 3Ð 3ð !Ð Ô  àÔÔ$Ô;ØÔÔ$Ô;ØÔÔ$Ô6ØÔÔ$Ô5ð	ñô ð ðyð yð yð yð yÐ.ñ yô yð yñx1ð 1ð 1ð 1ñð ð ð ðD#ð #ð #ð #ð #˜bœhÔ;ñ #ô #ð #ð(D0ð D0ð D0ð D0ð D0˜rœ~ñ D0ô D0ð D0ðN9ð 9ð 9ð 9ð 9 R¤^ñ 9ô 9ð 9ñx;ð ;ð ;ð ;ñ6ð ð ð ð ñ4ð 4ð 4ñ „ð4ð	ð 	ð 	ð 	ð 	¨)ñ 	ô 	ð 	ð
ð ð ð ð ñ ô ð ð
oð oð oð oð o˜ñ oô oð oðd	h5ð h5ñ h5ð h5ñ h5ñ h5ô h5ð h5ðV 15Ð Ñ 4Ð 4Ñ 4Ñ 4ð ñ.ñ .ð .ñ „ð.ð KOØ!'Ø#(ñ	/ð Ø %Ø!&Ø)-Ø %Ø %Ø,1ñ/ð /ñ /ñ /ð /ð /ñdKñ Kð Kð Kññ ð ð ñ%ñ %ð %ð %ñ@ñ @ð @ñ @ð* ñEñ Eð Eñ „ñEññ ð ñ ð8 "(ØJNññ ñ ð ñ ñ,Fñ Fð Fñ Fð Fð Frn   