Ë
    P/æjÚ> ã                  ód  — 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
Z
d dlmZ d dlmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z! d dlm"Z"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,m-c m.Z/ d d	l&m0Z0m1Z1m2Z2 d d
l3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z= d dl>m?Z? d dl(m@Z@mAZAmBZB d dlCmDZD d dlEmFZF d dlGmHZH d dlImJZJ d dlKmLZL d dlMmNZNmOZOmPZPmQZQ d dlRmSZS d dlTmUZU d dlVmWZW d dlXmYZYmZZZm[Z[ ddl\m]Z] ddl^m_Z_ er d dl`Z`d dlambZb d dlcZcd dl'mdZd d dlemfZf d d lgmhZh g d!¢Zie!d"   Zje&jÖ                  e6fZle!e&jÖ                  e6f   Zme&jÜ                  jÞ                  Zoe&jÜ                  jà                  Zp ejâ                  er«      Zse&jè                  jë                  erd#«      Zvi awd$exd%<   dZy e d&«      Zz e d'«      Z{ e#d(«      Z| e d)«      Z} e~e«      Z e/�j                   e&�j                  d*„ d+„ d,„ ¬-«       dŠd.„Z‚e	 	 	 	 d‹d/„«       Zƒ e„«       Z… G d0„ d1«      Z† e†«       Z‡d d2lgmˆZˆm‰Z‰  G d3„ d4e«      ZŠdŒd5„Z‹ed�d7„«       ZŒe	 	 	 	 	 	 	 	 dŽd8„«       ZŒe	 	 	 	 	 	 	 	 d�d9„«       ZŒ	 	 	 	 	 	 	 	 d�d:„ZŒd‘d;„Z�eUeA   ZŽe	 	 	 	 	 	 d’d<„«       Z�e	 	 	 	 	 	 	 	 d“d=„«       Z�e	 	 	 	 	 	 	 	 	 	 d”d>„«       Z�e	 	 	 	 	 	 d•d?„«       Z�e	 	 	 	 	 	 	 	 d–d@„«       Z�e	 	 	 	 	 	 	 	 	 	 d—dA„«       Z�e	 	 	 	 	 	 d˜dB„«       Z�e	 	 	 	 	 	 	 	 d™dC„«       Z�e	 	 	 	 	 	 	 	 	 	 dšdD„«       Z�e‡dE„ f	 	 	 	 	 	 	 	 	 d›dF„Z�dœdG„Z�ee!e‰eme]edH   edI   ee‘dHf   e2e’e“e”f
      Z•d�dJ„Z–edKdLœ	 	 	 	 	 dždM„«       Z—edŸdN„«       Z˜edŸdO„«       Z™d dP„Zš	 	 	 	 	 	 	 	 	 	 d¡dQ„Z›	 	 	 	 	 	 	 	 	 	 d¢dR„Zœe!eAedS   ee„dSf   f   Z�e!e2edT   ee„dTf   f   Zž	 	 	 	 	 	 	 	 	 	 d£dU„ZŸe G dV„ d6«      «       Z 	 	 	 	 d¤dW„Z¡ed¥dX„«       Z¢e	 	 	 	 	 	 d¦dY„«       Z¢e	 	 	 	 	 	 d§dZ„«       Z¢	 	 	 	 	 	 d¨d[„Z¢e2e&�jF                  �jH                  e:fZ¥	 	 	 	 	 	 d©d]„Z¦	 	 	 	 	 	 	 	 	 	 	 	 dªd^„Z§ G d_„ d`«      Z¨ G da„ dbeB«      Z©edŸdc„«       Zªe&�jV                  	 d«	 	 	 	 	 	 	 d¬dd„«       Z¬	 	 	 	 	 	 	 	 	 	 d­de„Z­da®dfexdg<   ed®dh„«       Z¯ G di„ djeL«      Z° G dk„ dleL«      Z± G dm„ d\eQ«      Z² G dn„ doe)�jf                  �jh                  «      Zµ G dp„ dqe)�jl                  «      Z·	 	 	 	 	 	 	 	 d¯dr„Z¸edŸds„«       Z¹ G dt„ dueº«      Z» G dv„ dw«      Z¼ G dx„ dye©«      Z½ G dz„ d{«      Z¾da¿d|exd}<   ed°d~„«       ZÀ	 	 	 d±ddddKd€œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d²d�„ZÁd³d‚„ZÂd´dƒ„ZÃd´d„„ZÄdµd…„ZÅed¶d†„«       ZÆ	 	 	 	 	 	 	 	 	 	 d·d‡„ZÇ	 	 d¸	 	 	 	 	 	 	 	 	 	 	 d¹dˆ„ZÈdºd‰„ZÉy)»é    )ÚannotationsN)Údefaultdict)ÚcontextmanagerÚ	ExitStackÚnullcontext)Ú	dataclass)ÚAnyÚCallableÚDictÚ	GeneratorÚListÚMappingÚOptionalÚoverloadÚProtocolÚSequenceÚTupleÚTypeÚTYPE_CHECKINGÚTypeVarÚUnion)ÚConcatenateÚ	ParamSpecÚSelf)ÚWeakKeyDictionary)ÚSymBoolÚSymIntÚTensor)Úenable_python_dispatcher)ÚFakeScriptObject)Úfast_detach)Ú
FakeTensorÚFakeTensorModeÚis_fakeÚunset_fake_temporarily)Úis_sparse_any)ÚGraphModuleÚProxyÚTracer)Ú_assign_attr)Ú1_side_effectful_need_to_be_preserved_pre_dispatch)Ú_extract_tensor_metadata)ÚModule)ÚTorchFunctionMode)Ú_disable_infra_modeÚ
_push_modeÚ_unset_infra_modeÚTorchDispatchMode)Úcount)ÚThunk)ÚCapturedTraceback)Ú_WeakHashRefÚWeakIdKeyDictionaryÚWeakTensorKeyDictionaryé   )ÚBackwardState)ÚSymNode)ÚMutableMapping)Ú
OpOverload)ÚPHBase)ÚIntLikeType)
ÚPythonKeyTracerÚdispatch_traceÚmake_fxÚDecompositionInterpreterÚpy_sym_typesÚget_innermost_proxy_modeÚget_proxy_modeÚhandle_sym_dispatchÚmaybe_enable_thunkifyÚmaybe_disable_thunkify)r@   Ú_GraphAppendingTracerExÚnot_implementedzMapping[OpOverload, Callable]ÚCURRENT_DECOMPOSITION_TABLEÚTÚUÚ_PÚRc                ó   — t        | «      d fS ©N)Úlist)Úxss    úe/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/fx/experimental/proxy_tensor.pyú<lambda>rV      s   € ”�R“˜$Ð€ ó    c                ó   — t        | «      S rR   )Útuple)rT   Ú_s     rU   rV   rV   €   s
   € ”%˜“)€ rW   c                óx   — t        | «      D ��cg c]  \  }}t        j                  |«      |f‘Œ c}}d fS c c}}w rR   )Ú	enumerateÚpytreeÚSequenceKey)rT   ÚiÚxs      rU   rV   rV   �   s5   € Ü09¸"³×>©¨¨1Œ&×
Ñ
˜QÓ
 Ò	#Ó>Øð%€ ùÛ>s   �!6)Úflatten_with_keys_fnc                ón   — dj                  d„ t        |«      D «       «      }t        d|› d|› d�d| i«      S )z*FX gets confused by varargs, de-confuse itú,c              3  ó&   K  — | ]	  }d |› �–— Œ y­w)ÚargN© )Ú.0r_   s     rU   ú	<genexpr>z!fake_signature.<locals>.<genexpr>Š   s   è ø€ Ò8 a˜#˜a˜Sœ	Ñ8ùs   ‚zlambda z: fn(ú)Úfn)ÚjoinÚrangeÚeval)rj   ÚnargsÚargnamess      rU   Úfake_signaturerp   ˆ   s:   € à�x‰xÑ8¬5°«<Ô8Ó8€HÜ�'˜(˜ 5¨¨
°!Ð4°t¸R°jÓAÐArW   c              #  óH   K  — t         }| xs i a 	 t         –— |a y # |a w xY w­wrR   )rL   )Údecomposition_tableÚold_decomposition_tables     rU   Ú	decomposert   Ž   s1   è ø€ ô
 :ÐØ"5Ò";¸Ðð>Ü)Ò)à&=Ñ#øÐ&=Ñ#üs   ‚"� ˜"›Ÿ"c                  ó   — e Zd Zy)Ú
_NoDefaultN©Ú__name__Ú
__module__Ú__qualname__rf   rW   rU   rv   rv   Ÿ   ó   „ ØrW   rv   )rD   Ú	PySymTypec                  ó   — e Zd ZU ded<   y)Ú_HasMetazDict[str, PySymType]ÚmetaN©rx   ry   rz   Ú__annotations__rf   rW   rU   r~   r~   ¨   s   … Ø
ÔrW   r~   c                ó‚   — t        | d«      sJ d«       ‚d| j                  v xr t        | j                  d   t        «      S )Nr   z3All nodes traced with proxy_tensor should have metaÚval)Úhasattrr   Ú
isinstancerD   )Únodes    rU   Úis_sym_noder‡   ¬   s<   € Ü�4˜Ô ÐWÐ"WÓWÐ Ø�D—I‘IÐÒL¤*¨T¯Y©Y°uÑ-=¼|Ó"LÐLrW   Ú_ProxyTensorc                 ó   — y rR   rf   ©ÚobjÚtracerÚproxys      rU   Úset_proxy_slotrŽ   ±   ó   € àrW   c                 ó   — y rR   rf   rŠ   s      rU   rŽ   rŽ   ¶   ó   € ð rW   c                 ó   — y rR   rf   rŠ   s      rU   rŽ   rŽ   ½   r‘   rW   c                ó^  — t         j                  d| t        | «      |«       t        | t        «      r"t        |t
        «      sJ ‚||j                  | <   y t        | t        «      r"t        |t        «      sJ ‚||j                  | <   y t        | t        «      sJ t        | «      «       ‚| |j                  vrzt        j                  t        |«      |j                  | <   dd l}t        | j"                  j$                  |j&                  «      r$||j(                  | j"                  j$                  <   y y y )Nzset_proxy_slot %s (%s) %sr   )ÚlogÚdebugÚidr…   r   rˆ   Útensor_trackerÚ_AnyScriptObjectr(   Úscript_object_trackerrD   ÚtypeÚsymnode_trackerÚtypingÚcastÚ_PySymProxyTypeÚsympyr†   ÚexprÚSymbolÚsympy_expr_tracker)r‹   rŒ   r�   rŸ   s       rU   rŽ   rŽ   Ä   só   € ô
 ‡I�IÐ)¨3´°3³¸Ô?Ü�#”vÔô ˜%¤Ô.Ð.Ð.Ø%*ˆ×Ñ˜cÒ"Ü	�CÔ*Ô	,ä˜%¤Ô'Ð'Ð'Ø,1ˆ×$Ñ$ SÒ)ô ˜#œ|Ô,Ð7¬d°3«iÓ7Ð,Ø�f×,Ñ,Ñ,Ü*0¯+©+´oÀuÓ*MˆF×"Ñ" 3Ñ'ó ä˜#Ÿ(™(Ÿ-™-¨¯©Ô6Ø;@�×)Ñ)¨#¯(©(¯-©-Ò8ð 7ð# -rW   c                ó~   — t        | t        t        f«      sJ t        | «      «       ‚t	        t        | |dd„ «      «      S )NFc                 ó   — y©NTrf   ©rZ   s    rU   rV   z has_proxy_slot.<locals>.<lambda>ò   s   � rW   )r…   r   r;   rš   ÚboolÚget_proxy_slot©r‹   rŒ   s     rU   Úhas_proxy_slotrª   ð   s6   € Ü�cœF¤GÐ,Ô-Ð8¬t°C«yÓ8Ð-Ü”˜s F¨E±>ÓBÓCÐCrW   c                 ó   — y rR   rf   r©   s     rU   r¨   r¨   ø   ó   € ð
 rW   c                 ó   — y rR   rf   ©r‹   rŒ   Údefaults      rU   r¨   r¨      ó   € ð rW   c                 ó   — y rR   rf   ©r‹   rŒ   r¯   Ú	transforms       rU   r¨   r¨   	  ó   € ð rW   c                 ó   — y rR   rf   r©   s     rU   r¨   r¨     r¬   rW   c                 ó   — y rR   rf   r®   s      rU   r¨   r¨     r°   rW   c                 ó   — y rR   rf   r²   s       rU   r¨   r¨   $  r´   rW   c                 ó   — y rR   rf   r©   s     rU   r¨   r¨   .  r¬   rW   c                 ó   — y rR   rf   r®   s      rU   r¨   r¨   6  r°   rW   c                 ó   — y rR   rf   r²   s       rU   r¨   r¨   ?  r´   rW   c                ó   — | S rR   rf   ©r`   s    rU   rV   rV   P  s   €  A€ rW   c                óü  — t        | t        «      r|j                  }nIt        | t        «      r|j                  }n,t        | t
        «      sJ t        | «      «       ‚|j                  }| |vr„t        | t
        «      rF| j                  j                  |j                  v r$|j                  | j                  j                     }n3t        |t        «      rt        | › dt        | «      › d|› �«      ‚|S ||    } ||«      }|S )Nz (z)is not tracked with proxy for )r…   r   r—   r˜   r™   rD   rš   r›   r†   r    r¢   rv   ÚRuntimeErrorr–   )r‹   rŒ   r¯   r³   ÚtrackerÚvalueÚress          rU   r¨   r¨   L  sá   € ô �#”vÔØ×'Ñ'‰Ü	�CÔ)Ô	*Ø×.Ñ.‰ä˜#œ|Ô,Ð7¬d°3«iÓ7Ð,Ø×(Ñ(ˆà
�'Ñä�cœ<Ô(¨S¯X©X¯]©]¸f×>WÑ>WÑ-WØ×-Ñ-¨c¯h©h¯m©mÑ<‰Eä˜'¤:Ô.Ü"Ø�e˜2œb ›g˜YÐ&EÀfÀXÐNóð ð ˆNà˜‘ˆÙ
�EÓ
€CØ€JrW   c                ón   — t        | t        «      rt        | j                  | «      S | j	                  «       S rR   )r…   r"   r!   Ú	fake_modeÚdetach)rƒ   s    rU   Úsnapshot_fakerÅ   k  s+   € ô �#”zÔ"Ü˜3Ÿ=™=¨#Ó.Ð.à�z‰z‹|ÐrW   Ú_ExtractValType)rÆ   .c                ó  — t        | «      rt        | «      S t        | t        «      r| S t        | t        «      r| S t        | t
        «      r| S t        | t        t        f«      r(| j                  | D �cg c]  }t        |«      ‘Œ c}«      S t        | t        «      r-| j                  «       D ��ci c]  \  }}|t        |«      “Œ c}}S t        | t        «      rj| j                  s]t        d¬«      }|5  t        j                   | j"                  | j%                  «       | j&                  | j(                  ¬«      cd d d «       S y t        | t*        t,        t.        f«      r| S | €y t1        j2                  | «       y c c}w c c}}w # 1 sw Y   Œ*xY w)NT)Úallow_fallback_kernels)ÚdeviceÚdtype)r$   rÅ   r…   rD   r˜   r:   rS   rY   Ú	__class__Úextract_valÚdictÚitemsr   Ú	is_sparser#   ÚtorchÚempty_stridedÚshapeÚstriderÉ   rÊ   ÚintÚfloatr§   Útyping_extensionsÚassert_never)rƒ   r`   ÚkÚvÚfake_tensor_modes        rU   rÌ   rÌ   …  s9  € Üˆs„|Ü˜SÓ!Ð!Ü	�CœÔ	&Øˆ
Ü	�CÔ)Ô	*Øˆ
Ü	�CœÔ	'Øˆ
Ü	�Cœ$¤˜Ô	'Ø�}‰}°cÖ:°œk¨!�nÒ:Ó;Ð;Ü	�CœÔ	Ø.1¯i©i«k×:¡d a¨�”;˜q“>Ñ!Ó:Ð:Ü	�CœÔ	 Ø�}Š}ô  .ÀTÔJÐØ!ñ Ü×*Ñ*Ø—I‘I˜sŸz™z›|°C·J±JÀcÇiÁiô÷ñ ð
 Ü	�Cœ#œu¤dÐ+Ô	,Øˆ
Ø	ˆØä×"Ñ" 3Õ'ùò/ ;ùã:÷ð ús   Á2E8Â.E=Ã2AFÆFT©Úenablec             #  ób   K  — | j                   }|| _         	 d–— || _         y# || _         w xY w­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Œ   rÜ   Úolds      rU   Ú_enable_thunkifyrà   ©  s3   è ø€ ð ×
 Ñ
 €CØ#€FÔð%Ûà!$ˆÕø ˆÕüs   ‚/—# ›/£	,¬/c               #  óŽ   K  — t        «       } | �%t        | j                  d¬«      5  d–— ddd«       yd–— y# 1 sw Y   yxY w­w)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.
    NFrÛ   ©rF   rà   rŒ   ©Ú
proxy_modes    rU   rI   rI   ¼  sG   è ø€ ô  Ó!€JØÐÜ˜j×/Ñ/¸Ô>ñ 	Û÷	ð 	ô 	÷	ð 	üs   ‚$A¦9«A¹A¾Ac               #  óŠ   K  — t        «       } | �#t        | j                  «      5  d–— ddd«       yd–— y# 1 sw Y   yxY w­w)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.
    Nrâ   rã   s    rU   rH   rH   Ì  sE   è ø€ ô  Ó!€JØÐÜ˜j×/Ñ/Ó0ñ 	Û÷	ð 	ô 	÷	ð 	üs   ‚"A¤7©A·A ¼Ac                óx  — t        |«      | j                  j                  d<   t        | j                  «      5  t        |«      r#t        |«      | j                  j                  d<   n>t        |t        «      r.|j                  s"t        |«      | j                  j                  d<   d d d «       | S # 1 sw Y   | S xY w)Nrƒ   Útensor_meta)
rÌ   r†   r   rà   rŒ   r$   r,   r…   r   rÏ   )r�   rƒ   s     rU   Úset_metarè   å  s‹   € Ü(¨Ó-€E‡J�J‡O�O�EÑä	˜%Ÿ,™,Ó	'ñ Kä�3Œ<Ü-EÀcÓ-JˆE�J‰J�O‰O˜MÒ*Ü˜œVÔ$¨S¯]ª]Ü-EÀcÓ-JˆE�J‰J�O‰O˜MÑ*÷Kð €L÷Kð €Lús   ¸A-B/Â/B9c                óŒ   ‡— | j                   r"t        t        j                  |g|¢­i |¤Ž«      S  ||i |¤ŽŠt        ˆfd„«      S )zT
    Delays computation of f until it's called again
    Also caches the result
    c                 ó   •— ‰ S rR   rf   )Úrs   €rU   rV   zthunkify.<locals>.<lambda>ü  s   ø€ ˜Q€ rW   )rÞ   r4   Ú	functoolsÚpartial)rŒ   ÚfÚargsÚkwargsrë   s       @rU   Úthunkifyrñ   ñ  sH   ø€ ð ×ÒÜ”Y×&Ñ& qÐ:¨4Ò:°6Ñ:Ó;Ð;áˆtÐ�vÑˆÜ“YÓÐrW   c               ó¢  ‡‡— 	 	 	 	 	 	 	 	 	 	 dˆfd„}t        | j                  «      D ]  \  }} ||ˆˆfd„|«       Œ t        | «      s/t        | j                  «       «      D ]  \  }} ||ˆˆfd„|«       Œ  || j	                  «       ˆˆfd„«       t        | «      s || j                  «       ˆˆfd„«       t        | ‰t        ‰|«      «       y )Nc           
     óº   •— t        |«      sJ ‚t        | t        «      r1t        ‰«      5  t	        | ‰t        ‰|| g|¢­i |¤Ž«       d d d «       y y # 1 sw Y   y xY wrR   )Úcallabler…   r   rà   rŽ   rñ   )Úouter_sÚproxy_callablerï   rð   rŒ   s       €rU   Útry_set_proxy_slotz(track_tensor.<locals>.try_set_proxy_slot  sh   ø€ ô ˜Ô'Ð'Ð'Ü�gœvÔ&Ü! &Ó)ñ ÜØØÜ˜V ^°WÐN¸tÒNÀvÑNô÷ð ð '÷ð ús   ªAÁAc                óœ   •— t        ‰j                  dt        j                  j                  j
                  j                  ‰|fi «      | «      S ©NÚcall_function)rè   Úcreate_proxyrÐ   ÚopsÚatenÚsym_sizerÔ   ©r`   r_   r�   rŒ   s     €€rU   rV   ztrack_tensor.<locals>.<lambda>  s@   ø€ œØ×#Ñ#Ø#¤U§Y¡Y§^¡^×%<Ñ%<×%@Ñ%@À5È!À*Èbóð ó	€ rW   c                óœ   •— t        ‰j                  dt        j                  j                  j
                  j                  ‰|fi «      | «      S rù   )rè   rû   rÐ   rü   rý   Ú
sym_striderÔ   rÿ   s     €€rU   rV   ztrack_tensor.<locals>.<lambda>&  sB   ø€ œXØ×'Ñ'Ø'¬¯©¯©×)BÑ)B×)FÑ)FÈÐPQÈ
ÐTVóð ó	€ rW   c                óš   •— t        ‰j                  dt        j                  j                  j
                  j                  ‰fi «      | «      S rù   )rè   rû   rÐ   rü   rý   Ú	sym_numelr¯   ©r`   r�   rŒ   s    €€rU   rV   ztrack_tensor.<locals>.<lambda>1  s>   ø€ ”(Ø×ÑØ¤§¡§¡×!9Ñ!9×!AÑ!AÀEÀ8ÈRóð ó	
€ rW   c                óš   •— t        ‰j                  dt        j                  j                  j
                  j                  ‰fi «      | «      S rù   )rè   rû   rÐ   rü   rý   Úsym_storage_offsetr¯   r  s    €€rU   rV   ztrack_tensor.<locals>.<lambda>;  sA   ø€ ”hØ×#Ñ#Ø#Ü—I‘I—N‘N×5Ñ5×=Ñ=Ø�HØó	ð ó€ rW   )
rõ   r?   rö   z+Callable[Concatenate[PySymType, _P], Proxy]rï   ú_P.argsrð   ú	_P.kwargsÚreturnÚNone)r\   rÒ   r&   rÓ   ÚnumelÚstorage_offsetrŽ   rˆ   )Útensorr�   ÚconstantrŒ   r÷   r_   Úss    ` `   rU   Útrack_tensorr  ÿ  sö   ù€ ðØðàCðð ðð ð	ð
 
õô( ˜&Ÿ,™,Ó'ò 

‰ˆˆ1ÙØôð õ		
ð

ô ˜Ô Ü˜fŸm™m›oÓ.ò 
	‰DˆAˆqÙØôð õ	ð
	ñ Ø�‰‹ô	
ôô ˜Ô ÙØ×!Ñ!Ó#ôô	
ô �6˜6¤<°°xÓ#@ÕArW   Ú_NestedProxysÚ_NestedTensorsc               óT   ‡‡— t        | |«       	 	 	 	 	 	 	 	 dˆˆfd„Š ‰| ||«       | S )Nc           	     ó¾  •‡— t        | t        «      rBt        ‰t        «      sJ ‚|�t        |t        «      sJ ‚t        | ‰‰|¬«       t	        ‰| «       y t        | t
        «      r9t        ‰t        «      sJ ‚t	        ‰| «       t        | ‰t        ‰ˆfd„«      «       y t        | t        «      r,t        ‰t        «      sJ ‚t        | ‰‰«       t	        ‰| «       y t        | t        t        f«      rXt        ‰t        j                  «      rt	        ‰| «       	 	 	 	 	 	 dd„}t        | «      D ]  \  }} ‰	|‰|    |||«      «       Œ y t        | t        «      rP|�J ‚t        ‰t        j                  «      rt	        ‰| «       | j                  «       D ]  \  }} ‰	|‰|   d «       Œ y t        | t        «      r&t        ‰t        «      sJ ‚t	        ‰| «       ‰| _        y y )N)rŒ   r  c                 ó   •— ‰ S rR   rf   ©r�   s   €rU   rV   z<track_tensor_tree.<locals>.wrap_with_proxy.<locals>.<lambda>r  s   ø€ ¸u€ rW   c                óB   — | €y t        | t        t        f«      sJ ‚| |   S rR   )r…   rS   rY   )ÚcÚidxs     rU   Úget_constantz@track_tensor_tree.<locals>.wrap_with_proxy.<locals>.get_constant|  s)   € ð �9Øä% a¬$´¨Ô7Ð7Ð7Ø˜S™6�MrW   )r  úOptional[_NestedTensors]r  rÔ   r	  r  )r…   r   r(   r  rè   rD   rŽ   rñ   r˜   rY   rS   Úfxr\   rÍ   rÎ   r:   r�   )
Úer�   r  r  r  ÚeeÚkeyrƒ   rŒ   Úwrap_with_proxys
    `      €€rU   r   z*track_tensor_tree.<locals>.wrap_with_proxyf  s¸  ù€ ô �aœÔ Ü˜e¤UÔ+Ð+Ð+ØÐ#¤z°(¼FÔ'CÐCÐCÜ˜˜E¨&¸8ÕDÜ�U˜AÕÜ˜œ<Ô(Ü˜e¤UÔ+Ð+Ð+ä�U˜AÔÜ˜1˜f¤h¨v³}Ó&EÕFÜ˜Ô+Ô,Ü˜e¤UÔ+Ð+Ð+Ü˜1˜f eÔ,Ü�U˜AÕÜ˜œE¤4˜=Ô)ä˜%¤§¡Ô*Ü˜ Ô"ð"Ø+ð"Ø25ð"à)ó"ô % Q›<ò M‘��Rñ    E¨#¡J±¸XÀsÓ0KÕLñMô
 ˜œ4Ô ð Ð#Ð#Ð#ä˜%¤§¡Ô*Ü˜ Ô"àŸG™G›Iò 7‘��SÙ  U¨3¡Z°Õ6ñ7ô ˜œ=Ô)Ü˜e¤UÔ+Ð+Ð+Ü�U˜AÔØˆA�Gð rW   )r  Úobjectr�   r  r  r  r	  r
  )Ú_set_unbacked_bindings)Ú	inner_resÚ	proxy_resr  rŒ   r   s      `@rU   Útrack_tensor_treer%  P  sI   ù€ ô( ˜9 iÔ0ð:Øð:Ø'ð:Ø3Kð:à	ö:ñx �I˜y¨(Ô3àÐrW   c                  ó"   — e Zd ZU ded<   ded<   y)rˆ   r(   r�   úOptional[Tensor]r  Nr€   rf   rW   rU   rˆ   rˆ   §  s   … àƒLØÔrW   c                ó   ‡ — dˆ fd„}|S )Nc                óÞ  •— | j                   }|j                  �|j                  S | j                   j                  j                  r}t	        | t
        «      rt        | j                   j                  «      S t	        | t        «      rt        | j                   j                  «      S t        | j                   j                  «      S t	        | t        «      sJ ‚t        | ‰«      j                  «       S rR   )r†   r  r    Ú	is_numberr…   r   r§   r   rÔ   rÕ   rD   r¨   Úforce)r  ÚnrŒ   s     €rU   Úinnerzfetch_sym_proxy.<locals>.inner°  s¤   ø€ Ø�F‰FˆØ�:‰:Ð!Ø—:‘:ÐØ�6‰6�;‰;× Ò Ü˜!œWÔ%Ü˜AŸF™FŸK™KÓ(Ð(Ü˜AœvÔ&Ü˜1Ÿ6™6Ÿ;™;Ó'Ð'Ü˜Ÿ™Ÿ™Ó%Ð%ä˜a¤Ô.Ð.Ð.ä! ! VÓ,×2Ñ2Ó4Ð4rW   )r  r|   r	  zUnion[int, bool, float, Proxy]rf   )rŒ   r-  s   ` rU   Úfetch_sym_proxyr.  ­  s   ø€ õ5ð €LrW   c                 ó   — y rR   rf   ©rŒ   Úts     rU   Úfetch_object_proxyr2  Â  r�   rW   c                 ó   — y rR   rf   r0  s     rU   r2  r2  Ç  r‘   rW   c                 ó   — y rR   rf   r0  s     rU   r2  r2  Î  r‘   rW   c                ó   — t        || |«      S rR   ©r¨   r0  s     rU   r2  r2  Õ  s   € ô ˜!˜V QÓ'Ð'rW   ÚProxyTorchDispatchModec                ó$  — |j                   s|j                  syt        | t        j                  j
                  «      r&t        j                  j                  | j                  vryt        t        t        |j                  j                  j                  «      «      «      }|j                  j!                  d«      }t        |t        j"                  «      r,|j$                  t        j&                  t        j(                  fvryd|j                  d<   y)zd
    Records pointwise operators in user program (non decomposed) that were output in fp16/bf16
    Nrƒ   TÚlow_precision_pointwise_barrier)Údecomp_layersÚemulate_precision_castsr…   rÐ   Ú_opsr=   ÚTagÚ	pointwiseÚtagsÚnextÚiterÚreversedrŒ   ÚgraphÚnodesr   Úgetr   rÊ   Úbfloat16Úfloat16)Úfuncrä   Ú	last_noder1  s       rU   Ú_maybe_record_pointwise_barrierrJ  Þ  sÁ   € ð ×Ò z×'IÒ'IØô �tœUŸZ™Z×2Ñ2Ô3Ü�9‰9×Ñ d§i¡iÑ/àä”Tœ( :×#4Ñ#4×#:Ñ#:×#@Ñ#@ÓAÓBÓC€IØ�‰×Ñ˜5Ó!€AÜ�aœŸ™Ô&¨!¯'©'Ü�‰Ü�‰ð:ñ +ð 	à8<€I‡N�NÐ4Ò5rW   c           	     ó  ‡ ‡‡— g Št        j                  ||f«      \  }}dˆ ˆfd„Št        ˆfd„|D «       «      st        j	                  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r1‰ 5   |j                  |i |¤Ž}|t
        ur|cd d d «       S 	 d d d «       ‰ j                   }|D �	cg c]&  }	t#        |	t$        t&        f«      rt)        ||	«      n|	‘Œ( }
}	t+        d„ |
D «       «       xr t+        d„ |D «       «       }t        j,                  j.                  |j0                  v r›|r`|
D �cg c]   }t#        |t2        «      r|j4                  n|‘Œ" }}t        j6                  ||«      \  }}t9        «       5   ||i |¤Žcd d d «       S ‰ j:                  r-t        j<                  t$        d„ ||f«      rt?        d|› d�«      ‚|
D �cg c]   }t#        |t2        «      r|j@                  n|‘Œ" }}|D �cg c]/  }t#        |tB        «      r tE        ‰ j                   «      |«      n|‘Œ1 }}t        j6                  ||«      \  }}|t        j                  j                  jF                  j                  u r.t        j                  j                  jH                  j                  }‰ j                   jK                  d	|||‰ j                   jL                  jO                  |jP                  jR                  «      ¬
«      }tU        ‰ j                   «      5   ||i |¤Ž}d d d «       t+        d„ |
D «       «      }d }dd„}|t        j                  j                  jH                  j                  u rjjW                  «       tX        k  rSt9        «       5  t#        |d   tZ        t$        f«      sJ t]        |d   «      «       ‚|d   j_                  «       }d d d «       n§t        j,                  j`                  |j0                  vr|r}|r{t        j<                  t$        |«      r`t9        «       5  |
D �cg c]   }t#        |t2        «      r|j4                  n|‘Œ" }}t        j6                  ||«      \  }} ||i |¤Ž}d d d «       nd }tc        |||¬«       t        |‰ «       |S # 1 sw Y   �ŒÿxY wc c}	w c c}w # 1 sw Y   �Œ)xY wc c}w c c}w # 1 sw Y   �Œ®xY w# 1 sw Y   ŒaxY wc c}w # 1 sw Y   ŒrxY w)Nc                óþ   •— t        | «      t        v xs t        | ‰j                  «      }‰j                  r*|xs& t        | «      t
        j                  j                  fv }|s‰j                  t        | «      «       |S rR   )	rš   ÚHANDLED_TYPESrª   rŒ   Ú_allow_fake_constantrÐ   Ú_subclassesr"   Úappend)r`   rë   rä   Úunrecognized_typess     €€rU   Úcan_handle_tensorz%proxy_call.<locals>.can_handle_tensor  sh   ø€ Ü�‹G”}Ð$ÒL¬°q¸*×:KÑ:KÓ(LˆØ×*Ò*ØÒ?”T˜!“W¤×!2Ñ!2×!=Ñ!=Ð ?Ð?ˆAÙØ×%Ñ%¤d¨1£gÔ.ØˆrW   c              3  óP   •K  — | ]  }t        |t        «      sŒ ‰|«      –— Œ y ­wrR   )r…   r   )rg   r`   rR  s     €rU   rh   zproxy_call.<locals>.<genexpr>  s    øè ø€ ÒW¨ÄÈAÌvÕAVÑ  ×#ÑWùs   ƒ&™&zEProxyTensorMode tensors without proxy had unrecognized subclasses: %sc              3  óX   K  — | ]"  }t        |t        «      r|j                  d u –— Œ$ y ­wrR   ©r…   rˆ   r  ©rg   r1  s     rU   rh   zproxy_call.<locals>.<genexpr>1  s+   è ø€ ò 
àÜ˜!œ\Ô*ð �J‰J˜$Ôñ
ùó   ‚(*c              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wrR   )r…   rD   )rg   r`   s     rU   rh   zproxy_call.<locals>.<genexpr>8  s   è ø€ ÒJ°A”J˜q¤,×/ÑJùs   ‚c                ó   — t        | «       S rR   )r$   ©r1  s    rU   rV   zproxy_call.<locals>.<lambda>K  s   € ¤'¨!£*˜n€ rW   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  óX   K  — | ]"  }t        |t        «      r|j                  d u–— Œ$ y ­wrR   rU  rV  s     rU   rh   zproxy_call.<locals>.<genexpr>¡  s+   è ø€ ò àÜ�aœÔ&ð 	
�
‰
˜$ÔñùrW  c                ó0   — | j                  «       t        k  S rR   )r  ÚCONSTANT_NUMEL_LIMITrZ  s    rU   Útensor_numel_in_limitz)proxy_call.<locals>.tensor_numel_in_limit©  s   € Ø�w‰w‹yÔ0Ñ0Ð0rW   r   ©r  rŒ   )r`   r   r	  r§   )r1  r   r	  r§   )2r]   Útree_flattenÚallÚnot_implemented_logr•   ÚNotImplementedÚmaybe_handle_decomprJ  rÐ   rü   rý   Úsizer¯   rÓ   r  rt   rŒ   r…   r   r˜   r2  Úanyr=  Údata_dependent_outputr?  rˆ   r  Útree_unflattenr%   Ú_error_on_data_dependent_opsÚtree_all_onlyr¾   r�   rD   r.  Ú
lift_freshÚlift_fresh_copyrû   rC  Ú_target_to_strÚoverloadpacketrx   rà   r  r^  r(   rš   ÚcloneÚnondeterministic_seededr%  )rä   rH  Úpre_dispatchrï   rð   Úflat_args_kwargsÚspecrë   rŒ   r`   Úf_flat_args_kwargsÚall_constantr1  Úconst_flat_args_kwargsÚ
const_argsÚconst_kwargsr  Úproxy_flat_args_kwargsÚ
proxy_argsÚproxy_kwargsÚ	proxy_outÚoutÚany_constantr  r_  rR  rQ  s   `                        @@rU   Ú
proxy_callr€  ø  s`  ú€ ð &(ÐÜ#×0Ñ0°$¸°Ó@ÑÐ�döô ÓWÐ-=ÔWÔWÜ×!Ñ!ØSØô	
ô Ðä˜J¨¨d°FÓ;€AØ”ÑÜ'¨¨jÔ9Øˆñ ˜DÜ�	‰	�‰×Ñ×#Ñ#Ü�	‰	�‰×Ñ×%Ñ%Ü�	‰	�‰×%Ñ%×-Ñ-ð)ñ ð
 ñ 	Ø�—‘ Ð/¨Ñ/ˆAØœÑ&Ø÷	ñ 	à&÷	ð
 ×Ñ€Fð "öð ô ˜!œfÔ&6Ð7Ô8ô ˜v qÔ)àñðÐð ô ñ 
à'ô
ó 
ð 	
ò 	Kô ÑJÐ9IÔJÓJÐJð ô ‡y�y×&Ñ&¨$¯)©)Ñ3áð ,ö&àô )¨¬LÔ9�—
’
¸qÑ@ð&Ð"ð &ô (.×'<Ñ'<Ø&¨ó(Ñ$ˆJ˜ô (Ó)ñ 9Ù˜ZÐ8¨<Ñ8÷9ñ 9ð
 ×2Ò2´v×7KÑ7KÜÑ,¨t°V¨nô8
ô ØZÐ[_ÐZ`ð a(ð (óð ð @RöØ:;”:˜a¤Ô.ˆ�Š°AÑ5ðÐð ð
 (öàô 3=¸QÄÔ2MÐ	+Œ˜×*Ñ*Ó	+¨AÔ	.ÐSTÑ	TðÐð ô  &×4Ñ4Ð5KÈTÓRÑ€J�ðF Œu�y‰y�~‰~×(Ñ(×0Ñ0Ñ0Ü�y‰y�~‰~×-Ñ-×5Ñ5ˆà×!Ñ!×.Ñ.ØØØØØ×Ñ×$Ñ$×3Ñ3°D×4GÑ4G×4PÑ4PÓQð /ó €Iô 
˜*×+Ñ+Ó	,ñ $Ù�DÐ#˜FÑ#ˆ÷$ô0 ñ à#ôó €Lð €Hó1ð 	”—	‘	—‘×.Ñ.×6Ñ6Ñ6Ø�I‰I‹KÔ/Ò/ä#Ó%ñ 	'Ü˜d 1™g¬¬v Ô7ÐF¼¸dÀ1¹g»ÓFÐ7Ø˜A‘w—}‘}“ˆH÷	'ð 	'ô 	�	‰	×)Ñ)°·±Ñ:ÙÙÜ× Ñ ¤Ð)>ÀÔDô $Ó%ñ 	9ð ,ö&àô )¨¬LÔ9�—
’
¸qÑ@ð&Ð"ð &ô (.×'<Ñ'<Ø&¨ó(Ñ$ˆJ˜ñ ˜ZÐ8¨<Ñ8ˆH÷	9ð 	9ð ˆä�c˜9¨xÀÕGÜ# D¨*Ô5Ø€J÷[	ñ 	üòùò4&÷9ñ 9üòùò÷d$ñ $ú÷T	'ð 	'üò&÷	9ð 	9úsg   Ä
T.Å	+T;Ç
%U ÈUÉ#%UÊ4UÎ'	UÐ!A U)Ò9U:Ò>%U5Ó##U:Ô.T8ÕUÕU&Õ)U2Õ5U:Õ:Vc                  óV   — 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
y)Ú_SymNodeDictzM
    Wrapper around a dictionary that will hash SymInts with their nodes
    c                ó   — i | _         y rR   )Úsym_node_dict©Úselfs    rU   Ú__init__z_SymNodeDict.__init__Ó  s
   € Ø?AˆÕrW   c                ó6   — || j                   |j                  <   y rR   ©r„  r†   )r†  r  rÀ   s      rU   Ú__setitem__z_SymNodeDict.__setitem__Ö  s   € Ø',ˆ×Ñ˜3Ÿ8™8Ò$rW   c                ó4   — | j                   |j                     S rR   r‰  ©r†  r  s     rU   Ú__getitem__z_SymNodeDict.__getitem__Ù  s   € Ø×!Ñ! #§(¡(Ñ+Ð+rW   c                ó2   — |j                   | j                  v S rR   )r†   r„  rŒ  s     rU   Ú__contains__z_SymNodeDict.__contains__Ü  s   € Ø�x‰x˜4×-Ñ-Ð-Ð-rW   Nc                óN   — | j                   j                  |j                  |«      S rR   )r„  rE  r†   )r†  r  r¯   s      rU   rE  z_SymNodeDict.getß  s!   € ð
 ×!Ñ!×%Ñ% c§h¡h°Ó8Ð8rW   c                ó   — t         ‚rR   )ÚNotImplementedErrorr…  s    rU   Ú__iter__z_SymNodeDict.__iter__æ  s   € Ü!Ð!rW   c                ó,   — t        | j                  «      S rR   )Úlenr„  r…  s    rU   Ú__len__z_SymNodeDict.__len__é  s   € Ü�4×%Ñ%Ó&Ð&rW   ©r	  r
  )r  r|   rÀ   rž   r	  r
  )r  r|   r	  rž   )r  r|   r	  r§   rR   )r  r|   r¯   zOptional[_PySymProxyType]r	  rž   )r	  r	   )r	  rÔ   )rx   ry   rz   Ú__doc__r‡  rŠ  r�  r�  rE  r“  r–  rf   rW   rU   r‚  r‚  Î  sJ   „ ñóBó-ó,ó.ð DHð9Øð9Ø'@ð9à	ó9ó"ô'rW   r‚  c                  óè   ‡ — e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   dZded<   dˆ fd„Z	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 dd„Zdˆ fd„Ze	dd„«       Z
e	dd„«       Z
e		 	 	 	 dd„«       Z
dd„Z
ˆ xZS )r@   ú+MutableMapping[_AnyScriptObjectType, Proxy]r™   r‚  r›   úDict[sympy.Symbol, object]r¢   ú$MutableMapping[Tensor, _ProxyTensor]r—   úDict[OpOverload, int]Útorch_fn_countsFr§   rÞ   c                óÖ   •— t         ‰| �  d¬«       t        «       | _        t	        «       | _        t        d t        ¬«      | _        t        «       | _
        d | _        i | _        d| _        y )Nrf   )Úautowrap_modules©rÍ   Úref_typeF)Úsuperr‡  r8   r—   r‚  r›   r7   r6   r™   rÍ   r¢   Útorch_fn_metadatarž  rÞ   )r†  rË   s    €rU   r‡  zPythonKeyTracer.__init__õ  sb   ø€ Ü‰Ñ¨"ÐÔ-Ü5Ó7ˆÔÜ+›~ˆÔÜ%8Ø¤ô&
ˆÔ"ô #'£&ˆÔð "&ˆÔð  "ˆÔØ$ˆÕrW   c                ó   —  ||i |¤ŽS rR   rf   )r†  ÚmÚforwardrï   rð   s        rU   Úcall_modulezPythonKeyTracer.call_module  s   € ñ ˜Ð' Ñ'Ð'rW   c                ó   — |S rR   rf   )r†  ÚattrÚattr_valÚparameter_proxy_caches       rU   ÚgetattrzPythonKeyTracer.getattr  s	   € ð ˆrW   c                óÖ  •— t        |t        j                  j                  «      rx| j                  j                  «       D ]  \  }}||u sŒ| j                  d|di «      c S  | j                  d«      }t        | j                  ||«       | j                  d|di «      S t        |t        «      r.|j                  j                  €J ‚|j                  j                  S t        ‰| �5  |«      S )NÚget_attrrf   Ú_param_constant)r…   rÐ   ÚnnÚ	ParameterÚrootÚnamed_parametersÚcreate_nodeÚget_fresh_qualnameÚsetattrrD   r†   r  r£  Ú
create_arg)r†  Úar,  ÚpÚqualnamerË   s        €rU   r¸  zPythonKeyTracer.create_arg  sÍ   ø€ Ü�aœŸ™×+Ñ+Ô,ØŸ	™	×2Ñ2Ó4ò C‘��1Ø˜’6Ø×+Ñ+¨J¸¸2¸rÓBÒBðCð ×.Ñ.Ð/@ÓAˆHÜ�D—I‘I˜x¨Ô+à×#Ñ# J°¸"¸bÓAÐAÜ˜œ<Ô(Ø—6‘6—?‘?Ð.Ð.Ð.Ø—6‘6—?‘?Ð"Ü‰wÑ! !Ó$Ð$rW   c                 ó   — y rR   rf   ©r†  r  s     rU   Úunwrap_proxyzPythonKeyTracer.unwrap_proxy&  ó   € àrW   c                 ó   — y rR   rf   r½  s     rU   r¾  zPythonKeyTracer.unwrap_proxy*  r¿  rW   c                 ó   — y rR   rf   r½  s     rU   r¾  zPythonKeyTracer.unwrap_proxy.  s   € ð 	rW   c                ó¼   — t        |t        «      rt        || |d„ «      S t        |t        «      rt        || |d„ «      S t        |t        «      rt        || |«      S |S )Nc                ó   — | j                   S rR   r  r¼   s    rU   rV   z.PythonKeyTracer.unwrap_proxy.<locals>.<lambda>6  s
   € ¸¿¹€ rW   c                ó"   — | j                  «       S rR   )r+  )r  s    rU   rV   z.PythonKeyTracer.unwrap_proxy.<locals>.<lambda>8  s   € ¸¿¹»	€ rW   )r…   r   r¨   rD   r˜   r½  s     rU   r¾  zPythonKeyTracer.unwrap_proxy4  sY   € Ü�aœÔ Ü! ! T¨1Ñ.?Ó@Ð@Ü˜œ<Ô(Ü! ! T¨1Ñ.AÓBÐBÜ˜Ô+Ô,Ü! ! T¨1Ó-Ð-àˆHrW   r—  )
r¦  r-   r§  zCallable[..., Any]rï   zTuple[Any, ...]rð   zDict[str, Any]r	  r	   ©rª  Ústrr«  r!  r¬  zDict[str, Proxy]r	  r!  )r¹  r!  r	  úfx.node.Node)r  r   r	  zUnion[Proxy, Tensor])r  r|   r	  zUnion[Proxy, PySymType])r  Ú_AnyScriptObjectTyper	  ú"Union[Proxy, _AnyScriptObjectType])r  rM   r	  r!  )rx   ry   rz   r�   rÞ   r‡  r¨  r­  r¸  r   r¾  Ú__classcell__©rË   s   @rU   r@   r@   í  sà   ø… ØFÓFØ!Ó!Ø2Ó2Ø8Ó8Ø*Ó*Ø!€O�TÓ!õ%ð&(àð(ð $ð(ð ð	(ð
 ð(ð 
ó(ðØðØ#)ðØBRðà	óõ
%ð òó ðð òó ðð ðØ%ðà	+òó ð÷
rW   r@   c               #  ó$  K  — ddl m} m}m} g }d } | «       dkD  r6 |«       }t	        |t
        «      r|}n|j                  |«        | «       dkD  rŒ6t        |«      D ]
  } ||«       Œ 	 d –— |�Lt        |«      }|dkD  r |«       }|dz  }|dkD  rŒ|j                  |«       t        |«      D ]
  } ||«       Œ y y # |�Lt        |«      }|dkD  r |«       }|dz  }|dkD  rŒ|j                  |«       t        |«      D ]
  } ||«       Œ w w xY w­w)Nr   )Ú_len_torch_function_stackÚ	_pop_moder0   r9   )	Útorch.overridesrÍ  rÎ  r0   r…   ÚPreDispatchTorchFunctionModerP  rB  r•  )rÍ  rÎ  r0   Útemp_elementsÚpre_dispatch_modeÚmoder3   s          rU   Ú-_temp_remove_pre_dispatch_torch_function_moderÔ  ?  sE  è ø€ çPÑPà€MØÐá
#Ó
%¨Ò
)Ù‹{ˆÜ�dÔ8Ô9Ø $ÐØà× Ñ  Ô&ñ $Ó
%¨Ó
)ô ˜Ó'ò ˆÙ�4Õðð!Ûð Ð(Ü˜Ó&ˆEØ˜!’)Ù “{�Ø˜‘
�ð ˜!“)ð × Ñ Ð!2Ô3ä  Ó/ò !�Ù˜4Õ ñ!ð )øÐÐ(Ü˜Ó&ˆEØ˜!’)Ù “{�Ø˜‘
�ð ˜!“)ð × Ñ Ð!2Ô3ä  Ó/ò !�Ù˜4Õ ñ!ð )üs0   ‚ADÁDÁ*B= Á.#DÂ+DÂ=$DÃ"+DÄDc                ó&  — |j                  | |«      }dd„}|j                  |«       ddlm}  ||«       t	        | t
        «      r| j                  j                  n| j                  }t        j                  j                  |j                  ||«      S )Nc                óÐ   — ddl m} | j                  «       ry || «      ryt        | j                  j                  d«      t        «      rt        d„ | j                  D «       «      ryy)Nr9   )Úis_accessor_nodeTFrƒ   c              3  ó¢   K  — | ]G  }t        |t        j                  «      r+t        |j                  j	                  d «      t
        «      –— ŒI y­w)rƒ   N)r…   r  ÚNoder   rE  rD   )rg   r¹  s     rU   rh   z6dispatch_trace.<locals>.impure_pred.<locals>.<genexpr>{  s:   è ø€ ò àÜ˜a¤§¡Ô)ô ˜1Ÿ6™6Ÿ:™: eÓ,¬l×;ñùs   ‚AA)	Úsymbolic_shapesr×  Ú	is_impurer…   r   rE  rD   rb  rï   )r,  r×  s     rU   Úimpure_predz#dispatch_trace.<locals>.impure_predj  s^   € Ý5ð �;‰;Œ=Øñ ˜AÔØô
 �q—v‘v—z‘z %Ó(¬,Ô7ô ñ àŸ™ôô ð ð rW   r   )Údedupe_symints)r,  zfx.Noder	  r§   )ÚtraceÚeliminate_dead_codeÚ,torch._inductor.fx_passes.dedupe_symint_usesrÝ  r…   r-   rË   rx   r  Ú_lazy_graph_moduleÚ_make_graph_moduler³  )r³  rŒ   Úconcrete_argsrC  rÜ  rÝ  r[  s          rU   rA   rA   a  sq   € ð �L‰L˜˜}Ó-€Eóð8 
×Ñ˜kÔ*ÝKá�5ÔÜ&0°´vÔ&>ˆ4�>‰>×"Ò"ÀDÇMÁM€DÜ× Ñ ×3Ñ3°F·K±KÀÈÓMÐMrW   c                ó€   ‡ ‡‡‡— t        j                  ‰«      \  Š}t        j                  ‰ «      dˆ ˆˆˆfd„«       }|S )Nc                 ó´  •— t        j                  | «      \  }}t        |«      t        ‰	«      k(  sJ ‚t        «       5 }t	        |t
        «      sJ ‚t        ‰	|d ‰¬«       d d d «       dˆfd„} ‰‰
Ž }t        j                  t        ||«      }t        j                  t        ˆfd„|«      }dˆfd„}t        j                  t        ||«      }|S # 1 sw Y   ŒpxY w)Nr`  c                ó"   •— t        | ‰| d„ «      S )Nc                ó   — | j                   S rR   r  r¼   s    rU   rV   zJwrap_key.<locals>.wrapped.<locals>.get_tensor_proxy_slot.<locals>.<lambda>œ  s
   € ¸!¿'¹'€ rW   r6  ©r1  rŒ   s    €rU   Úget_tensor_proxy_slotz8wrap_key.<locals>.wrapped.<locals>.get_tensor_proxy_slot›  s   ø€ Ü! ! V¨QÑ0AÓBÐBrW   c                ó"   •— t        | ‰| d„ «      S )Nc                ó   — | S rR   rf   r¼   s    rU   rV   z=wrap_key.<locals>.wrapped.<locals>.<lambda>.<locals>.<lambda>¡  s   € Èq€ rW   r6  rè  s    €rU   rV   z+wrap_key.<locals>.wrapped.<locals>.<lambda>¡  s   ø€ ¬°q¸&À!Á[Ó(Q€ rW   c                ó8   •— t        | ‰«      j                  «       S rR   )r¨   r+  rè  s    €rU   Úget_sym_proxy_slotz5wrap_key.<locals>.wrapped.<locals>.get_sym_proxy_slot¤  s   ø€ Ü! ! VÓ,×2Ñ2Ó4Ð4rW   )r1  r   r	  zUnion[Tensor, Proxy])r1  r|   r	  r(   )r]   ra  r•  Údisable_proxy_modes_tracingr…   r7  r%  Útree_map_onlyr   r˜   rD   )ÚproxiesÚ_unusedÚflat_proxiesÚproxies_specr¦  ré  r~  rí  rî   Úflat_tensorsÚtensorsrŒ   s           €€€€rU   Úwrappedzwrap_key.<locals>.wrapped“  sÑ   ø€ ä%+×%8Ñ%8¸Ó%AÑ"ˆ�lÜ�<Ó ¤C¨Ó$5Ò5Ð5Ð5Ü(Ó*ð 	X¨aÜ˜aÔ!7Ô8Ð8Ð8Ü˜l¨LÀ4ÐPVÕW÷	Xõ	Cñ �ˆkˆÜ×"Ñ"¤6Ð+@À#ÓFˆÜ×"Ñ"ÜÓQÐSVó
ˆõ	5ô ×"Ñ"¤<Ð1CÀSÓIˆØˆ
÷#	Xð 	Xús   ½"CÃC)rð  r  rñ  r  r	  rP   )r]   ra  rì   Úwraps)rî   rõ  rŒ   rr  Útensors_specrö  rô  s   ```   @rU   Úwrap_keyrù  Ž  s<   û€ ô "(×!4Ñ!4°WÓ!=Ñ€L�,ä‡_�_�QÓ÷ó ðð, €NrW   zOptional[object]ÚORIGINAL_ATENc              #  óÜ   K  — t         €Dt        j                  «       r0| a | t        j                  d<   	 d –— d a d t        j                  d<   y d –— y # d a d t        j                  d<   w xY w­w)NÚoriginal_aten)rú  Úfx_tracebackÚhas_preserved_node_metaÚcurrent_meta)rH  s    rU   Úset_original_aten_opr   ±  sf   è ø€ ô Ð¤×!EÑ!EÔ!GØˆØ59Œ×!Ñ! /Ñ2ð	>Ûà ˆMØ9=ŒL×%Ñ% oÒ6äøð !ˆMØ9=ŒL×%Ñ% oÒ6üs   ‚0A,³A ·A,ÁA)Á)A,c                  ó4   — e Zd Zdd„Z	 	 d	 	 	 	 	 	 	 	 	 dd„Zy)ÚTorchFunctionMetadataModec                ó   — || _         y rR   ©rŒ   ©r†  rŒ   s     rU   r‡  z"TorchFunctionMetadataMode.__init__Á  ó	   € Øˆ�rW   Nc                óÀ   — |xs i }|| j                   _        | j                   j                  j                  |d«      dz   | j                   j                  |<    ||i |¤ŽS )Nr   r9   )rŒ   r¤  rž  rE  ©r†  rH  Útypesrï   rð   s        rU   Ú__torch_function__z,TorchFunctionMetadataMode.__torch_function__Ä  s[   € ð ’˜2ˆØ(,ˆ�‰Ô%Ø,0¯K©K×,GÑ,G×,KÑ,KÈDÐRSÓ,TÐWXÑ,Xˆ�‰×#Ñ# DÑ)Ù�TÐ$˜VÑ$Ð$rW   ©rŒ   Ú_ProxyTracerr	  r
  ©rf   N©
rH  r=   r	  ú Tuple[torch._C._TensorMeta, ...]rï   úTuple[object, ...]rð   úOptional[Dict[str, object]]r	  r!  ©rx   ry   rz   r‡  r
  rf   rW   rU   r  r  À  sD   „ óð $&Ø.2ð
%àð
%ð 0ð
%ð !ð	
%ð
 ,ð
%ð 
ô
%rW   r  c                  ó4   — e Zd Zdd„Z	 	 d	 	 	 	 	 	 	 	 	 dd„Zy)rÐ  c                ó   — || _         y rR   r  r  s     rU   r‡  z%PreDispatchTorchFunctionMode.__init__Õ  r  rW   Nc                óÄ   — |xs i }|t         v rK| j                  j                  d||i «      }|t        j                  j
                  u rd |j                  d<   |S  ||i |¤ŽS )Nrú   rƒ   )r+   rŒ   rµ  rÐ   Ú_CÚ_set_grad_enabledr   )r†  rH  r	  rï   rð   r†   s         rU   r
  z/PreDispatchTorchFunctionMode.__torch_function__Ø  si   € ð ’˜2ˆØÔDÑDð —;‘;×*Ñ*¨?¸DÀ$ÈÓKˆDØ”u—x‘x×1Ñ1Ñ1Ø#'�—	‘	˜%Ñ ØˆKñ �TÐ$˜VÑ$Ð$rW   r  r  r  r  rf   rW   rU   rÐ  rÐ  Ô  sD   „ óð $&Ø.2ð%àð%ð 0ð%ð !ð	%ð
 ,ð%ð 
ô%rW   rÐ  c                  óè   ‡ — e Zd Zed	d„«       Z	 	 	 d
	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Ze	 	 d	 	 	 	 	 	 	 	 	 dd„«       Zdˆ fd„Z	 	 	 	 	 	 	 	 dˆ fd„Z	e
d	d„«       Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 dd„Zˆ xZS )r7  c                 ó   — yr¥   rf   r…  s    rU   Úenable_tracingz%ProxyTorchDispatchMode.enable_tracingï  ó   € àrW   c                óV  •— |r$t         j                  j                  j                  nd }t        ‰| �  |«       || _        || _        || _        || _	        || _
        t         j                  j                  j                  | _        g | _        d| _        ddlm} |j$                  | _        y )Nr   )Úconfig)rÐ   r  ÚDispatchKeyÚPreDispatchr£  r‡  rŒ   Útracing_moderr  rN  rj  Ú_TorchDispatchModeKeyÚPROXYÚ	_mode_keyÚenter_stackr:  Útorch._inductorr  r;  )	r†  rŒ   r   rr  rN  rj  Údkr  rË   s	           €rU   r‡  zProxyTorchDispatchMode.__init__ó  s�   ø€ ñ 2>ŒU�X‰X×!Ñ!×-Ò-À4ˆÜ‰Ñ˜ÔØˆŒØ(ˆÔØ(ˆÔØ$8ˆÔ!Ø,HˆÔ)ô Ÿ™×7Ñ7×=Ñ=ˆŒð DFˆÔØˆÔÝ*à'-×'EÑ'EˆÕ$rW   c                óÞ   — t        |«      5  |xs i }|t        j                  j                  fv r ||i |¤Žcd d d «       S t	        | || j
                  ||«      cd d d «       S # 1 sw Y   y xY wrR   )r   ÚprimrÉ   r¯   r€  rr  r  s        rU   Ú__torch_dispatch__z)ProxyTorchDispatchMode.__torch_dispatch__  st   € ô " $Ó'ñ 	KØ’\˜rˆFàœŸ™×+Ñ+Ð-Ñ-Ù˜TÐ, VÑ,÷		Kñ 	Kô ˜d D¨$×*;Ñ*;¸TÀ6ÓJ÷	K÷ 	Kò 	Kús   Œ+A#ÁA#Á#A,c                ó°   •— t        t        j                  j                  j                  «      }| j
                  j                  |«       t        ‰| �!  «       S rR   )	r1   rÐ   r  r!  r"  r$  rP  r£  Ú	__enter__)r†  Úmaybe_prev_proxy_moderË   s     €rU   r+  z ProxyTorchDispatchMode.__enter__  sA   ø€ ä 1´%·(±(×2PÑ2P×2VÑ2VÓ WÐØ×Ñ×ÑÐ 5Ô6Ü‰wÑ Ó"Ð"rW   c                óx   •— t         ‰| �  |||«      }| j                  j                  «       }|�t	        |«       |S rR   )r£  Ú__exit__r$  Úpopr0   )r†  Úexc_typeÚ	exc_valueÚ	tracebackÚbÚmb_previous_proxy_moderË   s         €rU   r.  zProxyTorchDispatchMode.__exit__$  sC   ø€ ô ‰GÑ˜X y°)Ó<ˆð "&×!1Ñ!1×!5Ñ!5Ó!7ÐØ!Ð-ÜÐ-Ô.àˆrW   c                 ó   — yr¥   rf   )Úclss    rU   Úis_infra_modez$ProxyTorchDispatchMode.is_infra_mode3  r  rW   c                óÄ   ‡ — t        ˆ fd„|D «       «      }‰ j                  j                  d||i «      }t        j                  |‰ j                  «      }t        ||«       |S )Nc              3  óž   •K  — | ]D  }t        |t        «      r.t        |‰j                  «      j	                  «       j
                  n|–— ŒF y ­wrR   )r…   rD   r¨   rŒ   r+  r†   )rg   r¹  r†  s     €rU   rh   z8ProxyTorchDispatchMode._compute_proxy.<locals>.<genexpr>:  sI   øè ø€ ò 
ð ô ˜!œ\Ô*ô ˜1˜dŸk™kÓ*×0Ñ0Ó2×7Ò7àóñ
ùs   ƒA
Arú   )rY   rŒ   rµ  r  r(   rè   )r†  rH  rï   r~  Ún_argsÚn_outÚp_outs   `      rU   Ú_compute_proxyz%ProxyTorchDispatchMode._compute_proxy7  s]   ø€ ô ó 
ð ô	
ó 
ˆð —‘×'Ñ'¨¸¸vÀrÓJˆÜ—‘˜ §¡Ó,ˆÜ�˜ÔØˆrW   c                óZ  — |t         j                  k(  r@t        |d   t        «      r|d   dk(  r|d   S t        |d   t        «      r|d   dk(  r|d   S |rJ ‚ ||i |¤Ž}t        |t        «      r;t        | j                  | j                  |||¬«      }t        || j                  |«       |S )Nr9   r   )rH  rï   r~  )	ÚoperatorÚmulr…   rÔ   rD   rñ   rŒ   r=  rŽ   )r†  rH  r	  rï   rð   r~  Úp_out_thunks          rU   Ú__sym_dispatch__z'ProxyTorchDispatchMode.__sym_dispatch__H  s­   € ð ”8—<‘<ÒÜ˜$˜q™'¤3Ô'¨D°©G°qªLØ˜A‘w�Ü˜D ™G¤SÔ)¨d°1©g¸ªlØ˜A‘w�ñ
 ÐˆzÙ�DÐ#˜FÑ#ˆô �cœ<Ô(Ü"Ø—‘˜T×0Ñ0°tÀ$ÈCôˆKô ˜3 §¡¨[Ô9àˆ
rW   )r	  r§   )FFT)rŒ   r  r   rÆ  rr  r§   rN  r§   rj  r§   r	  r
  r  r  )r	  r   )r0  zOptional[Type[BaseException]]r1  zOptional[BaseException]r2  zOptional[types.TracebackType]r	  zOptional[bool])rH  r=   rï   r  r~  r|   r	  r(   )
rH  r=   r	  r  rï   r  rð   úDict[str, object]r	  r!  )rx   ry   rz   Úpropertyr  r‡  r3   r)  r+  r.  Úclassmethodr7  r=  rB  rÊ  rË  s   @rU   r7  r7  í  sW  ø„ àòó ðð #Ø%*Ø-1ðFàðFð ðFð ð	Fð
 #ðFð '+ðFð 
õFð6 ð
 $&Ø.2ðKàðKð 0ðKð !ð	Kð
 ,ðKð 
òKó ðKõ#ðà/ðð +ðð 1ð	ð
 
õð òó ððØðØ&8ðØ?Hðà	óð"àðð 0ðð !ð	ð
 "ðð 
÷rW   c                  ól   ‡ — e Zd ZU 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 )rJ   rš  r™   z*MutableMapping[PySymType, _PySymProxyType]r›   rœ  r—   r›  r¢   zOptional[OpOverload]r¤  r�  rž  Fr§   rÞ   c                óÊ   •— t         ‰| �  |«       t        j                  «       | _        t        «       | _        i | _        t        d t        ¬«      | _
        d | _        i | _        y )Nr¡  )r£  r‡  Úweakrefr   r›   r8   r—   r¢   r7   r6   r™   r¤  rž  )r†  rC  rË   s     €rU   r‡  z _GraphAppendingTracerEx.__init__s  sZ   ø€ Ü‰Ñ˜ÔÜ&×8Ñ8Ó:ˆÔÜ5Ó7ˆÔØ"$ˆÔÜ%8Ø¤ô&
ˆÔ"ð "&ˆÔð  "ˆÕrW   )rC  zfx.graph.Graphr	  r
  )rx   ry   rz   r�   rÞ   r‡  rÊ  rË  s   @rU   rJ   rJ   j  s;   ø… ØFÓFØ?Ó?Ø8Ó8Ø2Ó2Ø+Ó+Ø*Ó*Ø!€O�TÓ!÷"ñ "rW   rJ   c                  ó–   ‡ — 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 )
rC   c                ó¶   •— t        ‰| �  |fi |¤Ž || _        t        | j                  «      | _        |xs i | _        t        | j                  d¬«      | _        y )NÚreal)r   )r£  r‡  Ú	new_graphrJ   rŒ   rr   r7  rÓ  )r†  ÚmodulerL  rr   rð   rË   s        €rU   r‡  z!DecompositionInterpreter.__init__…  sM   ø€ ô 	‰Ñ˜Ñ* 6Ò*Ø"ˆŒÜ-¨d¯n©nÓ=ˆŒà#6Ò#<¸"ˆÔ Ü*¨4¯;©;ÀVÔLˆ�	rW   c                óÎ   •— t         ‰| �  |||«      }t        j                  | j                  j                  |«      | j
                  «      }t        ||d | j
                  ¬«       |S ©Nr`  )r£  Úplaceholderr  r(   rL  rŒ   r%  ©r†  Útargetrï   rð   r~  r�   rË   s         €rU   rP  z$DecompositionInterpreter.placeholder“  sR   ø€ ô ‰gÑ! &¨$°Ó7ˆÜ—‘˜Ÿ™×3Ñ3°FÓ;¸T¿[¹[ÓIˆÜ˜#˜u¨t¸D¿K¹KÕHàˆ
rW   c                óÎ   •— t         ‰| �  |||«      }t        j                  | j                  j                  |«      | j
                  «      }t        ||d | j
                  ¬«       |S rO  )r£  r¯  r  r(   rL  rŒ   r%  rQ  s         €rU   r¯  z!DecompositionInterpreter.get_attrœ  sR   ø€ ô ‰gÑ˜v t¨VÓ4ˆÜ—‘˜Ÿ™×0Ñ0°Ó8¸$¿+¹+ÓFˆÜ˜#˜u¨t¸D¿K¹KÕHØˆ
rW   c                ó¢   •‡ ‡— t         ‰‰ �  |||«      }dd„Šdˆˆ fd„}‰ j                  j                  t        j                  ||«      «       |S )Nc                ó.   — | j                   j                  S rR   )r�   r†   r¼   s    rU   Úget_proxy_nodez7DecompositionInterpreter.output.<locals>.get_proxy_node«  s   € Ø—7‘7—<‘<ÐrW   c                ó4   •— t        | ‰j                  | ‰«      S rR   )r¨   rŒ   )r  rV  r†  s    €€rU   Úunwrapz/DecompositionInterpreter.output.<locals>.unwrap®  s   ø€ Ü! ! T§[¡[°!°^ÓDÐDrW   )r`   rˆ   r	  rÇ  )r  r   r	  zUnion[Tensor, fx.Node])r£  ÚoutputrL  r]   Útree_map)r†  rR  rï   rð   r~  rX  rV  rË   s   `     @€rU   rY  zDecompositionInterpreter.output¦  sF   ú€ ô ‰g‰n˜V T¨6Ó2ˆó	 ö	Eð 	�‰×ÑœfŸo™o¨f°cÓ:Ô;Øˆ
rW   c                óÎ   •— t        | j                  «      5  | j                  5  t        ‰| �  |i |¤Žcd d d «       cd d d «       S # 1 sw Y   nxY wd d d «       y # 1 sw Y   y xY wrR   )rt   rr   rÓ  r£  Úrun)r†  rï   rð   rË   s      €rU   r\  zDecompositionInterpreter.run´  sY   ø€ ô �t×/Ñ/Ó0ñ 	0°$·)±)ñ 	0Ü‘7‘; Ð/¨Ñ/÷	0÷ 	0÷ 	0ó 	0ú÷ 	0÷ 	0ñ 	0ús!   —A¤A³	AÁA	ÁAÁA$rR   )
rM  úfx.GraphModulerL  úfx.Graphrr   ú'Optional[Mapping[OpOverload, Callable]]rð   r!  r	  r
  )rR  rÆ  rï   r  rð   rC  r	  r!  )rï   r!  rð   r!  r	  r!  )	rx   ry   rz   r‡  rP  r¯  rY  r\  rÊ  rË  s   @rU   rC   rC   „  s¿   ø„ ð
 HLð	MàðMð ðMð Eð	Mð
 ðMð 
õMðØðØ!3ðØ=Nðà	õðØðØ!3ðØ=Nðà	õðØðØ!3ðØ=Nðà	õ÷0ñ 0rW   rC   c                óP   ‡ ‡— t        j                  ||f«      \  }Šdˆ ˆfd„}||fS )Nc                óF   •— t        j                  | ‰«      \  }} ‰|i |¤ŽS rR   )r]   ri  )Ú	flat_argsÚfn_argsÚ	fn_kwargsrH  rt  s      €€rU   rö  z-wrapper_and_args_for_make_fx.<locals>.wrappedÂ  s*   ø€ Ü#×2Ñ2°9¸dÓCÑˆ�Ù�WÐ* 	Ñ*Ð*rW   )rb  zList[object]r	  rP   )r]   ra  )rH  rï   rð   rb  rö  rt  s   `    @rU   Úwrapper_and_args_for_make_fxre  »  s/   ù€ ô
 ×)Ñ)¨4°¨.Ó9�O€Iˆtö+ð �IÐÐrW   c               #  óÆ   K  — t        j                  «       } t        j                  d«       	 d –— t        j                  | «       y # t        j                  | «       w xY w­w©NF)rÐ   Úis_autocast_cache_enabledÚset_autocast_cache_enabled)Ú	old_values    rU   Údisable_autocast_cacherk  É  sF   è ø€ ä×/Ñ/Ó1€IÜ	×$Ñ$ UÔ+ð4Ûä×(Ñ(¨Õ3øŒ×(Ñ(¨Õ3üs   ‚*A!­A ±A!ÁAÁA!c                  ó   — e Zd Zy)Ú#_ModuleNotInstalledAsSubmoduleErrorNrw   rf   rW   rU   rm  rm  Ó  r{   rW   rm  c                  ó   — e Zd Zdd„Zy)Ú
_AttrProxyc                 ó   — y rR   rf   ©r†  ÚbaseÚpaths      rU   Úreset_proxy_mappingz_AttrProxy.reset_proxy_mappingÙ  s   € ØrW   N©rr  r-   rs  rÆ  r	  r
  )rx   ry   rz   rt  rf   rW   rU   ro  ro  Ø  s   „ ôrW   ro  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
    c                ó�  •‡‡— t         ‰| �  «        || _        t        «       | _        t        «       | _        t        «       | _        d| _        t        t        «      | _
        | j                  j                  d¬«      D ],  \  }}| j                  t        |«         j                  |«       Œ. | Š G ˆˆfd„dt        «      Š‰| _        y )Nr   F)Úremove_duplicatec                  ó^   •‡ — e Zd Zd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>.AttrProxyc                óV  — t        |j                  j                  | j                  |j                  fi «      | _        |j                  | _        |j                  j                  | j                  _        |j                  j
                  | j                  _        | j                  ||«       y rR   )rš   rË   rx   Ú__dict__ry   rz   rt  rq  s      rU   r‡  z7_ModuleStackTracer.__init__.<locals>.AttrProxy.__init__  sy   € ô "&Ø—N‘N×+Ñ+Ø—^‘^ T§^¡^Ð4Øó"�”ð
 !%§¡�”Ø,0¯N©N×,EÑ,E�—‘Ô)Ø.2¯n©n×.IÑ.I�—‘Ô+Ø×(Ñ(¨¨tÕ4rW   c                óB   •— |‰j                   | <   |‰j                  | <   y rR   )Úproxy_pathsÚproxy_modules)r†  rr  rs  rŒ   s      €rU   rt  zB_ModuleStackTracer.__init__.<locals>.AttrProxy.reset_proxy_mapping  s#   ø€ Ø+/�×"Ñ" 4Ñ(Ø-1�×$Ñ$ TÒ*rW   c                ó”  •— t        | t        «      sJ ‚t        ‰| �  |«      }t        |‰«      r‰j                  |   }nt        |t        «      s|S |‰j
                  vr* ‰|‰j                  |    dz   |z   «      ‰j
                  |<   n2‰j
                  |   j                  |‰j                  |    dz   |z   «       ‰j
                  |   S )Nú.)r…   r-   r£  Ú__getattr__r€  Úattr_proxy_mapr  rt  )r†  r[  r«  Ú	AttrProxyrË   rŒ   s      €€€rU   rƒ  z:_ModuleStackTracer.__init__.<locals>.AttrProxy.__getattr__  sÒ   ø€ Ü! $¬Ô/Ð/Ð/ô !™7Ñ.¨tÓ4�Ü˜h¨	Ô2Ø%×3Ñ3°HÑ=‘HÜ# H¬fÔ5Ø#�OØ 6×#8Ñ#8Ñ8Ù6?Ø  &×"4Ñ"4°TÑ":¸SÑ"@À4Ñ"Gó7�F×)Ñ)¨(Ò3ð ×)Ñ)¨(Ñ3×GÑGØ  &×"4Ñ"4°TÑ":¸SÑ"@À4Ñ"Gôð ×,Ñ,¨XÑ6Ð6rW   c                ó"   •— ‰j                   |    S rR   )r€  r  s    €rU   Úget_basez7_ModuleStackTracer.__init__.<locals>.AttrProxy.get_base.  s   ø€ Ø×+Ñ+¨DÑ1Ð1rW   c                ó   •— d| j                   v sJ ‚| j                   d   }t        |t        «      sJ ‚|j                  «       D ��ci c]+  \  }}| ‰|‰j                  |    dz   t        |«      z   «      “Œ- c}}S c c}}w )NÚ_modulesr‚  )r}  r…   rÍ   rÎ   r  rÆ  )r†  Ú
submodulesr  rÀ   r…  rŒ   s       €€rU   r‰  z7_ModuleStackTracer.__init__.<locals>.AttrProxy._modules1  s‡   ø€ à! T§]¡]Ñ2Ð2Ð2Ø!Ÿ]™]¨:Ñ6�
Ü! *¬dÔ3Ð3Ð3ð '1×&6Ñ&6Ó&8÷á"˜˜Uð ™ 5¨&×*<Ñ*<¸TÑ*BÀSÑ*HÌ3ÈsË8Ñ*SÓTÑTóð ùó s   Á0A:ru  )r[  rÆ  r	  r…  )r	  r-   )r	  zDict[str, AttrProxy])
rx   ry   rz   r‡  rt  rƒ  r‡  rD  r‰  rÊ  )rË   r…  rŒ   s   @€€rU   r…  r{    s+   ù„ ó5õ2÷7õ42ð õó ôrW   r…  )r£  r‡  Ú
scope_rootr   r  r„  r€  Úcounterr   rS   Úmodule_id_cacheÚnamed_modulesr–   rP  ro  Ú
proxy_type)r†  r‹  r[  Úmodr…  rŒ   rË   s       @@€rU   r‡  z_ModuleStackTracer.__init__ð  s©   ú€ Ü‰ÑÔØ$ˆŒÜ?PÓ?RˆÔÜEVÓEXˆÔÜDUÓDWˆÔØˆŒä*¬4Ó0ˆÔØŸ™×6Ñ6ÈÐ6ÓNò 	7‰IˆD�#Ø× Ñ ¤ C£Ñ)×0Ñ0°Õ6ð	7ð ˆ÷8	œ
ô 8	ðt $ˆ�rW   c                ó¼   — || j                   u ry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…   ro  r  r)   Úpath_of_moduleÚ	NameErrorrm  )r†  r�  r  s      rU   r“  z!_ModuleStackTracer.path_of_module=  s^   € ð
 �$—/‘/Ñ!Øä�cœ:Ô&Ø×#Ñ# CÑ(Ð(ð	=Ü×(Ñ(¨¨sÓ3Ð3øÜò 	=Ü5¸1Ð<ûð	=ús   °A Á	AÁAÁAc                óV  •— t        |t        «      rt        |t        j                  «      rt        ‰| �  |||«      S t        |t        «      r|S || j                  vr | j                  ||«      | j                  |<   n| j                  |   j                  ||«       | j                  |   S rR   )
r…   r-   r  r'   r£  r­  ro  r„  r�  rt  )r†  rª  r«  r¬  rË   s       €rU   r­  z_ModuleStackTracer.getattrM  s–   ø€ ô ˜(¤FÔ+¬z¸(ÄBÇNÁNÔ/SÜ‘7‘? 4¨Ð3HÓIÐIÜ�h¤
Ô+ØˆOð ˜4×.Ñ.Ñ.Ø,0¯O©O¸HÀdÓ,KˆD×Ñ Ò)à×Ñ Ñ)×=Ñ=¸hÈÔMØ×"Ñ" 8Ñ,Ð,rW   c                óB  •— t         ‰| �  ||«      }g }| j                  j                  «       D ]'  \  }}|| j                  v sŒ|j                  ||f«       Œ) dd„}|D ]>  \  }}	 || j                  |«       | j                  |	   }
t        |
| j                  |«       Œ@ |S )Nc                ó<  — |j                  d«      }|d d |d   }}t        | t        «      sJ ‚| }|D ]4  }t        ||«      s yt	        ||«      }t        |t
        t        f«      rŒ4 y t        ||«      syt        t	        ||«      t
        «      syt        ||«       y)Nr‚  éÿÿÿÿFT)Úsplitr…   r-   r„   r­  ro  Údelattr)r‹   rR  Úatomsrs  Útarget_submodr�  Úitems          rU   Ú_delete_proxy_attrz4_ModuleStackTracer.trace.<locals>._delete_proxy_attrk  s¨   € ð —L‘L Ó%ˆEØ"'¨¨ *¨e°B©i�-ˆDÜ˜c¤6Ô*Ð*Ð*ØˆCð ò !�Ü˜s DÔ)Ù ä˜c 4Ó(�ä! #¬
´FÐ';Õ<Ù ð!ô ˜3 Ô.Øô œg c¨=Ó9¼:ÔFØä�C˜Ô'ØrW   )r‹   r-   rR  rÆ  r	  r§   )r£  rÞ  r³  rŽ  r€  rP  r*   )r†  r³  rã  rÁ   Ú!proxy_module_names_to_be_replacedr[  rM  rž  Úproxy_module_nameÚproxy_moduleÚactual_modulerË   s              €rU   rÞ  z_ModuleStackTracer.trace\  s·   ø€ ô ‰g‰m˜D -Ó0ˆð KMÐ)Ø ŸI™I×3Ñ3Ó5ò 	I‰LˆD�&Ø˜×+Ñ+Ò+Ø1×8Ñ8¸$À¸ÕHð	Ió	ð8 0Qò 	FÑ+Ð˜|Ù˜tŸy™yÐ*;Ô<Ø ×.Ñ.¨|Ñ<ˆMÜ˜¨¯	©	Ð3DÕEð	Fð
 ˆ
rW   c                óä   — ddl m} t        ||t        f«      r ||i |¤ŽS 	 t	        j
                  | ||||«      S # t        $ r+}t        j                  d|› d�«        ||i |¤ŽcY d}~S d}~w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 z°. 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.N)	Útorch._dynamor¤  r…   r'   r)   r¨  rm  ÚwarningsÚwarn)r†  r¦  r§  rï   rð   r¤  r  s          rU   r¨  z_ModuleStackTracer.call_moduleŽ  s‡   € õ 	2ô �a˜/¬;Ð7Ô8Ù˜DÐ+ FÑ+Ð+ð		,Ü×%Ñ% d¨A¨w¸¸fÓEÐEøÜ2ò 	,Ü�M‰MØ8¸¸ð <Jð Jôñ ˜DÐ+ FÑ+Õ+ûð	,ús   ¢; »	A/Á A*Á$A/Á*A/c                 ó   — yrg  rf   )r†  r¦  Úmodule_qualified_names      rU   Úis_leaf_modulez!_ModuleStackTracer.is_leaf_module¯  s   € ØrW   c                óè  •— t        ‰
| �  |i |¤Ž}|j                  dvrŽd|j                  vr| j                  |j                  d<   |j                  d   j                  «       D ]G  \  }\  }}t        |t        «      sŒ||j                  dz   |j                  z   f|j                  d   |<   ŒI |j                  dk(  r’| j                  �†d|j                  vrx| j                  j                  › d| j                  | j                     › �| j                  j                  j                  › d| j                  j                  › �f|j                  d<   d|j                  v�r|j                  dvrýt        j                  «       j!                  «       }|rÙ|D �cg c].  }|j"                  dk(  s|j$                  j'                  d	«      r|‘Œ0 }	}|	D �cg c]:  }|j$                  j'                  d
«      s|j$                  j'                  d«      s|‘Œ< }	}|	rYt(        j*                  j-                  |	«      }	dj/                  |	j1                  «       «      j3                  «       |j                  d<   |S c c}w c c}w )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.
        )rP  rY  Únn_module_stackr‚  rú   Útorch_fnrZ   Ústack_tracer§  ztorch/__init__.pyzfx/_symbolic_trace.pyzexport/_trace.pyr’  )r£  rµ  Úopr   Úmodule_stackrÎ   r…   rš   ry   rz   r¤  rx   rž  rË   r5   ÚextractÚsummaryr[  ÚfilenameÚendswithr2  ÚStackSummaryÚ	from_listrk   ÚformatÚstrip)r†  rï   rð   r†   r  ÚfqnÚmod_clsÚuser_frame_summaryÚframer®  rË   s             €rU   rµ  z_ModuleStackTracer.create_node²  sN  ø€ ô ‰wÑ" DÐ3¨FÑ3ˆð �7‰7Ð3Ñ3Ø ¨¯	©	Ñ1Ø/3×/@Ñ/@�—	‘	Ð+Ñ,à'+§y¡yÐ1BÑ'C×'IÑ'IÓ'Kò Ñ#�‘^�c˜7Ü˜g¤tÕ,àØ×*Ñ*¨SÑ0°7×3GÑ3GÑGð9�D—I‘IÐ/Ñ0°Ò5ðð �G‰G�Ò&Ø×&Ñ&Ð2Ø $§)¡)Ñ+ð ×)Ñ)×2Ñ2Ð3°1°T×5IÑ5IÈ$×J`ÑJ`Ñ5aÐ4bÐcØ×)Ñ)×3Ñ3×<Ñ<Ð=¸Q¸t×?UÑ?U×?^Ñ?^Ð>_Ð`ð%ˆD�I‰I�jÑ!ð  §	¡	Ò)¨d¯g©gÐ=VÑ.VÜ!2×!:Ñ!:Ó!<×!DÑ!DÓ!FÐÙ!ð
 "4öààŸ
™
 iÒ/Ø Ÿ>™>×2Ñ2Ð3FÔGò	 ð�ð ð "-öààŸ™×/Ñ/Ð0GÔHØ Ÿ>™>×2Ñ2Ð3EÔFò	 ð�ð ñ  ä"+×"8Ñ"8×"BÑ"BÀ;Ó"O�KØ/1¯w©w°{×7IÑ7IÓ7KÓ/L×/RÑ/RÓ/T�D—I‘I˜mÑ,àˆùò1ùòs   Æ3I*Ç?I/)r‹  r'   r	  r
  )r�  r-   r	  rÆ  rÅ  )r³  úUnion[Module, Callable]rã  r  r	  r^  )
r¦  r-   r§  r
   rï   r  rð   rC  r	  r
  )r¦  r-   r©  rÆ  r	  r§   )rï   r!  rð   r!  r	  rÇ  )rx   ry   rz   r˜  r‡  r“  r­  rÞ  r¨  rª  rµ  rÊ  rË  s   @rU   rw  rw  Ý  sœ   ø„ ñõ$K$óZ=ð -Øð-Ø#)ð-ØBRð-à	õ-ð0Ø+ð0Ø<Wð0à	õ0ðd,àð,ð ð,ð !ð	,ð
 "ð,ð 
ó,óB÷?ñ ?rW   rw  c                  ó¸   — e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Ze	 	 	 	 	 	 dd„«       Zdd„Ze	 	 	 	 dd„«       Z	dd„Z
dd„Zdd	„Zy
)Ú_MakefxTracerc                óè  — t        |xs i «      | _        | j                  j                  t        j                  j
                  j                  j                  t        j                  j                  j                  «       || _
        || _        || _        || _        || _        || _        d | _        t#        «       | _        t#        «       | _        d | _        t#        «       | _        t#        «       | _        y rR   )rÍ   rr   Ú
setdefaultrÐ   rü   rý   r  r¯   Ú_decompÚdecompositionsr   Ú_allow_non_fake_inputsrr  Úrecord_module_stackrN  rj  rÚ   r   rä   Úproxy_function_modeÚ	fx_tracerÚpython_dispatcher_modeÚtorch_fn_metadata_mode)r†  rr   r   rÄ  rr  rÅ  rN  rj  s           rU   r‡  z_MakefxTracer.__init__õ  sÑ   € ô @DØÒ% 2ó@
ˆÔ ð 	× Ñ ×+Ñ+Ü�I‰I�N‰N×$Ñ$×,Ñ,¬e¯m©m×.JÑ.J×.TÑ.Tô	
ð ".ˆÔØ,BˆÔ#Ø".ˆÔØ)<ˆÔ Ø*>ˆÔ!Ø2NˆÔ)ð ;?ˆÔÜFQÃmˆŒô ‹Mð 	Ô ð 59ˆŒÜ?J»}ˆÔ#ô ‹Mð 	Õ#rW   c                óŠ   — | j                   | j                  | j                  | j                  | j                  | j
                  gS rR   ©rÚ   rä   rÆ  rÇ  rÈ  rÉ  r…  s    rU   Ú_checkpoint_modesz_MakefxTracer._checkpoint_modes  s>   € à×!Ñ!Ø�O‰OØ×$Ñ$Ø�N‰NØ×'Ñ'Ø×'Ñ'ð
ð 	
rW   c                óX   — || _         || _        || _        || _        || _        || _        y rR   rË  )r†  Úprev_fake_tensor_modeÚprev_proxy_modeÚprev_proxy_function_modeÚprev_fx_tracerÚprev_python_dispatcher_modeÚprev_torch_fn_metadata_modes          rU   Ú_restore_modesz_MakefxTracer._restore_modes'  s2   € ð !6ˆÔØ)ˆŒØ#;ˆÔ Ø'ˆŒØ&AˆÔ#Ø&AˆÕ#rW   c              #  óü  K  — | j                  «       }	 ddlm} t        |d«      r)| j                  r|j
                  }t        |«      | _        nt        «       | _        | j                  dk(  rudd l
}|j                  j                  j                  |«      }|€Bdd lmc m} |j#                  d¬«      5  t%        d| j&                   |«       d¬	«      }d d d «       || _        n¿| j                  d
k(  r‰dd l
}|j                  j                  j                  |«      }|€C |«       }	dd lmc m} |j#                  d¬«      5  t%        d| j&                  |	¬«      }d d d «       |j*                  €J d«       ‚|| _        n'| j                  dk(  st-        d| j                  › �«      ‚| j/                  | j                  «       d –—  | j0                  |Ž  y # 1 sw Y   ŒÿxY w# 1 sw Y   Œ†xY w#  | j0                  |Ž  w xY w­w)Nr9   )ÚShapeEnvÚ	_orig_modÚfaker   F)Ú(fake_tensor_allow_unsafe_data_ptr_accessT)rÈ   Úallow_non_fake_inputsÚ	shape_envÚstatic_shapesÚsymbolic)rÈ   rÚ  rÛ  ú2shape_env should be set if tracing with 'symbolic'rK  zUnexpected tracing type: )rÌ  rÚ  rÖ  r„   rÅ  r×  rw  rÇ  r@   r   r¥  Ú_dynamoÚutilsÚdetect_fake_modeÚtorch._functorch.configÚ
_functorchr  Úpatchr#   rÄ  rÚ   rÛ  ÚAssertionErrorÚ_construct_modes_with_fx_tracerrÔ  )
r†  rî   rï   Ú
prev_modesrÖ  r‹  rÐ   rÚ   Ú_configrÛ  s
             rU   Ú_init_modes_from_inputsz%_MakefxTracer._init_modes_from_inputs7  sß  è ø€ ð ×+Ñ+Ó-ˆ
ð4	-å1ä�q˜+Ô&¨4×+CÒ+CØŸ[™[�
Ü!3°JÓ!?�•ä!0Ó!2�”à× Ñ  FÒ*Û$à#(§=¡=×#6Ñ#6×#GÑ#GÈÓ#MÐ Ø#Ð+ß=Ð=à Ÿ™ÐPU˜ÓVñ Ü+9Ø37Ø26×2MÑ2MÙ&.£jØ*.ô	,Ð(÷ð )9�Õ%Ø×"Ñ" jÒ0Û$à#(§=¡=×#6Ñ#6×#GÑ#GÈÓ#MÐ Ø#Ð+Ù (£
�Iß=Ð=à Ÿ™ÐPU˜ÓVñ Ü+9Ø38Ø26×2MÑ2MØ&/ô,Ð(÷ð %×.Ñ.Ð:ðHàGóHØ:à(8�Õ%à×(Ñ(¨FÒ2Ü(Ø3°D×4EÑ4EÐ3FÐGóð ð ×0Ñ0°·±Ô@ÛàˆD×Ñ Ò,÷Gð ú÷ ð ûð&  ˆD×Ñ Ò,üsO   ‚G<”BG( Â3GÃA,G( Ä>GÅA)G( Ç G<ÇGÇG( ÇG%Ç!G( Ç(G9Ç9G<c                ó*  — t        || j                  | j                  | j                  | j                  ¬«      | _        | j                  rt        |«      | _        | j                  dk(  s| j                  rt        «       | _	        t        |«      | _        y )N)rr  rN  rj  rÝ  )r7  r   rr  rN  rj  rä   rÐ  rÆ  r   rÈ  r  rÉ  )r†  rÇ  s     rU   ræ  z-_MakefxTracer._construct_modes_with_fx_tracerr  s}   € Ü0ØØ×ÑØ×*Ñ*Ø!%×!:Ñ!:Ø)-×)JÑ)Jô
ˆŒð ×ÒÜ'CÀIÓ'NˆDÔ$ð ×Ñ 
Ò*¨d×.?Ò.?Ü*BÓ*DˆDÔ'ä&?À	Ó&JˆÕ#rW   c              #  ó&  K  — | j                  «       }	 |j                  | _        dd„}|j                  €J ‚ ||j                  «      | _        | j                  | j                  «       d –—  | j                  |Ž  y #  | j                  |Ž  w xY w­w)Nc                ó¸   — t        | «      t        k(  r
t        «       S t        | «      t        k(  rt        | j                  «      S t	        dt        | «      › d�«      ‚)NzUnexpected tracer type: r‚  )rš   r@   rw  r‹  r¾   )Úparent_tracers    rU   Ú_create_sub_fx_tracerzD_MakefxTracer._init_modes_from_parent.<locals>._create_sub_fx_tracer�  sV   € Ü˜Ó&¬/Ò9Ü*Ó,Ð,Ü˜-Ó(Ô,>Ò>Ü-¨m×.FÑ.FÓGÐGä&Ø2´4¸Ó3FÐ2GÀqÐIóð rW   )rí  r  r	  r@   )rÌ  rÚ   rÇ  ræ  rÔ  )r†  rí  rç  rî  s       rU   Ú_init_modes_from_parentz%_MakefxTracer._init_modes_from_parent…  sŠ   è ø€ ð ×+Ñ+Ó-ˆ
ð	-Ø$1×$BÑ$BˆDÔ!óð !×*Ñ*Ð6Ð6Ð6Ù2°=×3JÑ3JÓKˆDŒNØ×0Ñ0°·±Ô@ÛàˆD×Ñ Ò,øÐˆD×Ñ Ò,üs   ‚B”AA= Á-BÁ=BÂBc           	     óÀ  ‡ — t        j                  d„ |«      }dˆ fd„}dd„} ||«      } |||«      }t        j                  t        ‰ j
                  «      }t        «       5 }|j                  t        ‰ j                  «      «       ‰ j                  r|j                  ‰ j                  «       |j                  ‰ j                  «       |j                  ‰ j                  «       |j                  ‰ j                  «       |j                  |«       |j                  t        «       «       |j                  t        ‰ «      «       ‰ j                   €J ‚t#        t%        ||‰ j                   ‰ j&                  «      ‰ j                   t)        |«      ¬«      }	d d d «       ‰ j*                  dk(  r)‰ j                  €J ‚‰ j                  j,                  	_        	S # 1 sw Y   ŒCxY w)Nc                óJ   — t         j                  j                  j                  S rR   )rÐ   r  Ú_symbolic_traceÚPHr¦   s    rU   rV   z,_MakefxTracer._trace_inner.<locals>.<lambda>¢  s   € ¬¯©×(@Ñ(@×(CÑ(C€ rW   c                ól   •‡— dŠdˆˆfd„}d„ ||dœ}t        j                  |‰j                     | «      S )Nr   c                ó’  •— ddl m} ‰j                  €J ‚ |d‰› �«      }t        | t        «      r"‰dz  Š‰j                  j                  | |¬«      S t        | «      t        u rz‰j                  dk(  rk‰j                  j                  €J d«       ‚‰j                  j                  j                  ‰j                  j                  j                  | |d ¬«      | |¬	«      S t        | t        j                  «      r4t        j                  j                  j!                  ‰j                  | «      S t        | t"        «      rJ d
| › d�«       ‚| S )Nr   )ÚConstantSourceÚinputr9   )ÚsourcerÝ  rÞ  )Úpositive)Úhintrø  zScriptObject z. has been fakified. Cannot wrap_fake it again.)Útorch._dynamo.sourcerö  rÚ   r…   r   Úfrom_tensorrš   rÔ   r   rÛ  Úcreate_symintnodeÚcreate_symbolrÐ   ÚScriptObjectÚ_libraryÚfake_class_registryÚmaybe_to_fake_objr    )r`   rö  rø  Ú	arg_countr†  s      €€rU   Úinner_wrap_fakezG_MakefxTracer._trace_inner.<locals>._wrap_fake.<locals>.inner_wrap_fake§  sZ  ø€ õ @à×,Ñ,Ð8Ð8Ð8Ù'¨%°	¨{Ð(;Ó<�Ü˜a¤Ô(Ø ‘N�IØ×0Ñ0×<Ñ<¸QÀvÐ<ÓNÐNä˜!“W¤‘^¨×(9Ñ(9¸ZÒ(Gà×-Ñ-×7Ñ7ÐCðLàKóLØCà×0Ñ0×:Ñ:×LÑLØ×-Ñ-×7Ñ7×EÑEØ˜v°ð Fó ð Ø%ð Mó ð ô   ¤5×#5Ñ#5Ô6Ü Ÿ>™>×=Ñ=×OÑOØ×-Ñ-¨qóð ô &ØÔ'ôð Uà" 1 #Ð%SÐTóUð ð �rW   c                ó   — | S rR   rf   r¼   s    rU   rV   z@_MakefxTracer._trace_inner.<locals>._wrap_fake.<locals>.<lambda>Ë  s   €  !€ rW   ©rK  rØ  rÝ  )r`   r!  r	  r!  )r]   rZ  r   )rï   r  Úwrap_fn_mapr  r†  s      @€rU   Ú
_wrap_fakez._MakefxTracer._trace_inner.<locals>._wrap_fake¤  s>   ù€ ØˆIö!ñH $Ø'Ø+ñˆKô
 —?‘? ;¨t×/@Ñ/@Ñ#AÀ4ÓHÐHrW   c                óâ   — t        t        j                  | «      d«      r:t        j                  | «      j                  j                  t        j
                  z  rt        | t        |«      «      S | S )NÚ__code__)r„   ÚinspectrX  r
  Úco_flagsÚ
CO_VARARGSrp   r•  )rî   Úphss     rU   Ú
_wrap_funcz._MakefxTracer._trace_inner.<locals>._wrap_funcÑ  sP   € äœGŸN™N¨1Ó-¨zÔ:Ü—>‘> !Ó$×-Ñ-×6Ñ6¼×9KÑ9KÒKô & a¬¨S«Ó2Ð2ØˆHrW   )rŒ   rã  rÝ  )rï   rM   r	  rM   )rî   úCallable[_P, R]r  zSequence[PHBase]r	  r  )r]   rZ  rœ   r�   r7  rä   r   Úenter_contextrt   rr   rÚ   rÈ  rÆ  rÉ  rk  Ú_set_make_fx_tracerrÇ  rA   rù  rr  rY   r   rÛ  )
r†  rî   rï   r  r  r  rH  rä   Ústackr1  s
   `         rU   Ú_trace_innerz_MakefxTracer._trace_inner¡  s�  ø€ Ü�o‰oÑCÀTÓJˆõ+	IóZ	ñ ˜$ÓˆÙ˜!˜SÓ!ˆô .4¯[©[Ü" D§O¡Oó.
ˆ
ô ‹[ð 	˜EØ×Ñ¤	¨$×*BÑ*BÓ CÔDØ×$Ò$Ø×#Ñ# D×$9Ñ$9Ô:Ø×Ñ × ;Ñ ;Ô<Ø×Ñ × 8Ñ 8Ô9Ø×Ñ × ;Ñ ;Ô<Ø×Ñ 
Ô+Ø×ÑÔ 6Ó 8Ô9Ø×ÑÔ 3°DÓ 9Ô:à—>‘>Ð-Ð-Ð-ÜÜ˜˜t T§^¡^°T×5FÑ5FÓGØ—~‘~Ü# C›jôˆA÷	ð& ×Ñ 
Ò*Ø×(Ñ(Ð4Ð4Ð4Ø×/Ñ/×9Ñ9ˆAŒKØˆ÷-	ð 	ús   Á"D0GÇGc                óx   — | j                  ||«      5   | j                  |g|¢­Ž cd d d «       S # 1 sw Y   y xY wrR   )ré  r  )r†  rî   rï   s      rU   rÞ  z_MakefxTracer.traceþ  s<   € Ø×)Ñ)¨!¨TÓ2ñ 	/Ø$�4×$Ñ$ QÐ.¨Ò.÷	/÷ 	/ò 	/ús   “0°9c           	     ó  — t        | j                  d| j                  | j                  | j                  | j
                  | j                  «      }|j                  | «      5   |j                  |g|¢­Ž cd d d «       S # 1 sw Y   y xY w)NrK  )	r¿  rr   rÄ  rr  rÅ  rN  rj  rï  r  )r†  rî   rï   Ú
sub_tracers       rU   Útrace_subgraphz_MakefxTracer.trace_subgraph  s   € ä"Ø×$Ñ$ØØ×'Ñ'Ø×ÑØ×$Ñ$Ø×%Ñ%Ø×-Ñ-ó
ˆ
ð ×/Ñ/°Ó5ñ 	5Ø*�:×*Ñ*¨1Ð4¨tÒ4÷	5÷ 	5ò 	5ús   ÁA<Á<BN)rr   r_  r   rÆ  rÄ  r§   rr  r§   rÅ  r§   rN  r§   rj  r§   r	  r
  )r	  z	List[Any])rÎ  zOptional[FakeTensorMode]rÏ  z*Union[nullcontext, ProxyTorchDispatchMode]rÐ  z0Union[nullcontext, PreDispatchTorchFunctionMode]rÑ  zOptional[PythonKeyTracer]rÒ  zUnion[nullcontext, Any]rÓ  z-Union[nullcontext, TorchFunctionMetadataMode]r	  r
  )rî   r
   rï   r  r	  úGenerator[None, None, None])rÇ  r  r	  r
  )rí  r¿  r	  r  )rî   r
   rï   r!  r	  r'   )rî   r
   rï   r!  r	  r]  )rx   ry   rz   r‡  rÌ  rÔ  r   ré  ræ  rï  r  rÞ  r  rf   rW   rU   r¿  r¿  ô  s  „ ð&àDð&ð ð&ð !%ð	&ð
 ð&ð "ð&ð #ð&ð '+ð&ð 
ó&óP
ðBà7ðBð DðBð #Sð	Bð
 2ðBð &=ðBð &SðBð 
óBð  ð8-Øð8-Ø!3ð8-à	$ò8-ó ð8-ótKð& ð-Ø*ð-à	$ò-ó ð-ó6[óz/ô5rW   r¿  zOptional[_MakefxTracer]Ú_CURRENT_MAKE_FX_TRACERc              #  ó8   K  — t         }	 | a d –— |a y # |a w xY w­wrR   )r  )rŒ   Úprev_tracers     rU   r  r    s'   è ø€ ô *€Kð.Ø"(ÐÛà"-Ñø +Ñüs   ‚Š �“—F)rr  rÅ  rN  rj  c          	     óv   ‡ ‡	— |dv sJ ‚t        |||||||«      Š	t        j                  ‰ «      dˆ ˆ	fd„«       }|S )zÚ
    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.
    r  c                 ó*   •—  ‰j                   ‰g| ¢­Ž S rR   )rÞ  )rï   rî   Úmake_fx_tracers    €€rU   rö  zmake_fx.<locals>.wrapped<  s   ø€ à#ˆ~×#Ñ# AÐ-¨Ò-Ð-rW   )rï   r!  r	  r'   )r¿  rì   r÷  )
rî   rr   r   rÄ  rr  rÅ  rN  rj  rö  r  s
   `        @rU   rB   rB     sW   ù€ ð" Ð7Ñ7Ð7Ð7ä"ØØØØØØØ$ó€Nô ‡_�_�QÓõ.ó ð.ð €NrW   c                 óR   — t         j                  j                  j                  «       S rR   )rÐ   rà  Ú_python_dispatchÚ _get_current_dispatch_mode_stackrf   rW   rU   Úget_torch_dispatch_modesr#  C  s   € Ü�;‰;×'Ñ'×HÑHÓJÐJrW   c                 ó   — t        «       S rR   )rF   rf   rW   rU   rE   rE   I  s   € ÜÓÐrW   c                 ó4  — t         j                  j                  t         j                  j                  j
                  «      } t         j                  j                  t         j                  j                  j
                  «      }| �|�J d| › d|› �«       ‚| xs |S )z–
    Current the currently active proxy tracing mode, or None if
    we are not currently tracing.  This includes pre-dispatch proxy
    tracing.
    zpre_dispatch_mode=z, mode=)rÐ   r<  Ú_get_dispatch_mode_pre_dispatchr  r!  r"  Ú_get_dispatch_mode)rÒ  rÓ  s     rU   rF   rF   M  s†   € ô Ÿ
™
×BÑBÜ�‰×&Ñ&×,Ñ,óÐô �8‰8×&Ñ&¤u§x¡x×'EÑ'E×'KÑ'KÓL€DàÐ! T \ð=à	Ð-Ð.¨g°d°VÐ<ó=Ø1àÒ$ Ð$rW   c                óŠ   — t        «       }|sJ ‚t        «       5  g }|j                  | |||«      cddd«       S # 1 sw Y   yxY w)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.
    N)rF   rî  rB  )rH  rï   rð   rÓ  r	  s        rU   rG   rG   ]  sM   € ô Ó€DÙ€Kˆ4ô 
%Ó	&ñ @àˆØ×$Ñ$ T¨5°$¸Ó?÷@÷ @ò @ús	   ™9¹Ac                 ó\   — t        t        j                  j                  j                  «      S rR   )r/   rÐ   r  r!  r"  rf   rW   rU   rî  rî  m  s   € äœuŸx™x×=Ñ=×CÑCÓDÐDrW   c                óÌ   — |t         v rF| 5  | xj                  dz  c_        t        |   |i |¤Ž}| xj                  dz  c_        |cd d d «       S t        S # 1 sw Y   t        S xY w)Nr9   )rL   r:  rd  )rä   r¯  rï   rð   r~  s        rU   re  re  r  sn   € ð 
Ô(Ñ(Øñ 	Ø×$Ò$¨Ñ)Õ$Ü-¨bÑ1°4ÐB¸6ÑBˆCØ×$Ò$¨Ñ)Õ$Ø÷		ñ 	ô Ð÷	ô Ðús   ‹:AÁA#c                óŽ   — t        | ||«      \  }}t        «       5   t        |||¬«      |«      }ddd«       |S # 1 sw Y   S xY w)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.
    )rr   r   N)re  rî  rB   )rH  rï   rð   r   rr   rö  Úall_argsÚgms           rU   Úget_isolated_graphmoduler.  ‚  sY   € ô 5°T¸4ÀÓHÑ€GˆXä	$Ó	&ñ ð
ŒWØÐ)<È<ô
à
óˆ÷ð €I÷	ð €Iús	   ›:ºAc                ó>  — ddl m} t        j                  j	                  t        j                  j
                  j                  «      }|rT|j                  rG ||j                  | «      x}r1t        |t        «      sJ |«       ‚||j                  j                  d<   yyyy)zOA helper function for setting up unbacked_bindings on the destination FX graph.r9   )Úcompute_unbacked_bindingsÚunbacked_bindingsN)rÚ  r0  rÐ   r  r'  r!  ÚFAKErÛ  r…   r(   r†   r   )r~  Ú	out_proxyr0  rÃ   Úsymbol_to_paths        rU   r"  r"  ˜  s…   € å:ô —‘×+Ñ+¬E¯H©H×,JÑ,J×,OÑ,OÓP€IÙ�Y×(Ò(Ù6°y×7JÑ7JÈCÓPÐPˆ>ÐPÜ˜i¬Ô/Ð:°Ó:Ð/Ø7EˆI�N‰N×ÑÐ 3Ò4ð Qð )€yrW   )rj   r  rn   rÔ   r	  r  )rr   r_  r	  z4Generator[Mapping[OpOverload, Callable], None, None])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‹   z.Union[PySymType, _AnyScriptObjectType, Tensor]rŒ   r  r�   r!  r	  r
  )r‹   r   rŒ   r  r	  r§   )r‹   r   rŒ   r  r	  rˆ   )r‹   r   rŒ   r  r¯   rN   r	  zUnion[_ProxyTensor, U])
r‹   r   rŒ   r  r¯   rN   r³   zCallable[[_ProxyTensor], R]r	  úUnion[R, U])r‹   rÈ  rŒ   r  r	  r(   )r‹   rÈ  rŒ   r  r¯   rN   r	  zUnion[Proxy, U])
r‹   rÈ  rŒ   r  r¯   rN   r³   zCallable[[Proxy], R]r	  r5  )r‹   r|   rŒ   r  r	  rž   )r‹   r|   rŒ   r  r¯   rM   r	  zUnion[T, _PySymProxyType])
r‹   r|   rŒ   r  r¯   rN   r³   zCallable[[_PySymProxyType], R]r	  r5  )
r‹   ú.Union[Tensor, _AnyScriptObjectType, PySymType]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ï   r  rð   r  r	  zThunk[R])
r  r   r�   r(   r  r'  rŒ   r  r	  r
  )
r#  rM   r$  r  r  r  rŒ   r  r	  rM   )rŒ   r  r	  z5Callable[[PySymType], Union[bool, int, float, Proxy]])rŒ   r  r1  r   r	  zUnion[_ProxyTensor, Tensor])rŒ   r  r1  rÈ  r	  rÉ  )rŒ   r  r1  r|   r	  z!Union[_PySymProxyType, PySymType])rŒ   r  r1  r6  r	  r!  )rH  r!  rä   r7  r	  r
  )rä   r7  rH  r=   rr  r§   rï   r  rð   rC  r	  r!  rR   )r³  r½  rŒ   r)   rã  zOptional[Tuple[Any, ...]]r	  r'   )
rî   r  rõ  r  rŒ   r  rr  r§   r	  r  )rH  r=   r	  r  )rH  zCallable[..., R]rï   r  rð   rC  r	  z0Tuple[Callable[[List[object]], R], List[object]])rŒ   r¿  r	  r  )NrK  F)rî   r
   rr   r_  r   rÆ  rÄ  r§   rr  r§   rÅ  r§   rN  r§   rj  r§   r	  zCallable[..., GraphModule])r	  zList[TorchDispatchMode])r	  z Optional[ProxyTorchDispatchMode])rH  r  rï   r  rð   r  r	  rP   )r	  z-Generator[ProxyTorchDispatchMode, None, None])
rä   r7  r¯  r=   rï   r  rð   rC  r	  r!  )rK  N)rH  r
   rï   r  rð   rC  r   rÆ  rr   r_  r	  r'   )r~  r!  r3  r  r	  r
  )ÊÚ
__future__r   rì   r  Úloggingr?  r2  rœ   rÖ   r¦  rH  Úcollectionsr   Ú
contextlibr   r   r   Údataclassesr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rÐ   Ú
torch._opsÚtorch.fxr  Útorch.fx.tracebackrý  Útorch.utils._pytreerà  Ú_pytreer]   r   r   r   Útorch._dispatch.pythonr   Ú"torch._library.fake_class_registryr    Útorch._subclasses.fake_implsr!   Útorch._subclasses.fake_tensorr"   r#   r$   r%   Útorch._subclasses.meta_utilsr&   r'   r(   r)   Útorch.fx.graph_moduler*   Útorch.fx.noder+   Útorch.fx.passes.shape_propr,   Útorch.nnr-   rÏ  r.   Útorch.utils._python_dispatchr/   r0   r1   r2   Útorch.utils._statsr3   Útorch.utils._thunkr4   Útorch.utils._tracebackr5   Útorch.utils.weakr6   r7   r8   Ú_backward_stater:   Úsym_noder;   r	  Úcollections.abcr<   rŸ   r=   Útorch.fx._symbolic_tracer>   Útorch.typesr?   Ú__all__r  rÿ  r˜   rÈ  rü   rý   r(  Ú	getLoggerrx   r”   Ú_loggingÚgetArtifactLoggerrc  rL   r�   r^  rM   rN   rO   rP   rš   Únull_ctx_typeÚregister_pytree_nodeÚSizerp   rt   r!  Ú
proxy_slotrv   Ú
no_defaultrD   r|   r~   r‡   rŽ   rª   rž   r¨   rÅ   rÆ  rÔ   rÕ   r§   rÆ   rÌ   rà   rI   rH   rè   rñ   r  r  r  r%  rˆ   r.  r2  r±  r²  rM  rJ  r€  r‚  r@   rÔ  Ú_disable_dynamorA   rù  rú  r   r  rÐ  r7  r�   ÚGraphAppendingTracerrJ   ÚInterpreterrC   re  rk  r”  rm  ro  rw  r¿  r  r  rB   r#  rE   rF   rG   rî  re  r.  r"  rf   rW   rU   ú<module>r`     s£
  ðö #ã Û Û Û Û Û Û Û Û Ý #ß =Ñ =Ý !÷÷ ÷ ÷ ñ ÷" ;Ñ :Ý %ã Û Ý ß )Ð )ß $Ð $ß )Ñ )Ý ;Ý ?Ý 4÷ó õ 7ß /Ñ /Ý .Ý KÝ ?Ý Ý -÷ó õ %Ý $Ý 4ß WÑ Wå *Ý ñ ÛÝ.ãå%Ý/Ý'ò€ð ÐAÑB€à×&Ñ&Ð(8Ð9Ð Ø˜U×/Ñ/Ð1AÐAÑBÐ à‡y�y‡~�~€Ø‡y�y‡~�~€à€g×Ñ˜Ó!€Ø—n‘n×6Ñ6°xÐARÓSÐ à=?Ð Ð:Ó ?àÐ áˆCƒL€ÙˆCƒL€Ùˆtƒ_€ÙˆCƒL€á�[Ó!€ð €× Ò Ø	‡J‚JÙÙñõ	óBð ð	>Ø@ð	>à9ò	>ó ð	>ñ ‹X€
÷	ñ 	ñ ‹\€
ç /ôˆxô óMð
 
òó 
ðð 
ðØ	ðØ'3ðØ<Aðà	òó 
ðð 
ðØ	ðØ(ðØ1@ðà	òó 
ðð)AØ	7ð)Aàð)Að ð)Að 
ó	)AóXDð
 ˜‘,€ð 
ðØ	ðàðð òó 
ðð 
ðØ	ðàðð ðð ò	ó 
ðð 
ðØ	ðàðð ðð +ð	ð
 òó 
ðð 
ðØ	ðàðð òó 
ðð 
ðØ	ðàðð ðð ò	ó 
ðð 
ðØ	ðàðð ðð $ð	ð
 òó 
ðð 
ðØ	ðàðð òó 
ðð 
ðØ	ðàðð ðð ò	ó 
ðð 
ðØ	ðàðð ðð .ð	ð
 òó 
ðð !Ù%ð	Ø	7ðàðð ðð ð	ð
 óó>ð Ø	ØØØØÐÑØÐ$Ñ%ØˆSÐ#Ð#Ñ$ØØØØð		ññ€ó !(ðH à,0ñ%Øð%Ø%)ð%à ò%ó ð%ð$ òó ðð òó ðó0	ð Øð Ø,ð Ø5<ð ØHQð àó ðFBØðFBØ ðFBØ/?ðFBØIUðFBà	óFBðR Ø	ˆ8�OÑ$ g¨f°oÐ.EÑ&FÐFñ€ð Ø
ˆHÐ%Ñ&¨°Ð8HÐ0HÑ(IÐIñ€ð
TØðTàðTð 'ð	Tð
 ðTð óTðn ÷ð ó ðð
Øðà:óð* 
òó 
ðð 
ðØðØ1ðà'òó 
ðð 
ðØðØ&ðà&òó 
ðð(Øð(ØKð(àó(ð ˜Ÿš×+Ò+¨ZÐ8€ð=Ø
ð=Ø4ð=à	ó=ð4SØ&ðSà
ðSð ðSð ð	Sð
 ðSð óS÷l'ñ 'ô>O�fô Oðd ò!ó ð!ðB ×Òð 04ð)NØ
!ð)Nàð)Nð -ð)Nð ò	)Nó ð)NðXØðØ!(ðØ2>ðØNRðàóð@ #'€ÐÓ &ð òó ðô%Ð 1ô %ô(%Ð#4ô %ô2zÐ.ô zôz"˜bŸhšh×;Ò;ô "ô440˜rŸ~š~ô 40ðnØ
ðØ"4ðØ>Oðà5óð ò4ó ð4ô	¨)ô 	÷
ñ ô
T˜ô T÷nZ5ñ Z5ðz 48Ð Ð0Ó 7ð ò.ó ð.ð DHØØ#(ð	!ð Ø %Ø!&Ø)-ñ!Øð!à@ð!ð ð!ð !ð	!ð ð!ð ð!ð ð!ð #'ð!ð  ó!óHKóó%ó @ð  òEó ðEðØ&ðàðð ðð ð	ð
 óð( ØCGðØ
ðà
ðð ðð ð	ð
 Aðð óô,FrW   