ó
    Eñið´ ã            	      óÌ  • % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
JrJr  S SKJrJrJrJr  S SKJrJrJrJr  S SKJr  S SKJrJrJrJrJrJrJrJ r J!r!  S SKJ"r"J#r#J$r$J%r%  S S	K	J&r&  S SK'r'S SK(r'S SK)J*r*  S SK+J*s  J,r-  S SK.J/s  J0r1  S S
K'J2r2J3r3J4r4  S SK5J6r6  S SK7J8r8  S SK9J:r:J;r;  S SK<J=r=  S SK(J>r>  S SK?J@r@  S SKAJBrBJCrCJDrDJErEJFrF  S SKGJHrH  S SKIJJrJ  S SK)JKrKJLrLJMrM  S SKNJOrO  S SKPJQrQJRrRJSrS  S SKTJUrU  S SKVJWrW  S SKXJYrY  S SKZJ[r[J\r\J]r]J^r^J_r_  S SK`Jara  S SKbJcrc  S SKdJereJfrfJgrg  SSKhJiri  SS KjJkrk  \(       a*  S SKlrlS S!KJmrm  S SKnrnS S"KoJprp  S S#K(Jqrq  S S$KrJsrs  S S%KtJuruJvrvJwrw  / S&Qrx\!S'   ry\'Rô                  \84r{\!\'Rô                  \84   r|\'Rú                  Rü                  r~\'Rú                  Rþ                  r\GR                   " \�5      r‚\'GR                  GR	                  \�S(5      r…0 q†S)\‡S*'   Srˆ\ " S+5      r‰\ " S,5      rŠ\"" S-5      r‹\ " S.5      rŒ\$" S/5      r�\Ž" \5      r�\1GR                   " \'GR"                  S0 S1 S2 S3S49  \'GR"                  \’0r“S¨S5 jr”\    S©S6 j5       r•\–" 5       r— " S7 S85      r˜\˜" 5       r™S S9KtJšršJ›r›   " S: S;\5      rœSªS< jr� " S= S>\GR<                  5      rŸ\Ÿ" 5       r 0 q¡S?\‡S@'   S«SA jr¢\S¬SB j5       r£\S­SD j5       r¤\        S®SE j5       r¤\        S¯SG j5       r¤        S°SH jr¤S±SI jr¥\c\L   r¦SJ\‡SF'   \c\L   r§SJ\‡SK'   \      S²SL j5       r¨\        S³SM j5       r¨\          S´SN j5       r¨\      SµSO j5       r¨\        S¶SP j5       r¨\          S·SQ j5       r¨\      S¸SR j5       r¨\        S¹SS j5       r¨\        SºST j5       r¨\          S»SU j5       r¨\™SV 4         S¼SW jjr¨S½SX jr©\GRT                  S¾SY j5       r« S¿       SÀSZ jjr¬SÁSÂS\ jjr­S\›-  \;-  \|-  \i-  \®S]   -  \’S^   -  \¯\°S]4   -  \4-  \±-  \²-  \³-  r´SJ\‡S]'   SÁSÃS_ jjrµ\S`Sa.     SÄSb jj5       r¶\S¬Sc j5       r·\S¬Sd j5       r¸SÅSe jr¹          SÆSf jrº          SÇSg jr»\!\L\Sh   \\–Sh4   4   r¼\!\4\Si   \\–Si4   4   r½          SÈSj jr¾\ " Sk SC5      5       r¿    SÉSl jrÀ\      SÊSm j5       rÁ\      SËSn j5       rÁ\      SÌSo j5       rÁ\      SÍSp j5       rÁ      SÎSq jrÁ\4\'GR„                  GR†                  \B4rÄ      SÏSs jrÅ      SÐSt jrÆ            SÑSu jrÇ " Sv Sw5      rÈ\ " Sx Sy5      5       rÉ " Sz S{\M5      rÊ S¿     SÒS| jjrË    SÓS} jrÌ\'GRš                   S¿       SÔS~ jj5       rÎ          SÕS jrÏSqÐS€\‡S�'   \    SÖS‚ j5       rÑ " Sƒ S„\Y5      rÒ\Ì" \Ò5      rÓ " S… S†\Y5      rÔ\Ì" \Ô5      rÕ " S‡ Sr\_5      rÖ          S×Sˆ jr×          SØS‰ jrØ " SŠ S‹\*GR²                  GR´                  5      rÛ " SŒ S�\*GR¸                  5      rÝ " SŽ S�\*GR¸                  5      rÞ      SÙS� jrß        SÚS‘ jrà\S¬S’ j5       rá " S“ S”\â5      rã " S• S–5      rä " S— S˜\Ê5      rå " S™ Sš5      ræSqçS›\‡Sœ'   \SÛS� j5       rè   SÜS[S[S[S`S[S[S[Sž.                       SÝSŸ jjjréSÞS  jrêSßS¡ jrëSßS¢ jrì        SàS£ jrí\SáS¤ j5       rî          SâS¥ jrï  Sã           SäS¦ jjrðSåS§ jrñg)æé    )ÚannotationsN)ÚdefaultdictÚOrderedDict)ÚCallableÚ	GeneratorÚMappingÚSequence)Ú_GeneratorContextManagerÚcontextmanagerÚ	ExitStackÚnullcontext)Ú	dataclass)	ÚAnyÚConcatenateÚOptionalÚoverloadÚProtocolÚTYPE_CHECKINGÚ	TypeAliasÚTypeVarÚUnion)Ú	ParamSpecÚSelfÚTypeVarTupleÚUnpack)ÚWeakKeyDictionary)ÚSymBoolÚSymIntÚTensor)Úenable_python_dispatcher)ÚFakeScriptObject)Úis_opaque_valueÚ
OpaqueType)Útrace_structured)ÚHigherOrderOperator)Ú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)Úcount)ÚThunk)Ú_WeakHashRefÚWeakIdKeyDictionaryÚWeakTensorKeyDictionaryé   )ÚBackwardState)ÚSymNode)ÚMutableMapping)ÚFunctionalizeCtxWrapper)Ú
OpOverload)ÚPHBase)Ú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)rL   Ú_GraphAppendingTracerExÚnot_implementedúMapping[OpOverload, Callable]ÚCURRENT_DECOMPOSITION_TABLEÚTÚUÚ_PÚRÚ_Tsc                ó   • [        U 5      S 4$ ©N)Úlist)Úxss    Ú_/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/fx/experimental/proxy_tensor.pyÚ<lambda>re   …   s   € ”�R“˜$Ñó    c                ó   • [        U 5      $ ra   )Útuple)rc   Ú_s     rd   re   re   †   s   € ”%˜”)rf   c                ó~   • [        U 5       VVs/ s H  u  p[        R                  " U5      U4PM     snnS 4$ s  snnf ra   )Ú	enumerateÚpytreeÚSequenceKey)rc   ÚiÚxs      rd   re   re   ˆ   s5   € Ü09¸"´Ô>²©¨Œ&×
Ò
˜QÓ
 Ó	#±Ò>Øñ%ùÛ>s   �$9z
torch.Size)Úflatten_with_keys_fnÚserialized_type_namec                ón   • SR                  S [        U5       5       5      n[        SU SU S3SU 05      $ )z*FX gets confused by varargs, de-confuse itÚ,c              3  ó,   #   • U  H
  nS U 3v •  M     g7f)ÚargN© )Ú.0rn   s     rd   Ú	<genexpr>Ú!fake_signature.<locals>.<genexpr>™   s   é € Ð8ª< a˜#˜a˜S�	ª<ùs   ‚zlambda z: fn(Ú)Úfn)ÚjoinÚrangeÚeval)r{   ÚnargsÚargnamess      rd   Úfake_signaturer�   —   s:   € à�x‰xÑ8¬5°¬<Ó8Ó8€HÜ�'˜(˜ 5¨¨
°!Ð4°t¸R°jÓAÐArf   c              #  óR   #   • [         nU =(       d    0 q  [         v •  Uq g ! Uq f = f7fra   )rZ   )Údecomposition_tableÚold_decomposition_tables     rd   Ú	decomposer…   �   s0   é € ô
 :ÐØ"5×";¸Ðð>Ü)Ò)à&=Ñ#øÐ&=Ñ#üs   ‚'•  �' $¤'c                  ó   • \ rS rSrSrg)Ú
_NoDefaulté®   rv   N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__rv   rf   rd   r‡   r‡   ®   ó   † Úrf   r‡   )rQ   Ú	PySymTypec                  ó    • \ rS rSr% S\S'   Srg)Ú_HasMetaé·   zdict[str, PySymType]Úmetarv   N©rŠ   r‹   rŒ   r�   Ú__annotations__rŽ   rv   rf   rd   r’   r’   ·   s   ‡ Ø
Örf   r’   c                ó    • [        U S5      (       d  [        S5      eSU R                  ;   =(       a    [        U R                  S   [        5      $ )Nr”   z3All nodes traced with proxy_tensor should have metaÚval)ÚhasattrÚAssertionErrorr”   Ú
isinstancerQ   )Únodes    rd   Úis_sym_noder�   »   s?   € Ü�4˜× Ñ ÜÐRÓSÐSØ�D—I‘IÑ×L¤*¨T¯Y©Y°uÑ-=¼|Ó"LÐLrf   c                  ó$   • \ rS rSr% SrS\S'   Srg)Ú_DisableUpdateTensorTrackeréÁ   FÚboolÚvaluerv   N)rŠ   r‹   rŒ   r�   r¢   r–   rŽ   rv   rf   rd   rŸ   rŸ   Á   s   ‡ Ø€Eˆ4Örf   rŸ   zdict[int, torch.fx.Node]Ú'_FAKE_TENSOR_ID_TO_PROXY_MAP_FOR_EXPORTc                 ó"   • [         R                  $ )z;
Returns current state of disabling update tensor tracker.
©Ú"_disable_update_tensor_tracker_tlsr¢   rv   rf   rd   Ú/_is_proxy_tensor_update_tensor_tracker_disabledr§   Ë   s   € ô .×3Ñ3Ð3rf   c               #  ó‚   #   • [         R                  n S[         l         Sv •  U [         l        g! U [         l        f = f7f)ap  
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    rd   Ú+_proxy_tensor_disable_update_tensor_trackerrª   Ò   s6   é € ôJ 4×9Ñ9€JØ/3Ô&Ô,ð>Ûà3=Ô*Õ0ø°:Ô*Õ0üs   ‚?Ÿ/ £?¯<¼?Ú_ProxyTensorc                ó   • g ra   rv   ©ÚobjÚtracerÚproxys      rd   Úset_proxy_slotr±   ÿ   s   € ØTWrf   c                ó   • g ra   rv   r­   s      rd   r±   r±     ó   € ð rf   Ú_PySymProxyTypec                ó   • g ra   rv   r­   s      rd   r±   r±   	  r³   rf   c                ón  • [         R                  SU [        U 5      U5        [        U [        5      (       aZ  [        U[
        5      (       d  [        S[        U5       35      eXR                  ;  d  [        5       (       d  X!R                  U '   g g [        U [        5      (       d  [        U 5      (       a;  [        U[        5      (       d  [        S[        U5       35      eX!R                  U '   g [        U [        5      (       d  [        S[        U 5       35      eXR                  ;  aŠ  [         R"                  " [$        U5      nX!R                  U '   SS Kn[        U R(                  R*                  UR,                  5      (       a-  [/        X 5      UR0                  U R(                  R*                  '   g g g )Nzset_proxy_slot %s (%s) %szExpected _ProxyTensor, got úExpected Proxy, got úExpected py_sym_types, got r   )ÚlogÚdebugÚidr›   r   r«   rš   ÚtypeÚtensor_trackerr§   Ú_AnyScriptObjectr"   r/   Úscript_object_trackerrQ   Úsymnode_trackerÚtypingÚcastr´   Úsympyrœ   ÚexprÚSymbolÚ_SympyExprTrackerValueÚsympy_expr_tracker)r®   r¯   r°   rÃ   s       rd   r±   r±     s]  € ô
 ‡I�IÐ)¨3´°3³¸Ô?Ü�#”v×Ñô ˜%¤×.Ñ.Ü Ð#>¼tÀE»{¸mÐ!LÓMÐMð ×,Ñ,Ó,ÜB×DÑDà).×!Ñ! #Ò&ð Eô 
�CÔ*×	,Ñ	,´À×0DÑ0Dä˜%¤×'Ñ'Ü Ð#7¼¸U»°}Ð!EÓFÐFØ,1×$Ñ$ SÒ)ô ˜#œ|×,Ñ,Ü Ð#>¼tÀC»y¸kÐ!JÓKÐKØ×,Ñ,Ó,Ü—K’K¤°Ó7ˆEØ*/×"Ñ" 3Ñ'ó ä˜#Ÿ(™(Ÿ-™-¨¯©×6Ñ6Ü;QØó<�×)Ñ)¨#¯(©(¯-©-Ò8ð 7ð% -rf   c                ó”   • [        U [        [        45      (       d  [        S[	        U 5       35      e[        [        XSS 5      5      $ )Nz Expected Tensor or SymNode, got Fc                ó   • g©NTrv   )ri   s    rd   re   Ú has_proxy_slot.<locals>.<lambda>J  s   € ¸Trf   )r›   r   rD   rš   r¼   r¡   Úget_proxy_slot©r®   r¯   s     rd   Úhas_proxy_slotrÎ   F  s?   € Ü�cœF¤GÐ,×-Ñ-ÜÐ?ÄÀSÃ	¸{ÐKÓLÐLä”˜s¨E±>ÓBÓCÐCrf   r   Ú_OpaqueObjectProxyTypec                ó   • g ra   rv   rÍ   s     rd   rÌ   rÌ   Q  s   € ð rf   c                ó   • g ra   rv   ©r®   r¯   Údefaults      rd   rÌ   rÌ   X  s   € ð
 !rf   c                ó   • g ra   rv   ©r®   r¯   rÓ   Ú	transforms       rd   rÌ   rÌ   `  ó   € ð rf   c                ó   • g ra   rv   rÍ   s     rd   rÌ   rÌ   i  s   € ð rf   c                ó   • g ra   rv   rÒ   s      rd   rÌ   rÌ   p  s   € ð
 rf   c                ó   • g ra   rv   rÕ   s       rd   rÌ   rÌ   x  r×   rf   c                ó   • g ra   rv   rÍ   s     rd   rÌ   rÌ   �  s   € ð rf   c                ó   • g ra   rv   rÒ   s      rd   rÌ   rÌ   ˆ  s   € ð
 !$rf   c                ó   • g ra   rv   rÒ   s      rd   rÌ   rÌ   �  s   € ð
 (+rf   c                ó   • g ra   rv   rÕ   s       rd   rÌ   rÌ   ˜  r×   rf   c                ó   • U $ ra   rv   ©ro   s    rd   re   re   ¨  s   € ¡Arf   c           	     ó"  • [        U [        5      (       a  UR                  nOj[        U [        5      (       d  [	        U 5      (       a  UR
                  nO8[        U [        5      (       d  [        S[        U 5       35      eUR                  nUR                  U 5      nUc¤  [        U [        5      (       a�  U R                  R                  5       (       ap  UR                  R                  U R                  R                  5      =nb  UR                  nO1[!        XR                  R                  U 5        UR                  U 5      nUc?  [        U["        5      (       a(  [%        U  S[        U 5       S['        U 5       SU 35      eU$ U" U5      nU$ )Nr¸   z (z, z)is not tracked with proxy for )r›   r   r½   r¾   r"   r¿   rQ   rš   r¼   rÀ   Úgetrœ   Úis_symbolicrÇ   rÄ   r°   Ú_build_proxy_for_sym_exprr‡   ÚRuntimeErrorr»   )r®   r¯   rÓ   rÖ   Útrackerr¢   ÚtmpÚress           rd   rÌ   rÌ   ¤  sK  € ô �#”v×ÑØ×'Ñ'‰Ü	�CÔ)×	*Ñ	*¬o¸c×.BÑ.BØ×.Ñ.‰ä˜#œ|×,Ñ,Ü Ð#>¼tÀC»y¸kÐ!JÓKÐKØ×(Ñ(ˆð �K‰K˜Ó€Eà�}œ C¬×6Ñ6Ø�8‰8×Ñ×!Ñ!ð ×0Ñ0×4Ñ4°S·X±X·]±]ÓCÐC�ÑPØŸ	™	‘ô *¨&·(±(·-±-ÀÔEàŸ™ CÓ(�à�}ä�gœz×*Ñ*ÜØ�%�rœ$˜s›)˜ B¤r¨#£w iÐ/NÈvÈhÐWóð ð ˆá
�EÓ
€CØ€Jrf   c                ó*  • / n[         R                  R                  [         R                  R                  R                  5      nUc  U$ [        U[        5      (       d  [        S[        U5       35      eUR                  n[        U / S9 H„  n[        U[        5      (       a   [         R                  " UR                  5      n[        U[         R                  5      (       d  MY  [        XC5      nUc  Mi  UR!                  UR"                  5        M†     U$ )Nú%Expected ProxyTorchDispatchMode, got )Úout)ÚtorchÚ_CÚ_get_dispatch_modeÚ_TorchDispatchModeKeyÚPROXYr›   ÚProxyTorchDispatchModerš   r¼   r¯   r)   r,   Ú_from_functional_tensorÚelemr   rÌ   Úappendr°   )ÚtÚproxiesÚmoder¯   Út_innerÚproxy_tensors         rd   Ú_get_proxiesrú   Õ  sÓ   € Ø€GÜ�8‰8×&Ñ&¤u§x¡x×'EÑ'E×'KÑ'KÓL€DØ�|ØˆÜ�dÔ2×3Ñ3ÜÐDÄTÈ$ÃZÀLÐQÓRÐRØ�[‰[€FÜ$ Q¨BÔ/ˆÜ�gÔ/×0Ñ0Ü×3Ò3°G·L±LÓAˆGÜ˜'¤5§<¡<×0Ñ0ÙÜ% gÓ6ˆØÓ#Ø�N‰N˜<×-Ñ-Ö.ñ 0ð €Nrf   c                 óÐ   • SSK n 0 nU R                  R                  R                  R	                  5       R                  5        H  u  p#[        [        US5      nUc  M  XAU'   M!     U$ )zd
Returns a dict converting sympy functions to python operators
(i.e. `sympy.Mul` -> `operator.mul`)
r   N)Útorch.utils._sympy.interpÚutilsÚ_sympyÚinterpÚhandlersÚitemsÚgetattrÚoperator)rì   r   ÚkÚvÚops        rd   Ú_sympy_handlersr  è  s[   € ó %à€HØ—‘×"Ñ"×)Ñ)×2Ñ2Ó4×:Ñ:Ö<‰ˆÜ”X˜q $Ó'ˆØ‹>Ø�Q‹Kñ =ð €Orf   c                ó6  • U R                   R                  U5      =nb  U(       a  [        S5      eUR                  $ [	        U[
        [        [        45      (       a  U$ UR                  (       a  [        U5      $ UR                  (       a  [        U5      $ / nUR                   H$  n[        X5      =nc    gUR                  U5        M&     [        U5      n[        5       R                  UR                  5      nU(       d  gUc  U" U6 nU$ [!        XXB5        U$ )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›   ÚintÚfloatr¡   Ú
is_IntegerÚis_FloatÚargsrä   rô   rh   r  ÚfuncÚ_sym_register)r¯   rÄ   rë   r¢   r  ru   Ú	arg_valuer  s           rd   rä   rä   ø  sû   € ðP ×*Ñ*×.Ñ.¨tÓ4Ð4ˆÑAÞÜ ØHóð ð �{‰{Ðä�$œœe¤TÐ*×+Ñ+ØˆØ‡‡Ü�4‹yÐØ‡}‡}Ü�T‹{Ðà€DØ�yŒyˆÜ2°6Ó?Ð?ˆIÑHÙØ�‰�IÖñ ô �‹;€Dä-Ó/×3Ñ3°D·I±IÓ>€DÞàà
�{Ù�Dˆkˆð €Jô 	�f DÔ.Ø€Jrf   Fc                óx   • [        U [        5      (       a  [        U R                  X5      $ U R	                  5       $ ra   )r›   r'   r&   Ú	fake_modeÚdetach)r˜   Úinclude_reals     rd   Úsnapshot_faker  a  s.   € ô �#”z×"Ñ"Ü˜3Ÿ=™=¨#Ó<Ð<à�z‰z‹|Ðrf   Ú_ExtractValType)r  .c                óÐ  • [        U 5      (       a	  [        XS9$ [        U [        5      (       a  U $ [        U [        5      (       a  U $ [        U [
        5      (       a  U $ [        U 5      (       a  U $ [        U [        [        45      (       a+  U R                  U  Vs/ s H  n[        U5      PM     sn5      $ [        U [        5      (       a/  U R                  5        VVs0 s H  u  p4U[        U5      _M     snn$ [        U [        5      (       a  U R                  (       dm  SSKJn  U" U 5      nU(       d	  [#        SS9nU   [$        R&                  " U R(                  U R+                  5       U R,                  U R.                  S9sS S S 5        $ g [        U [0        [2        [4        45      (       a  U $ U c  g [6        R8                  " U 5        g s  snf s  snnf ! , (       d  f       N0= f)N©r  r   )Údetect_fake_modeT)Úallow_fallback_kernels)ÚdeviceÚdtype)r*   r  r›   rQ   r¾   rC   r"   rb   rh   Ú	__class__Úextract_valÚdictr  r   Ú	is_sparseÚtorch._guardsr  r(   rì   Úempty_stridedÚshapeÚstrider  r  r	  r
  r¡   Útyping_extensionsÚassert_never)r˜   r  ro   r  r  r  Úfake_tensor_modes          rd   r  r  {  sn  € Üˆs‡|�|Ü˜SÑ<Ð<Ü	�Cœ×	&Ñ	&Øˆ
Ü	�CÔ)×	*Ñ	*Øˆ
Ü	�Cœ×	'Ñ	'Øˆ
Ü	˜×	Ñ	Øˆ
Ü	�Cœ$¤˜×	'Ñ	'Ø�}‰}±cÓ:²c°œk¨!žn±cÑ:Ó;Ð;Ü	�Cœ×	Ñ	Ø.1¯i©i¬kÔ:ªk¡d a�”;˜q“>Ò!©kÒ:Ð:Ü	�Cœ×	 Ñ	 Ø�}�}õ 7á/°Ó4ÐÞ#Ü#1ÈÑ#NÐ Ú!Ü×*Ò*Ø—I‘I˜sŸz™z›|°C·J±JÀcÇiÁiñ÷ "Ñ!ð
 Ü	�Cœ#œu¤dÐ+×	,Ñ	,Øˆ
Ø	‰Øä×"Ò" 3Õ'ùò7 ;ùã:÷ "Õ!ús   ÂGÃGÅAGÇ
G%T©Úenablec             #  ó\   #   • U R                   nXl          Sv •  X l         g! X l         f = f7f)ac  
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      rd   Ú_enable_thunkifyr-  ¥  s,   é € ð ×
 Ñ
 €CØ#Ôð%Ûà!$Õø Õüs   ‚,–! š,¡)©,c               #  ó”   #   • [        5       n U b"  [        U R                  SS9   Sv •  SSS5        gSv •  g! , (       d  f       g= f7f)aG  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(  ©rS   r-  r¯   ©Ú
proxy_modes    rd   rV   rV   ¸  s=   é € ô  Ó!€JØÑÜ˜j×/Ñ/¸Ó>Û÷ ?Ð>ô 	÷ ?Õ>üs   ‚"A¤7©A·
AÁAc               #  ó–   #   • [        5       n U b#  [        U R                  5         Sv •  SSS5        gSv •  g! , (       d  f       g= f7f)a  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/  r0  s    rd   rU   rU   È  s;   é € ô  Ó!€JØÑÜ˜j×/Ñ/Õ0Û÷ 1Ð0ô 	÷ 1Õ0üs   ‚#A	¥8ªA	¸
AÁA	c                óÊ  • [        XR                  R                  S:H  S9U R                  R                  S'   [	        U R
                  5         [        U5      (       a#  [        U5      U R                  R                  S'   OH[        U[        5      (       a3  UR                  (       d"  [        U5      U R                  R                  S'   S S S 5        U $ ! , (       d  f       U $ = f)NÚplaceholderr  r˜   Útensor_meta)r  rœ   r  r”   r-  r¯   r*   r5   r›   r   r   )r°   r˜   s     rd   Úset_metar6  á  s�   € Ü(ØŸ:™:Ÿ=™=¨MÑ9ñ€E‡J�J‡O�O�EÑô 
˜%Ÿ,™,Õ	'ä�3�<‰<Ü-EÀcÓ-JˆE�J‰J�O‰O˜MÒ*Ü˜œV×$Ñ$¨S¯]¯]Ü-EÀcÓ-JˆE�J‰J�O‰O˜MÑ*÷ 
(ð €L÷ 
(Ô	'ð €Lús   ÁA<CÃ
C"c                óš   ^• U R                   (       a#  [        [        R                  " U/UQ70 UD65      $ U" U0 UD6m[        U4S j5      $ )zH
Delays computation of f until it's called again
Also caches the result
c                 ó   >• T $ ra   rv   )Úrs   €rd   re   Úthunkify.<locals>.<lambda>ú  s   ø€ ™Qrf   )r+  r>   Ú	functoolsÚpartial)r¯   Úfr  Úkwargsr9  s       @rd   Úthunkifyr?  ï  sH   ø€ ð ××Ü”Y×&Ò& qÐ:¨4Ò:°6Ñ:Ó;Ð;áˆtÐ�vÑˆÜ”YÓÐrf   c               óÆ  ^^•           SU4S jjn[        U R                  5       H  u  pVU" UUU4S jU5        M     [        U 5      (       d1  [        U R                  5       5       H  u  pVU" UUU4S jU5        M     U" U R	                  5       UU4S j5        [        U 5      (       d  U" U R                  5       UU4S j5        [        U T[        TU5      5        g )Nc           
     óè   >• [        U5      (       d  [        S5      e[        U [        5      (       a0  [	        T5         [        U T[        TX/UQ70 UD65        S S S 5        g g ! , (       d  f       g = f)Nzproxy_callable must be callable)Úcallablerš   r›   r   r-  r±   r?  )Úouter_sÚproxy_callabler  r>  r¯   s       €rd   Útry_set_proxy_slotÚ(track_tensor.<locals>.try_set_proxy_slot   sg   ø€ ô ˜×'Ñ'Ü Ð!BÓCÐCÜ�gœv×&Ñ&Ü! &Õ)ÜØØÜ˜V ^ÐN¸tÒNÀvÑNô÷ *Ð)ð 'ß)Õ)ús   ½A#Á#
A1c                óœ   >• [        TR                  S[        R                  R                  R
                  R                  TU40 5      U 5      $ ©NÚcall_function)r6  Úcreate_proxyrì   ÚopsÚatenÚsym_sizer	  ©ro   rn   r°   r¯   s     €€rd   re   Útrack_tensor.<locals>.<lambda>  s>   ø€ œØ×#Ñ#Ø#¤U§Y¡Y§^¡^×%<Ñ%<×%@Ñ%@À5È!À*Èbóð ô	rf   c                óœ   >• [        TR                  S[        R                  R                  R
                  R                  TU40 5      U 5      $ rH  )r6  rJ  rì   rK  rL  Ú
sym_strider	  rN  s     €€rd   re   rO  %  s@   ø€ œXØ×'Ñ'Ø'¬¯©¯©×)BÑ)B×)FÑ)FÈÐPQÈ
ÐTVóð ô	rf   c                óš   >• [        TR                  S[        R                  R                  R
                  R                  T40 5      U 5      $ rH  )r6  rJ  rì   rK  rL  Ú	sym_numelrÓ   ©ro   r°   r¯   s    €€rd   re   rO  0  s<   ø€ ”(Ø×ÑØ¤§¡§¡×!9Ñ!9×!AÑ!AÀEÀ8ÈRóð ô	
rf   c                óš   >• [        TR                  S[        R                  R                  R
                  R                  T40 5      U 5      $ rH  )r6  rJ  rì   rK  rL  Úsym_storage_offsetrÓ   rT  s    €€rd   re   rO  :  s?   ø€ ”hØ×#Ñ#Ø#Ü—I‘I—N‘N×5Ñ5×=Ñ=Ø�HØó	ð ôrf   )
rC  rK   rD  z+Callable[Concatenate[PySymType, _P], Proxy]r  ú_P.argsr>  ú	_P.kwargsÚreturnÚNone)rk   r#  r-   r$  ÚnumelÚstorage_offsetr±   r«   )Útensorr°   Úconstantr¯   rE  rn   Úss    ` `   rd   Útrack_tensorr`  ý  sî   ù€ ðØðàCðð ðð ð	ð
 
÷ô* ˜&Ÿ,™,Ö'‰ˆÙØõð ö		
ñ (ô ˜× Ñ Ü˜fŸm™m›oÖ.‰DˆAÙØõð ö	ñ /ñ Ø�‰‹õ	
ôô ˜× Ñ ÙØ×!Ñ!Ó#õô	
ô �6˜6¤<°°xÓ#@ÕArf   Ú_NestedProxysÚ_NestedTensorsc               óT   ^^• [        X5                SUU4S jjmT" XU5        U $ )Nc           	     óH  >^• [        U [        5      (       at  [        T[        5      (       d  [        S[	        T5       35      eUb,  [        U[        5      (       d  [        S[	        U5       35      e[        U TTUS9  [        TU 5        g [        U [        5      (       aT  [        T[        5      (       d  [        S[	        T5       35      e[        TU 5        [        U T[        TU4S j5      5        g [        U [        5      (       d  [        U 5      (       aF  [        T[        5      (       d  [        S[	        T5       35      e[        U TT5        [        TU 5        g [        U [        [        45      (       a^  [        T[        R                  5      (       a  [        TU 5              SS jn[        U 5       H  u  pET	" UTU   U" X$5      5        M     g [        U [         5      (       a`  Ub  [        S5      e[        T[        R                  5      (       a  [        TU 5        U R#                  5        H  u  pgT	" UTU   S 5        M     g [        U [$        5      (       a@  [        T[        5      (       d  [        S[	        T5       35      e[        TU 5        TU l        g g )Nr·   zExpected None or Tensor, got )r¯   r^  c                 ó   >• T $ ra   rv   ©r°   s   €rd   re   Ú<track_tensor_tree.<locals>.wrap_with_proxy.<locals>.<lambda>t  s   ø€ ¹urf   c                óv   • U c  g [        U [        [        45      (       d  [        S[	        U 5       35      eX   $ )NzExpected list or tuple, got )r›   rb   rh   rš   r¼   )ÚcÚidxs     rd   Úget_constantÚ@track_tensor_tree.<locals>.wrap_with_proxy.<locals>.get_constant  s<   € ð ‘9Øä% a¬$´¨×7Ñ7Ü,Ð/KÌDÐQRËGÈ9Ð-UÓVÐVà™6�Mrf   zExpected constant to be None)ri  úOptional[_NestedTensors]rj  r	  rY  rm  )r›   r   r/   rš   r¼   r`  r6  rQ   r±   r?  r¾   r"   rh   rb   Úfxrk   r  r  rC   r°   )
Úer°   r^  rk  rj  ÚeeÚkeyr˜   r¯   Úwrap_with_proxys
    `      €€rd   rr  Ú*track_tensor_tree.<locals>.wrap_with_proxye  s3  ù€ ô �aœ× Ñ Ü˜e¤U×+Ñ+Ü$Ð';¼DÀ»K¸=Ð%IÓJÐJØÑ$¬
°8¼V×(DÑ(DÜ$Ð'DÄTÈ(Ã^ÐDTÐ%UÓVÐVÜ˜˜E¨&¸8ÒDÜ�U˜AÕÜ˜œ<×(Ñ(Ü˜e¤U×+Ñ+Ü$Ð';¼DÀ»K¸=Ð%IÓJÐJä�U˜AÔÜ˜1˜f¤h¨v´}Ó&EÕFÜ˜Ô+×,Ñ,´À×0BÑ0BÜ˜e¤U×+Ñ+Ü$Ð';¼DÀ»K¸=Ð%IÓJÐJÜ˜1˜f eÔ,Ü�U˜AÕÜ˜œE¤4˜=×)Ñ)ä˜%¤§¡×*Ñ*Ü˜ Ô"ð	"Ø+ð	"Ø25ð	"à)ô	"ô % Qž<‘�ñ    E¨#¡J±¸XÓ0KÖLò (ô
 ˜œ4× Ñ ð Ñ#Ü$Ð%CÓDÐDä˜%¤§¡×*Ñ*Ü˜ Ô"àŸG™GžI‘�Ù  U¨3¡Z°Ö6ò &ô ˜œ=×)Ñ)Ü˜e¤U×+Ñ+Ü$Ð';¼DÀ»K¸=Ð%IÓJÐJÜ�U˜AÔØˆA�Gð rf   )ro  Úobjectr°   ra  r^  rm  rY  rZ  )Ú_set_unbacked_bindings)Ú	inner_resÚ	proxy_resr^  r¯   rr  s      `@rd   Útrack_tensor_treerx  O  sP   ù€ ô( ˜9Ô0ðBØðBØ'ðBØ3KðBà	÷Bð BñH �I¨(Ô3àÐrf   c                  ó*   • \ rS rSr% S\S'   S\S'   Srg)r«   i®  r/   r°   úOptional[Tensor]r^  rv   Nr•   rv   rf   rd   r«   r«   ®  s   ‡ àƒLØÖrf   c                ó   ^ • SU 4S jjnU$ )Nc                ó2  >• U R                   nUR                  b  UR                  $ U R                   R                  R                  (       a‡  [	        U [
        5      (       a  [        U R                   R                  5      $ [	        U [        5      (       a  [        U R                   R                  5      $ [        U R                   R                  5      $ [	        U [        5      (       d  [        S[        U 5       35      e[        U T5      R                  5       $ )Nr¸   )rœ   r^  rÄ   Ú	is_numberr›   r   r¡   r   r	  r
  rQ   rš   r¼   rÌ   Úforce)ro  Únr¯   s     €rd   ÚinnerÚfetch_sym_proxy.<locals>.inner·  s¾   ø€ Ø�F‰FˆØ�:‰:Ñ!Ø—:‘:ÐØ�6‰6�;‰;× × Ü˜!œW×%Ñ%Ü˜AŸF™FŸK™KÓ(Ð(Ü˜Aœv×&Ñ&Ü˜1Ÿ6™6Ÿ;™;Ó'Ð'Ü˜Ÿ™Ÿ™Ó%Ð%ä˜a¤×.Ñ.Ü$Ð'BÄ4ÈÃ7À)Ð%LÓMÐMä! ! VÓ,×2Ñ2Ó4Ð4rf   )ro  r�   rY  zUnion[int, bool, float, Proxy]rv   )r¯   r€  s   ` rd   Úfetch_sym_proxyr‚  ´  s   ø€ ÷5ð  €Lrf   c                ó   • g ra   rv   ©r¯   rõ   s     rd   Úfetch_object_proxyr…  Ê  s   € ð #&rf   c                ó   • g ra   rv   r„  s     rd   r…  r…  Ð  s   € ð *-rf   c                ó   • g ra   rv   r„  s     rd   r…  r…  Ö  s   € ð ),rf   c                ó   • g ra   rv   r„  s     rd   r…  r…  Ü  s   € ð 03rf   c                ó   • [        XU5      $ ra   ©rÌ   r„  s     rd   r…  r…  â  s   € ô ˜! QÓ'Ð'rf   rñ   c                ó  • UR                   (       d  UR                  (       d  g[        U [        R                  R
                  5      (       d  g[        [        [        UR                  R                  R                  5      5      5      nUR                  R                  S5      n[        R                  [        R                  4n[        U[        R                   5      =(       a    UR"                  U;   nU(       dv  UR$                   Hf  n['        US5      (       a  UR                  R                  S5      OSn[        U[        R                   5      (       d  MR  UR"                  U;   d  Md  Sn  O   U(       d  gSUR                  S'   g)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ì   Ú_opsrG   ÚnextÚiterÚreversedr¯   ÚgraphÚnodesr”   râ   Úbfloat16Úfloat16r   r  Úall_input_nodesr™   )r  r1  Ú	last_noderõ   Ú	low_pr_fpÚoutput_low_precisionÚ
input_noder˜   s           rd   Ú_maybe_record_pointwise_barrierrœ  ì  s  € ð ×× z×'I×'IØä�dœEŸJ™J×1Ñ1×2Ñ2Øä”Tœ( :×#4Ñ#4×#:Ñ#:×#@Ñ#@ÓAÓBÓC€IØ�‰×Ñ˜5Ó!€AÜ—‘¤§¡Ð/€Iä% a¬¯©Ó6×O¸1¿7¹7ÀiÑ;OÐæØ#×3Ô3ˆJÜ07¸
ÀF×0KÑ0K�*—/‘/×%Ñ% eÔ,ÐQUˆCÜ˜#œuŸ|™|×,Ó,°·±¸iÕ1GØ'+Ð$Ùñ	 4ö  Øà8<€I‡N�NÐ4Ò5rf   c                ó  • U  Vs/ s H;  n[        U[        [        45      (       d  [        U5      (       a  [	        X5      OUPM=     nn[        S U 5       5      (       + =(       a    [        S U  5       5      (       + nU Vs/ s H&  n[        U[        5      (       a  UR                  OUPM(     nnU Vs/ s H+  n[        U[        5      (       a  [        U5      " U5      OUPM-     nnU[        U5      U4$ s  snf s  snf s  snf )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              3  ól   #   • U  H*  n[        U[        5      (       d  M  UR                  S L v •  M,     g 7fra   ©r›   r«   r^  ©rw   rõ   s     rd   rx   Ú7_fetch_proxies_and_all_constant_flag.<locals>.<genexpr>!  s,   é € ð 
â'�Ü˜!œ\×*ó ˆA�J‰J˜$ÕÚ'ùó   ‚4Ÿ4c              3  óB   #   • U  H  n[        U[        5      v •  M     g 7fra   )r›   rQ   )rw   ro   s     rd   rx   r¡  (  s   é € ÐJÒ9I°A”J˜q¤,×/Ð/Ò9Iùs   ‚)r›   r   r¾   r"   r…  Úanyr«   r°   rQ   r‚  rh   )Úflat_args_kwargsr¯   ro   Úf_flat_args_kwargsÚall_constantro  Úproxy_flat_args_kwargss          rd   Ú$_fetch_proxies_and_all_constant_flagr©    s'  € ñ "óò "ˆAô ˜!œfÔ&6Ð7×8Ñ8¼OÈA×<NÑ<Nô ˜vÔ)àòñ "ð ð ô ñ 
á'ó
ó 
ô 	
÷ 	Kô ÑJÑ9IÓJÓJÔJð ñ @RóÚ?Q¸!”:˜a¤×.Ñ.ˆ�Š°AÒ5Ñ?Qð ð ñ (óâ'ˆAô (2°!´\×'BÑ'BŒ˜Ô	  Ô	#ÈÒ	IÙ'ð ð ð
 œuÐ%;Ó<¸lÐJÐJùòAùò.ùòs   …AC7Â-C<Â52Dc           	     ó–  ^ ^^• / m[         R                  " X445      u  pVSU U4S jjm[        U4S jU 5       5      (       d  [        R	                  ST5        [
        $ [        T XU5      nU[
        La  [        UT 5        U$ U(       dÏ  U[        R                  R                  R                  R                  [        R                  R                  R                  R                  [        R                  R                  R                  R                  4;  aB  [        X5      (       a2  T    UR                   " U0 UD6nU[
        La  UsS S S 5        $  S S S 5        U[        R                  R                  R"                  R                  L aN  T    [        R$                  " US   R'                  5       S:H  S 5        US   S:g  R)                  5       sS S S 5        $ T R*                  n[-        XX5      u  pšn[        R.                  R0                  UR2                  ;   a±  U(       ag  U	 Vs/ s H&  n[5        U[6        5      (       a  UR8                  OUPM(     nn[         R:                  " XÖ5      u  pï[=        5          U" U0 UD6sS S S 5        $ T R>                  (       a2  [         R@                  " [B        S X445      (       a  [E        SU S	35      e[         R:                  " X¦5      u  nnU[        R                  R                  RF                  R                  L a.  [        R                  R                  RH                  R                  nT R*                  RK                  S
UUUT R*                  RL                  RO                  URP                  RR                  5      S9n[U        T R*                  5         U" U0 UD6nS S S 5        [W        S U	 5       5      nS nSS jnU[        R                  R                  RH                  R                  L aw  WR'                  5       [X        ::  a_  [=        5          [5        US   [Z        [B        45      (       d  []        S[_        US   5       35      eUS   Ra                  5       nS S S 5        OÀ[        R.                  Rb                  UR2                  ;  a–  U(       a�  U(       aˆ  [         R@                  " [B        UW5      (       ag  [=        5          U	 Vs/ s H&  n[5        U[6        5      (       a  UR8                  OUPM(     nn[         R:                  " XÖ5      u  pïU" U0 UD6nS S S 5        OS n[e        WUUUS9  [        UT 5        U$ ! , (       d  f       GN= f! , (       d  f       GN¡= fs  snf ! , (       d  f       GN= f! , (       d  f       GNå= f! , (       d  f       Nu= fs  snf ! , (       d  f       N‹= f)Nc                ó&  >• [        U 5      [        ;   =(       d    [        U TR                  5      nTR                  (       a.  U=(       d%    [        U 5      [
        R                  R                  L nU(       d  TR                  [        U 5      5        U$ ra   )	r¼   ÚHANDLED_TYPESrÎ   r¯   Ú_allow_fake_constantrì   Ú_subclassesr'   rô   )ro   r9  r1  Úunrecognized_typess     €€rd   Úcan_handle_tensorÚ%proxy_call.<locals>.can_handle_tensorA  se   ø€ Ü�‹G”}Ñ$×L¬°q¸*×:KÑ:KÓ(LˆØ×*×*Ø×<”T˜!“W¤× 1Ñ 1× <Ñ <Ð<ˆAÞØ×%Ñ%¤d¨1£gÔ.Øˆrf   c              3  ób   >#   • U  H$  n[        U[        5      (       d  M  T" U5      v •  M&     g 7fra   )r›   r   )rw   ro   r°  s     €rd   rx   Úproxy_call.<locals>.<genexpr>K  s(   øé € ÐWÒ-=¨ÄÈAÌv×AVÓ#Ñ  ×#Ð#Ò-=ùs   ƒ/ /zEProxyTensorMode tensors without proxy had unrecognized subclasses: %sr   rB   c                 ó   • g)Nz=Boolean value of Tensor with more than one value is ambiguousrv   rv   rf   rd   re   Úproxy_call.<locals>.<lambda>k  s   € ÐWrf   c                ó"   • [        U 5      (       + $ ra   )r*   ©rõ   s    rd   re   rµ  „  s
   € ¤'¨!£*�nrf   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.rI  )Únamec              3  ól   #   • U  H*  n[        U[        5      (       d  M  UR                  S Lv •  M,     g 7fra   rŸ  r   s     rd   rx   r³  Ó  s,   é € ð â#ˆAÜ�aœ×&ó 	ˆ�
‰
˜$ÕÚ#ùr¢  c                ó0   • U R                  5       [        :*  $ ra   )r[  ÚCONSTANT_NUMEL_LIMITr·  s    rd   Útensor_numel_in_limitÚ)proxy_call.<locals>.tensor_numel_in_limitÛ  s   € Ø�w‰w‹yÔ0Ñ0Ð0rf   zExpected Proxy or Tensor, got ©r^  r¯   )ro   r   rY  r¡   )rõ   r   rY  r¡   )3rl   Útree_flattenÚallÚnot_implemented_logrº   ÚNotImplementedÚmaybe_handle_decomprœ  rì   rK  rL  ÚsizerÓ   r$  r\  r;   r…   Ú
is_nonzeroÚ_checkr[  Úitemr¯   r©  ÚTagÚdata_dependent_outputÚtagsr›   r«   r^  Útree_unflattenr+   Ú_error_on_data_dependent_opsÚtree_all_onlyr   rå   Ú
lift_freshÚlift_fresh_copyrJ  r“  Ú_target_to_strÚoverloadpacketrŠ   r-  r¤  r»  r/   rš   r¼   ÚcloneÚnondeterministic_seededrx  )r1  r  Úpre_dispatchr  r>  r¥  Úspecr9  r¯   r¦  r¨  r§  rõ   Úconst_flat_args_kwargsÚ
const_argsÚconst_kwargsÚ
proxy_argsÚproxy_kwargsÚ	proxy_outrë   Úany_constantr^  r¼  r°  r¯  s   `                      @@rd   Ú
proxy_callrÝ  7  sÌ  ú€ ð &(ÐÜ#×0Ò0°$°Ó@ÑÐ÷ð ô ÔWÑ-=ÓW×WÑWÜ×!Ñ!ØSØô	
ô Ðä˜J¨°FÓ;€AØ”ÒÜ'¨¨jÔ9Øˆö Øä�I‰I�N‰N×Ñ×'Ñ'Ü�I‰I�N‰N×!Ñ!×)Ñ)Ü�I‰I�N‰N×)Ñ)×1Ñ1ð
ó
ô +¨4×BÑBâØ—’ Ð/¨Ñ/ˆAØœÒ&Ø÷ ‰Zà&÷ ð
 Œu�y‰y�~‰~×(Ñ(×0Ñ0Ò0ÚÜ�LŠLØ�Q‘—‘“ 1Ñ$ÙWôð ˜‘G˜q‘L×&Ñ&Ó(÷ ‰Zð ×Ñ€Fä,Ð-=ÓFñ =Ð°ô ‡y�y×&Ñ&¨$¯)©)Ó3æñ ,ó&â+�Aô )¨¬L×9Ñ9�—
’
¸qÒ@Ù+ð #ð &ô (.×'<Ò'<Ø&ó(Ñ$ˆJô (Õ)Ù˜ZÐ8¨<Ñ8÷ *Ñ)ð
 ×2×2´v×7KÒ7KÜÑ,¨t¨n÷8
ñ 8
ô ØZÐ[_ÐZ`ð a(ð (óð ô  &×4Ò4Ð5KÓ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Ñ7Ü$Ð'EÄdÈ4ÐPQÉ7ÃmÀ_Ð%UÓVÐVØ˜A‘w—}‘}“ˆH÷ &Ð%ô
 	�	‰	×)Ñ)°·±Ó:ÞÞÜ× Ò ¤Ð)>À×DÑDô $Õ%ñ ,ó&â+�Aô )¨¬L×9Ñ9�—
’
¸qÒ@Ù+ð #ð &ô (.×'<Ò'<Ø&ó(Ñ$ˆJñ ˜ZÐ8¨<Ñ8ˆH÷ &Ð%ð ˆä�c˜9¨xÀÒGÜ# D¨*Ô5Ø€J÷y ŽZú÷ ŽZüò&÷ *Ö)ú÷z 
-Ö	,ú÷T &Õ%üò&÷ &Õ%úsb   Ä(UÆAU)È$-U;É5V Î+	VÐ(AV$ÓV:Ó#-V5Ô"V:Õ
U&Õ)
U8Ö 
VÖ
V!Ö$
V2Ö5V:Ö:
Wc                  ón   • \ rS rSrSrSS jrSS jrSS jrSS jr S     SS jjr	SS	 jr
SS
 jrSrg)Ú_SymNodeDicti  zE
Wrapper around a dictionary that will hash SymInts with their nodes
c                ó   • 0 U l         g ra   ©Úsym_node_dict©Úselfs    rd   Ú__init__Ú_SymNodeDict.__init__  s
   € Ø?AˆÕrf   c                ó4   • X R                   UR                  '   g ra   ©râ  rœ   )rä  rq  r¢   s      rd   Ú__setitem__Ú_SymNodeDict.__setitem__	  s   € Ø',×Ñ˜3Ÿ8™8Ò$rf   c                ó4   • U R                   UR                     $ ra   rè  ©rä  rq  s     rd   Ú__getitem__Ú_SymNodeDict.__getitem__  s   € Ø×!Ñ! #§(¡(Ñ+Ð+rf   c                ó4   • UR                   U R                  ;   $ ra   )rœ   râ  rì  s     rd   Ú__contains__Ú_SymNodeDict.__contains__  s   € Ø�x‰x˜4×-Ñ-Ñ-Ð-rf   Nc                óN   • U R                   R                  UR                  U5      $ ra   )râ  râ   rœ   )rä  rq  rÓ   s      rd   râ   Ú_SymNodeDict.get  s!   € ð
 ×!Ñ!×%Ñ% c§h¡h°Ó8Ð8rf   c                ó   • [         era   )ÚNotImplementedErrorrã  s    rd   Ú__iter__Ú_SymNodeDict.__iter__  s   € Ü!Ð!rf   c                ó,   • [        U R                  5      $ ra   )Úlenrâ  rã  s    rd   Ú__len__Ú_SymNodeDict.__len__  s   € Ü�4×%Ñ%Ó&Ð&rf   rá  ©rY  rZ  )rq  r�   r¢   r´   rY  rZ  )rq  r�   rY  r´   )rq  r�   rY  r¡   ra   )rq  r�   rÓ   zOptional[_PySymProxyType]rY  r´   )rY  r   )rY  r	  )rŠ   r‹   rŒ   r�   Ú__doc__rå  ré  rí  rð  râ   rö  rú  rŽ   rv   rf   rd   rß  rß    sJ   † ñôBô-ô,ô.ð DHð9Øð9Ø'@ð9à	õ9ô"÷'rf   rß  c                  ó*   • \ rS rSr% S\S'   S\S'   Srg)rÆ   i   r´   r°   r�   r¢   rv   Nr•   rv   rf   rd   rÆ   rÆ      s   ‡ àÓØÖrf   rÆ   c                  ó6  ^ • \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
\S'   SrS\S'   SU 4S jjr          SS jr        SS jrSU 4S jjr	\
SS j5       r\
SS j5       r\
    SS j5       rS S jr  S!             S"U 4S jjjrSrU =r$ )#rL   i&  z8MutableMapping[_AnyScriptObjectType | OpaqueType, Proxy]r¿   rß  rÀ   ú*dict[sympy.Symbol, _SympyExprTrackerValue]rÇ   ú$MutableMapping[Tensor, _ProxyTensor]r½   údict[OpOverload, int]Útorch_fn_countsFr¡   r+  c                óº   >• [         TU ]  SS9  [        5       U l        [	        5       U l        [        S [        S9U l        0 U l	        S U l
        0 U l        SU l        g )Nrv   )Úautowrap_modules©r  Úref_typeF)Úsuperrå  rA   r½   rß  rÀ   r@   r?   r¿   rÇ   Útorch_fn_metadatar  r+  )rä  r  s    €rd   rå  ÚPythonKeyTracer.__init__.  s`   ø€ Ü‰Ñ¨"ÐÑ-Ü5Ó7ˆÔÜ+›~ˆÔÜ%8Ø¤ñ&
ˆÔ"ð #%ˆÔð "&ˆÔð  "ˆÔØ$ˆÕrf   c                ó   • U" U0 UD6$ ra   rv   )rä  ÚmÚforwardr  r>  s        rd   Úcall_moduleÚPythonKeyTracer.call_moduleA  s   € ñ ˜Ð' Ñ'Ð'rf   c                ó   • U$ ra   rv   )rä  ÚattrÚattr_valÚparameter_proxy_caches       rd   r  ÚPythonKeyTracer.getattrK  s	   € ð ˆrf   c                óþ  >• [        U[        R                  R                  5      (       ax  U R                  R                  5        H  u  p#XL d  M  U R                  SUS0 5      s  $    U R                  S5      n[        U R                  XA5        U R                  SUS0 5      $ [        U[        5      (       a8  UR                  R                  c  [        S5      eUR                  R                  $ [        TU ]9  U5      $ )NÚget_attrrv   Ú_param_constantz"a.node.constant should not be None)r›   rì   ÚnnÚ	ParameterÚrootÚnamed_parametersÚcreate_nodeÚget_fresh_qualnameÚsetattrrQ   rœ   r^  rš   r  Ú
create_arg)rä  Úar  ÚpÚqualnamer  s        €rd   r  ÚPythonKeyTracer.create_argP  sÌ   ø€ Ü�aœŸ™×+Ñ+×,Ñ,ØŸ	™	×2Ñ2Ö4‘�Ø”6Ø×+Ñ+¨J¸¸2¸rÓBÒBñ 5ð ×.Ñ.Ð/@ÓAˆHÜ�D—I‘I˜xÔ+à×#Ñ# J°¸"¸bÓAÐAÜ˜œ<×(Ñ(Ø�v‰v�‰Ñ&Ü$Ð%IÓJÐJØ—6‘6—?‘?Ð"Ü‰wÑ! !Ó$Ð$rf   c                ó   • g ra   rv   ©rä  ro  s     rd   Úunwrap_proxyÚPythonKeyTracer.unwrap_proxy`  s   € Ø?Brf   c                ó   • g ra   rv   r%  s     rd   r&  r'  c  s   € ØEHrf   c                ó   • g ra   rv   r%  s     rd   r&  r'  f  s   € ð .1rf   c                óô   • [        U[        5      (       a  [        XUS 5      $ [        U[        5      (       a  [        XUS 5      $ [        U[        5      (       d  [        U5      (       a  [        XU5      $ U$ )Nc                ó   • U R                   $ ra   rf  rà   s    rd   re   Ú.PythonKeyTracer.unwrap_proxy.<locals>.<lambda>m  s   € ¸¿ºrf   c                ó"   • U R                  5       $ ra   )r~  )ro  s    rd   re   r,  o  s
   € ¸¿¹¼	rf   )r›   r   rÌ   rQ   r¾   r"   r%  s     rd   r&  r'  k  sf   € Ü�aœ× Ñ Ü! !¨1Ñ.?Ó@Ð@Ü˜œ<×(Ñ(Ü! !¨1Ñ.AÓBÐBÜ˜Ô+×,Ñ,´À×0BÑ0BÜ! !¨1Ó-Ð-àˆHrf   c                ór  >• [         TU ]  XX4XV5      nUR                  S;   a  SUR                  ;   a  UR                  S	 US:X  aŒ  [	        U[
        5      (       d  [        S[        U5       35      e[        U R                  U5      n[	        U[        R                  5      (       a+  [        5          [        U5      UR                  S'   S S S 5        SS jn	[        X#U45      (       a=  [        R                  R                   R#                  X44U	5      u  p«X«4UR                  S'   U$ ! , (       d  f       Nd= f)	N©r4  ÚoutputÚstack_tracer  zExpected str, got r˜   c                ó.  • [        U [        R                  R                  5      (       a  SU R                  ;  a  g U R                  S   n[        U[        R
                  5      (       a  [        U[        5      (       d  g [        U R                  S   5      $ )Nr˜   )r›   rì   rn  ÚNoder”   r   r'   r  )r  r˜   s     rd   Úmap_fnÚ+PythonKeyTracer.create_node.<locals>.map_fn‹  sg   € Ü˜a¤§¡§¡×/Ñ/°5ÀÇÁÓ3FØØ—&‘&˜‘-ˆCô ˜#œuŸ|™|×,Ñ,´ZÀÄZ×5PÑ5PØÜ˜qŸv™v e™}Ó-Ð-rf   Úeager_input_vals)r  r   rY  zOptional[_ExtractValType])r  r  r  r”   r›   Ústrrš   r¼   r  r  rì   r   Údisable_proxy_modes_tracingr  Ú_should_save_eager_input_valsrn  rœ   Úmap_aggregate)rä  ÚkindÚtargetr  r>  r¸  Ú	type_exprrœ   r  r4  Úarg_inpÚ	kwarg_inpr  s               €rd   r  ÚPythonKeyTracer.create_nodeu  sþ   ø€ ô ‰wÑ" 4°¸tÓOˆà�7‰7Ð/Ó/°MÀTÇYÁYÓ4NØ—	‘	˜-Ð(à�:ÓÜ˜f¤c×*Ñ*Ü$Ð'9¼$¸v»,¸Ð%HÓIÐIÜ˜4Ÿ9™9 fÓ-ˆDÜ˜$¤§¡×-Ñ-Ü0Õ2Ü'2°4Ó'8�D—I‘I˜eÑ$÷ 3ô	.ô )¨¸°×@Ñ@ô "'§¡§¡×!<Ñ!<¸d¸^ÈVÓ!TÑˆGØ-4Ð,@ˆD�I‰IÐ(Ñ)àˆ÷- 3Õ2ús   Â1D(Ä(
D6)r+  r¿   rÀ   rÇ   r½   r  r	  rü  )
r  r6   r  zCallable[..., Any]r  ztuple[Any, ...]r>  zdict[str, Any]rY  r   ©r  r7  r  rt  r  zdict[str, Proxy]rY  rt  )r   rt  rY  úfx.node.Node)ro  r   rY  zUnion[Proxy, Tensor])ro  r�   rY  zUnion[Proxy, PySymType])ro  Ú_AnyScriptObjectTyperY  ú"Union[Proxy, _AnyScriptObjectType])ro  r[   rY  rt  )NN)r;  r7  r<  r4   r  ztuple[Argument, ...]r>  zdict[str, Argument]r¸  zOptional[str]r=  zOptional[Any]rY  ztorch.fx.Node)rŠ   r‹   rŒ   r�   r–   r+  rå  r  r  r  r   r&  r  rŽ   Ú__classcell__©r  s   @rd   rL   rL   &  s*  ø‡ ØSÓSØ!Ó!ØBÓBØ8Ó8Ø*Ó*Ø!€O�TÓ!÷%ð&(àð(ð $ð(ð ð	(ð
 ð(ð 
ô(ðØðØ#)ðØBRðà	ô÷
%ð  ÛBó ØBàÛHó ØHàð1Ø%ð1à	+ó1ó ð1ôð  #Ø#'ð)àð)ð ð)ð #ð	)ð
 $ð)ð ð)ð !ð)ð 
÷)ö )rf   rL   c                ó&  • SSK Jn  [        U 5      (       d  g[        U [        R
                  R                  R                  [        R
                  R                  R                  U45      (       a  gUbÂ  U [        R                  R                  R                  L d'  U [        R                  R                  R                  L at  US   n[        US   [        R                  R                  [        R                  R                  45      (       d  [!        S[#        US   5       35      e[%        US   S 5      $ U [        R                  R                  R&                  L a  g[        U [        R                  R                  5      (       a/  [(        R*                  " [$        U5      (       a  [-        SU  S35      e[        U [        R                  R                  5      (       a3  SSKJn  U" U 5      [        R2                  R4                  R6                  :H  $ g)	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_subgraphrH  rB  r›   rì   Ú_higher_order_opsÚtriton_kernel_wrapÚTritonKernelWrapperFunctionalÚTritonKernelWrapperMutationrK  Úhigher_orderÚauto_functionalizedÚauto_functionalized_v2r�  rG   r%   rš   r¼   r9  Úwith_effectsrl   Útree_anyrå   Útorch._library.utilsrI  rí   rÈ  Úneeds_exact_strides)r<  Úargs_kwargsrH  r  rI  s        rd   r9  r9  ¡  s¢  € õ Jä�F×ÑØÜØä×#Ñ#×6Ñ6×TÑTÜ×#Ñ#×6Ñ6×RÑRØð	
÷ñ ð ØÑØ”%—)‘)×(Ñ(×<Ñ<Ò<Ø”U—Y‘Y×+Ñ+×BÑBÒBà˜1‰~ˆÜØ�‰G”e—j‘j×+Ñ+¬U¯Z©Z×-KÑ-KÐL÷
ñ 
ô !ØBÄ4ÈÈQÉÃ=À/ÐRóð ô -¨T°!©W°dÓ;Ð;Ø”—‘×'Ñ'×4Ñ4Ò4ð Ü�&œ%Ÿ*™*×8Ñ8×9Ñ9Ü�?Š?Ô8¸+×FÑFÜØ ˜xð (Gð Hóð ô
 �&œ%Ÿ*™*×/Ñ/×0Ñ0ÝBá(¨Ó0´E·H±H·L±L×4TÑ4TÑTÐTØrf   c                ó*   ^ • [         SU 4S jj5       nU$ )Nc               3  óJ  >#   • SSK Jn JnJn  / nS nU " 5       S:”  a9  U" 5       n[	        UT5      (       a  UnOUR                  U5        U " 5       S:”  a  M9  [        U5       H  nU" U5        M      Uv •  UbQ  [        U5      nUS:”  a  U" 5       nUS-  nUS:”  a  M  UR                  U5        [        U5       H  nU" U5        M     g g ! UbQ  [        U5      nUS:”  a  U" 5       nUS-  nUS:”  a  M  UR                  U5        [        U5       H  nU" U5        M     f f = f7f)Nr   )Ú_len_torch_function_stackÚ	_pop_moder9   rB   )Útorch.overridesrY  rZ  r9   r›   rô   r’  rù  )rY  rZ  r9   Útemp_elementsÚremoved_moder÷   r=   Úmode_tys          €rd   Úcontext_manager_fnÚB_make_temp_remove_mode_context_manager.<locals>.context_manager_fnÓ  s6  øé € çTÑTàˆØˆá'Ó)¨AÓ-Ù“;ˆDÜ˜$ ×(Ñ(Ø#�Øà×$Ñ$ TÔ*ñ (Ó)¨AÕ-ô ˜]Ö+ˆDÙ�tÖñ ,ð	%ØÒð Ñ'Ü˜MÓ*�Ø˜a“iÙ$›;�DØ˜Q‘J�Eð ˜a•ið ×$Ñ$ \Ô2ä$ ]Ö3�DÙ˜tÖ$ò 4ð (øˆ|Ñ'Ü˜MÓ*�Ø˜a“iÙ$›;�DØ˜Q‘J�Eð ˜a•ið ×$Ñ$ \Ô2ä$ ]Ö3�DÙ˜tÖ$ò 4ð (üs0   ƒAD#ÁD#Á1C
 Á5&D#Â-D#Ã
'D Ã3-D Ä D#)rY  z2Generator[Optional[TorchFunctionMode], None, None])r   )r^  r_  s   ` rd   Ú&_make_temp_remove_mode_context_managerra  Ð  s    ø€ ô ö%ó ð%ð@ Ðrf   c                ó.  • UR                  X5      nSS jnUR                  U5        SSKJn  U" U5        [	        U [
        5      (       a  U R                  R                  OU R                  n[        R                  R                  UR                  X65      $ )Nc                óø   • SSK Jn  U R                  5       (       a  gU" U 5      (       a  g[        U R                  R                  S5      [        5      (       a"  [        S U R                   5       5      (       a  gg)NrB   )Úis_accessor_nodeTFr˜   c              3  ó¶   #   • U  HO  n[        U[        R                  5      (       d  M$  [        UR                  R	                  S 5      [
        5      v •  MQ     g7f)r˜   N)r›   rn  r3  r”   râ   rQ   )rw   r   s     rd   rx   Ú6dispatch_trace.<locals>.impure_pred.<locals>.<genexpr>  s>   é € ð â�AÜ˜a¤§¡×)ó <”
˜1Ÿ6™6Ÿ:™: eÓ,¬l×;Ð;Úùs
   ‚#A©0A)	Úsymbolic_shapesrd  Ú	is_impurer›   r”   râ   rQ   rÀ  r  )r  rd  s     rd   Úimpure_predÚ#dispatch_trace.<locals>.impure_pred   sk   € Ý5ð �;‰;�=‰=Øñ ˜A×ÑØô
 �q—v‘v—z‘z %Ó(¬,×7Ñ7ô ñ àŸšó÷ ñ ð ð rf   r   )Údedupe_symints)r  zfx.NoderY  r¡   )ÚtraceÚeliminate_dead_codeÚ,torch._inductor.fx_passes.dedupe_symint_usesrk  r›   r6   r  rŠ   rn  Ú_lazy_graph_moduleÚ_make_graph_moduler  )r  r¯   Úconcrete_argsr“  ri  rk  r¸  s          rd   rM   rM   ÷  sp   € ð �L‰L˜Ó-€Eôð8 
×Ñ˜kÔ*ÝKá�5ÔÜ&0°´v×&>Ñ&>ˆ4�>‰>×"Ò"ÀDÇMÁM€DÜ× Ñ ×3Ñ3°F·K±KÀÓMÐMrf   c                óˆ   ^ ^^^• [         R                  " T5      u  mn[        R                  " T 5      SU UUU4S jj5       nU$ )Nc                 ó  >• [         R                  " U 5      u  p#[        U5      [        T5      :w  a#  [        S[        U5       S[        T5       35      e[	        5        n[        U[        5      (       d  [        S[        U5       35      e[        TUS TS9  S S S 5        [        TSS5      (       aL  [        TU 5       VVs/ s H2  u  pV[        U[        R                  R                  5      (       a  UOUPM4     snnmS
U4S jjnT
" T6 n[         R                  " [        Xx5      n[         R                  " [         U4S jU5      nSU4S	 jjn	[         R                  " ["        X˜5      nU$ ! , (       d  f       NÙ= fs  snnf )NzExpected same length: z vs rê   r¾  Úproxy_module_inputsFc                ó"   >• [        U TU S 5      $ )Nc                ó   • U R                   $ ra   rf  rà   s    rd   re   ÚJwrap_key.<locals>.wrapped.<locals>.get_tensor_proxy_slot.<locals>.<lambda>A  s   € ¸!¿'º'rf   rŠ  ©rõ   r¯   s    €rd   Úget_tensor_proxy_slotÚ8wrap_key.<locals>.wrapped.<locals>.get_tensor_proxy_slot@  s   ø€ Ü! ! V¨QÑ0AÓBÐBrf   c                ó"   >• [        U TU S 5      $ )Nc                ó   • U $ ra   rv   rà   s    rd   re   Ú=wrap_key.<locals>.wrapped.<locals>.<lambda>.<locals>.<lambda>F  s   € Éqrf   rŠ  rx  s    €rd   re   Ú+wrap_key.<locals>.wrapped.<locals>.<lambda>F  s   ø€ ¬°q¸&À!Á[Ô(Qrf   c                ó8   >• [        U T5      R                  5       $ ra   )rÌ   r~  rx  s    €rd   Úget_sym_proxy_slotÚ5wrap_key.<locals>.wrapped.<locals>.get_sym_proxy_slotI  s   ø€ Ü! ! VÓ,×2Ñ2Ó4Ð4rf   )rõ   r   rY  zUnion[Tensor, Proxy])rõ   r�   rY  r/   )rl   r¿  rù  rš   r8  r›   rñ   r¼   rx  r  Úziprì   r  r6   Útree_map_onlyr   r¾   rQ   )rö   Ú_unusedÚflat_proxiesÚ_proxies_specr  rõ   r!  ry  rë   r€  r=  Úflat_tensorsÚtensorsr¯   s             €€€€rd   ÚwrappedÚwrap_key.<locals>.wrapped,  sS  ø€ ô '-×&9Ò&9¸'Ó&BÑ#ˆÜˆ|Ó¤ LÓ 1Ó1Ü Ø(¬¨\Ó):Ð(;¸4ÄÀLÓ@QÐ?RÐSóð ô )Ô*¨aÜ˜aÔ!7×8Ñ8Ü$Ð'LÌTÐRSËWÈIÐ%VÓWÐWÜ˜l¨LÀ4ÐPVÒW÷ +ô
 �6Ð0°%×8Ñ8ô   ¨Ô1ôâ1‘D�Aô   ¤5§8¡8§?¡?×3Ñ3‘¸Ò:Ù1òˆG÷
	Cñ �ˆkˆÜ×"Ò"¤6Ð+@ÓFˆÜ×"Ò"ÜÔQÐSVó
ˆ÷	5ô ×"Ò"¤<Ð1CÓIˆØˆ
÷1 +Õ*üós   Á9E+Ã9E<Å+
E9)rö   rW  r„  rX  rY  r^   )rl   r¿  r;  Úwraps)r=  rˆ  r¯   rÔ  Ú_tensors_specr‰  r‡  s   ```   @rd   Úwrap_keyr�  $  sB   û€ ô #)×"5Ò"5°gÓ">Ñ€L�-ä‡_‚_�QÓ÷ ñ  ó ð ðD €Nrf   zOptional[object]ÚORIGINAL_ATENc              #  óê   #   • [         cJ  [        R                  " 5       (       a0  U q U [        R                  S'    S v •  S q S [        R                  S'   g S v •  g ! S q S [        R                  S'   f = f7f)NÚoriginal_aten)rŽ  Úfx_tracebackÚhas_preserved_node_metaÚcurrent_meta)r  s    rd   Úset_original_aten_opr”  V  sh   é € ô
 Ñ¤×!EÒ!E×!GÑ!GØˆØ59Œ×!Ñ! /Ñ2ð	>Ûà ˆMØ9=ŒL×%Ñ% oÒ6äøð !ˆMØ9=ŒL×%Ñ% oÒ6üs   ‚7A3ºA ¾A3ÁA0Á0A3c                  óB   • \ rS rSrSS jr  S         SS jjrSrg)	ÚTorchFunctionMetadataModeig  c                ó   • Xl         g ra   ©r¯   ©rä  r¯   s     rd   rå  Ú"TorchFunctionMetadataMode.__init__h  s   € Ø�rf   Nc                óÈ   • U=(       d    0 nXR                   l        U R                   R                  R                  US5      S-   U R                   R                  U'   U" U0 UD6$ )Nr   rB   )r¯   r	  r  râ   ©rä  r  Útypesr  r>  s        rd   Ú__torch_function__Ú,TorchFunctionMetadataMode.__torch_function__k  sY   € ð —˜2ˆà(,�‰Ô%Ø,0¯K©K×,GÑ,G×,KÑ,KÈDÐRSÓ,TÐWXÑ,Xˆ�‰×#Ñ# DÑ)Ù�TÐ$˜VÑ$Ð$rf   r˜  ©r¯   Ú_ProxyTracerrY  rZ  ©rv   N©
r  rG   r�  ú tuple[torch._C._TensorMeta, ...]r  útuple[object, ...]r>  úOptional[dict[str, object]]rY  rt  ©rŠ   r‹   rŒ   r�   rå  rž  rŽ   rv   rf   rd   r–  r–  g  sI   † ôð $&Ø.2ð%àð%ð 0ð%ð !ð	%ð
 ,ð%ð 
÷%ð %rf   r–  c                  óB   • \ rS rSrSS jr  S         SS jjrSrg)	ÚPreDispatchTorchFunctionModei�  c                ó   • Xl         / U l        g ra   )r¯   Úenter_autocast_nodesr™  s     rd   rå  Ú%PreDispatchTorchFunctionMode.__init__‚  s   € ØŒð :<ˆÕ!rf   Nc                óÎ  • U=(       d    0 nU[         ;   Ga>  U[        R                  R                  R                  L a  U R
                  R                  5       nU4nU R                  R                  SX0 5      nU[        R                  R                  R                  L a  U R
                  R                  U5        U[        R                  R                  [        R                  R                  R                  [        R                  R                  R                  4;   a  S UR                  S'   U[        R                  R                  L a  U" U0 UD6  U$ U[        R                  R                  R                   [        R                  R                  R"                  [        R                  R                  R$                  [        R                  R                  R&                  [        R                  R(                  R*                  4;   aU  [-        X0R                  5      u  pxnU R                  R/                  SUU0 5      n	U" U0 UD6n
[1        X©S U R                  S9  U
$ U" U0 UD6$ )NrI  r˜   r¾  )r2   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_decompositionsr©  rJ  rx  )rä  r  r�  r  r>  Ú
enter_noderœ   ri   rö   Ú	out_proxyrè   s              rd   rž  Ú/PreDispatchTorchFunctionMode.__torch_function__‰  sè  € ð —˜2ˆØÔDÔDð
 ”u—y‘y×.Ñ.×=Ñ=Ò=Ø!×6Ñ6×:Ñ:Ó<�
Ø"�}�Ø—;‘;×*Ñ*¨?¸DÈÓKˆDØ”u—y‘y×.Ñ.×>Ñ>Ò>Ø×)Ñ)×0Ñ0°Ô6ØÜ—‘×*Ñ*Ü—	‘	×'Ñ'×7Ñ7Ü—	‘	×'Ñ'×6Ñ6ðó ð
 $(�—	‘	˜%Ñ ð ”u—x‘x×1Ñ1Ò1á�dÐ%˜fÒ%ØˆKð
 Ü×Ñ×(Ñ(×7Ñ7Ü×Ñ×(Ñ(×:Ñ:Ü×Ñ×(Ñ(×@Ñ@Ü×Ñ×(Ñ(×@Ñ@Ü×Ñ×!Ñ!×:Ñ:ð
ó 
ô AÀÇ{Á{ÓS‰MˆA˜ØŸ™×0Ñ0ØØØØó	ˆIñ ˜Ð' Ñ'ˆCÜ˜c°tÀDÇKÁKÒPØˆJÙ�TÐ$˜VÑ$Ð$rf   )r«  r¯   r   r¢  )
r  zUnion[OpOverload, Callable]r�  r¤  r  r¥  r>  r¦  rY  rt  r§  rv   rf   rd   r©  r©  �  sI   † ô<ð $&Ø.2ð4%à)ð4%ð 0ð4%ð !ð	4%ð
 ,ð4%ð 
÷4%ð 4%rf   r©  c                  óð   ^ • \ rS rSr\S
S j5       r   S           SU 4S jjjr\  S         SS jj5       rSU 4S jjr	        SU 4S jjr
\S
S j5       r          SS jrS	rU =r$ )rñ   iÅ  c                ó   • grÊ   rv   rã  s    rd   Úenable_tracingÚ%ProxyTorchDispatchMode.enable_tracingÇ  ó   € àrf   c                ó‚  >• U(       a$  [         R                  R                  R                  OS n[        TU ]  U5        Xl        X l        X0l        X@l	        XPl
        [         R                  R                  R                  U l        / U l        SU l        [!        5       U l        0 U l        SSKJn  UR*                  U l        g )Nr   ©Úconfig)rì   rí   ÚDispatchKeyÚPreDispatchr  rå  r¯   Útracing_moderÔ  r­  rÌ  rï   rð   Ú	_mode_keyÚenter_stackr�  ÚsetÚ_invoke_subgraph_namesÚ_invoke_subgraph_cacheÚtorch._inductorrÆ  rŽ  )	rä  r¯   rÉ  rÔ  r­  rÌ  ÚdkrÆ  r  s	           €rd   rå  ÚProxyTorchDispatchMode.__init__Ë  sŸ   ø€ ö 2>ŒU�X‰X×!Ñ!×-Ò-À4ˆÜ‰Ñ˜ÔØŒØ(ÔØ(ÔØ$8Ô!Ø,HÔ)ô Ÿ™×7Ñ7×=Ñ=ˆŒð DFˆÔØ"#ˆÔä03³ˆÔ#ð ð 	Ô#õ 	+à-3×-KÑ-KˆÕ$rf   c                óð   • [        U5         U=(       d    0 nU[        R                  R                  :X  a  U" U0 UD6sS S S 5        $ [	        XU R
                  X45      sS S S 5        $ ! , (       d  f       g = fra   )r”  Úprimr  rÓ   rÝ  rÔ  rœ  s        rd   Ú__torch_dispatch__Ú)ProxyTorchDispatchMode.__torch_dispatch__ë  s\   € ô " $Õ'Ø—\˜rˆFà”t—{‘{×*Ñ*Ó*Ù˜TÐ, VÑ,÷	 (Ñ'ô ˜d¨$×*;Ñ*;¸TÓJ÷ (×'×'ús   Œ1A'ÁA'Á'
A5c                ó°   >• [        [        R                  R                  R                  5      nU R
                  R                  U5        [        TU ]!  5       $ ra   )	r:   rì   rí   rï   rð   rË  rô   r  Ú	__enter__)rä  Úmaybe_prev_proxy_moder  s     €rd   r×  Ú ProxyTorchDispatchMode.__enter__û  sA   ø€ ä 1´%·(±(×2PÑ2P×2VÑ2VÓ WÐØ×Ñ×ÑÐ 5Ô6Ü‰wÑ Ó"Ð"rf   c                óx   >• [         TU ]  XU5      nU R                  R                  5       nUb  [	        U5        U$ ra   )r  Ú__exit__rË  r±  r9   )rä  Úexc_typeÚ	exc_valueÚ	tracebackÚbÚmb_previous_proxy_moder  s         €rd   rÛ  ÚProxyTorchDispatchMode.__exit__  sA   ø€ ô ‰GÑ˜X°)Ó<ˆð "&×!1Ñ!1×!5Ñ!5Ó!7ÐØ!Ñ-ÜÐ-Ô.àˆrf   c                ó   • grÊ   rv   )Úclss    rd   Úis_infra_modeÚ$ProxyTorchDispatchMode.is_infra_mode  rÃ  rf   c                ó&  • U[         R                  L aL  [        US   [        5      (       a  US   S:X  a  US   $ [        US   [        5      (       a  US   S:X  a  US   $ U(       a  [	        S5      eU" U0 UD6n[        U R                  XU5        U$ )NrB   r   zExpected no keyword arguments)r  Úmulr›   r	  rš   r  r¯   )rä  r  r�  r  r>  rë   s         rd   Ú__sym_dispatch__Ú'ProxyTorchDispatchMode.__sym_dispatch__  s�   € ð ”8—<‘<ÒÜ˜$˜q™'¤3×'Ñ'¨D°©G°q«LØ˜A‘w�Ü˜D ™G¤S×)Ñ)¨d°1©g¸«lØ˜A‘w�ö
 Ü Ð!@ÓAÐAÙ�DÐ#˜FÑ#ˆÜ�d—k‘k 4¨sÔ3Øˆ
rf   )r­  rÌ  rÎ  rÍ  rÊ  r�  rŽ  rË  rÔ  r¯   rÉ  ©rY  r¡   )FFT)r¯   r¡  rÉ  r7  rÔ  r¡   r­  r¡   rÌ  r¡   rY  rZ  r¢  r£  )rY  r   )rÜ  zOptional[type[BaseException]]rÝ  zOptional[BaseException]rÞ  zOptional[types.TracebackType]rY  zOptional[bool])
r  rG   r�  r¤  r  r¥  r>  údict[str, object]rY  rt  )rŠ   r‹   rŒ   r�   ÚpropertyrÁ  rå  r=   rÔ  r×  rÛ  Úclassmethodrä  rè  rŽ   rE  rF  s   @rd   rñ   rñ   Å  s>  ø† àóó ðð #Ø%*Ø-1ðLàðLð ðLð ð	Lð
 #ðLð '+ðLð 
÷Lð Lð@ ð
 $&Ø.2ðKàðKð 0ðKð !ð	Kð
 ,ðKð 
ôKó ðK÷#ðà/ðð +ðð 1ð	ð
 
÷ð óó ððàðð 0ðð !ð	ð
 "ðð 
÷ò rf   c           	     óh   • [        U[        5      (       a  [        U [        XX#S9n[	        X0U5        g g )N)r  r  rë   )r›   rQ   r?  Ú_compute_proxyr±   )r¯   r  r  rë   Úp_out_thunks        rd   r  r  -  s5   € ô �#”|×$Ñ$ÜØ”N F¸Dñ
ˆô 	�s KÕ0ð	 %rf   c                ó*  ^ • [        U5      S:X  a8  [        US   [        [        45      (       a  [        U 4S jUS    5       5      4nO[        U 4S jU 5       5      nT R	                  SX0 5      n[
        R                  " UT 5      n[        Xc5        U$ )NrB   r   c              3  óš   >#   • U  H@  n[        U[        5      (       a$  [        UT5      R                  5       R                  OUv •  MB     g 7fra   ©r›   rQ   rÌ   r~  rœ   ©rw   r   r¯   s     €rd   rx   Ú!_compute_proxy.<locals>.<genexpr>B  sI   øé € ð ò !�Aô " !¤\×2Ñ2ô # 1 fÓ-×3Ñ3Ó5×:Ò:àôò !ùó   ƒAAc              3  óš   >#   • U  H@  n[        U[        5      (       a$  [        UT5      R                  5       R                  OUv •  MB     g 7fra   ró  rô  s     €rd   rx   rõ  L  sI   øé € ð 
ò �ô ˜a¤×.Ñ.ô ˜q &Ó)×/Ñ/Ó1×6Ò6àôò ùrö  rI  )rù  r›   rb   rh   r  rn  r/   r6  )r¯   r  r  rë   Ún_argsÚn_outÚp_outs   `      rd   rï  rï  ;  s”   ø€ ô
 ˆ4ƒy�Aƒ~œ* T¨!¡W¬t´U¨m×<Ñ<äô ð ˜ašóó ð	
‰ô ô 
ñ ó
ó 
ˆð ×Ñ˜°¸bÓA€EÜ�HŠH�U˜FÓ#€EÜˆUÔØ€Lrf   c                  óx   ^ • \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
\S'   S\S'   SrS\S'   SU 4S jjrSrU =r$ )rW   i]  z+MutableMapping[_AnyScriptObjectType, Proxy]r¿   z*MutableMapping[PySymType, _PySymProxyType]rÀ   r  r½   r   rÇ   zOptional[OpOverload]r	  r  r  Fr¡   r+  c                óÆ   >• [         TU ]  U5        [        R                  " 5       U l        [        5       U l        0 U l        [        S [        S9U l
        S U l        0 U l        g )Nr  )r  rå  Úweakrefr   rÀ   rA   r½   rÇ   r@   r?   r¿   r	  r  )rä  r“  r  s     €rd   rå  Ú _GraphAppendingTracerEx.__init__f  sZ   ø€ Ü‰Ñ˜ÔÜ&×8Ò8Ó:ˆÔÜ5Ó7ˆÔØ"$ˆÔÜ%8Ø¤ñ&
ˆÔ"ð "&ˆÔð  "ˆÕrf   )r¿   rÀ   rÇ   r½   r  r	  )r“  zfx.graph.GraphrY  rZ  )	rŠ   r‹   rŒ   r�   r–   r+  rå  rŽ   rE  rF  s   @rd   rW   rW   ]  s;   ø‡ ØFÓFØ?Ó?Ø8Ó8ØBÓBØ+Ó+Ø*Ó*Ø!€O�TÓ!÷"õ "rf   rW   c                  ó´   ^ • \ rS rSr S         S	U 4S jjjr        S
U 4S jjr        S
U 4S jjr        S
U 4S jjrSU 4S jjrSr	U =r
$ )rO   iw  c                óº   >• [         TU ]  " U40 UD6  X l        [        U R                  5      U l        U=(       d    0 U l        [        U R                  SS9U l        g )NÚreal)rÉ  )r  rå  Ú	new_graphrW   r¯   rƒ   rñ   r÷   )rä  Úmoduler  rƒ   r>  r  s        €rd   rå  Ú!DecompositionInterpreter.__init__x  sK   ø€ ô 	‰Ò˜Ñ* 6Ò*Ø"ŒÜ-¨d¯n©nÓ=ˆŒà#6×#<¸"ˆÔ Ü*¨4¯;©;ÀVÑLˆ�	rf   c                óÆ   >• [         TU ]  XU5      n[        R                  " U R                  R                  U5      U R
                  5      n[        XES U R
                  S9  U$ ©Nr¾  )r  r4  rn  r/   r  r¯   rx  ©rä  r<  r  r>  rë   r°   r  s         €rd   r4  Ú$DecompositionInterpreter.placeholder‡  sN   ø€ ô ‰gÑ! &°Ó7ˆÜ—’˜Ÿ™×3Ñ3°FÓ;¸T¿[¹[ÓIˆÜ˜#¨t¸D¿K¹KÒHàˆ
rf   c                óÆ   >• [         TU ]  XU5      n[        R                  " U R                  R                  U5      U R
                  5      n[        XES U R
                  S9  U$ r  )r  r  rn  r/   r  r¯   rx  r  s         €rd   r  Ú!DecompositionInterpreter.get_attr”  sN   ø€ ô ‰gÑ˜v¨VÓ4ˆÜ—’˜Ÿ™×0Ñ0°Ó8¸$¿+¹+ÓFˆÜ˜#¨t¸D¿K¹KÒHØˆ
rf   c                ó¦   >^ ^• [         TT ]  XU5      nSS jmSUU 4S jjnT R                  R                  [        R                  " XT5      5        U$ )Nc                ó.   • U R                   R                  $ ra   )r°   rœ   rà   s    rd   Úget_proxy_nodeÚ7DecompositionInterpreter.output.<locals>.get_proxy_nodeª  s   € Ø—7‘7—<‘<Ðrf   c                ó4   >• [        U TR                  U T5      $ ra   )rÌ   r¯   )ro  r  rä  s    €€rd   ÚunwrapÚ/DecompositionInterpreter.output.<locals>.unwrap­  s   ø€ Ü! ! T§[¡[°!°^ÓDÐDrf   )ro   r«   rY  rB  )ro  r   rY  zUnion[Tensor, fx.Node])r  r0  r  rl   Útree_map)rä  r<  r  r>  rë   r  r  r  s   `     @€rd   r0  ÚDecompositionInterpreter.output¢  sH   ú€ ô ‰g‰n˜V¨6Ó2ˆô	 ÷	Eð 	Eð 	�‰×ÑœfŸošo¨fÓ:Ô;Øˆ
rf   c                óä   >• [        U R                  5         U R                     [        TU ]  " U0 UD6sS S S 5        sS S S 5        $ ! , (       d  f       O= fS S S 5        g ! , (       d  f       g = fra   )r…   rƒ   r÷   r  Úrun)rä  r  r>  r  s      €rd   r  ÚDecompositionInterpreter.run³  sF   ø€ ô �t×/Ñ/Õ0°$·)³)Ü‘7’; Ð/¨Ñ/÷ 3<°)×0Ñ0·)µ)ú×0×0Ö0ús!   —A!¤A´	A!Á
A	ÁA!Á!
A/)rƒ   r÷   r  r¯   ra   )
r  úfx.GraphModuler  úfx.Graphrƒ   ú'Optional[Mapping[OpOverload, Callable]]r>  rt  rY  rZ  )r<  r7  r  r¥  r>  rë  rY  rt  )r  rt  r>  rt  rY  rt  )rŠ   r‹   rŒ   r�   rå  r4  r  r0  r  rŽ   rE  rF  s   @rd   rO   rO   w  s×   ø† ð
 HLð	MàðMð ðMð Eð	Mð
 ðMð 
÷Mð Mð
àð
ð !ð
ð "ð	
ð
 
÷
ð	àð	ð !ð	ð "ð		ð
 
÷	ðàðð !ðð "ð	ð
 
÷÷"0õ 0rf   rO   c                  ót   ^ • \ rS rSr          SU 4S jjr\          SS j5       rU 4S jrSrU =r	$ )Ú_SelectiveDecomposeInterpreteriº  c                ó@   >• [         TU ]  " U40 UD6  X l        X0l        g)zw
For all nodes in `module`, selectively decompose if is `should_decompose`,
following the given `decomposition_table`.
N)r  rå  Úshould_decomposerƒ   )rä  r  r  rƒ   r>  r  s        €rd   rå  Ú'_SelectiveDecomposeInterpreter.__init__»  s#   ø€ ô 	‰Ò˜Ñ* 6Ò*Ø 0ÔØ#6Õ rf   c                óœ  • U R                   R                   H¦  nUR                  S:X  d  M  [        UR                  [
        5      (       d  M6  / nUR                   HN  n[        U[        R                  5      (       a  [        R                  " XaU40 UD6nOUnUR                  U5        MP     [        U5      Ul        M¨     [        XU40 UD6$ )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.
rI  )r“  r”  r  r›   r<  r%   r  rn  r.   r  Úrecursive_wraprô   rh   )Úgmr  rƒ   r>  rœ   Únew_argsru   Únew_args           rd   r   Ú-_SelectiveDecomposeInterpreter.recursive_wrapÊ  s¹   € ð  —H‘H—N”NˆDØ�w‰w˜/Õ)¬jØ—‘Ô0÷/ó /ð �ØŸ9œ9�CÜ! #¤r§~¡~×6Ñ6Ü"@×"OÒ"OØÐ3Fñ#ØJPñ#™ð #&˜Ø—O‘O GÖ,ñ %ô " (›O�–	ñ #ô .ØÐ"5ñ
Ø9?ñ
ð 	
rf   c                óÔ   >• U R                  U5      (       a/  [        U R                  5         [        TU ]  U5      nS S S 5        U$ [        TU ]  U5      nU$ ! , (       d  f       W$ = fra   )r  r…   rƒ   r  Úrun_node)rä  r  Úresultr  s      €rd   r&  Ú'_SelectiveDecomposeInterpreter.run_nodeí  sc   ø€ Ø× Ñ  ×#Ñ#Ü˜4×3Ñ3Õ4Ü™Ñ)¨!Ó,�÷ 5ð ˆô ‘WÑ% aÓ(ˆFØˆ÷	 5Ô4ð ˆús   ­AÁ
A')rƒ   r  )
r  r  r  úCallable[[fx.Node], bool]rƒ   rY   r>  rt  rY  rZ  )
r!  r  r  r)  rƒ   rY   r>  rt  rY  r  )
rŠ   r‹   rŒ   r�   rå  Ústaticmethodr   r&  rŽ   rE  rF  s   @rd   r  r  º  s…   ø† ð7àð7ð 4ð7ð ;ð	7ð
 ð7ð 
÷7ð ð 
Øð 
à3ð 
ð ;ð 
ð ð	 
ð
 
(ó 
ó ð 
÷Dó rf   r  c               óZ   ^ ^^^• U(       a  SUUU U4S jjnOUU U4S jn[        U0 S9" T6 $ )zARetrace a joint graph module and selectively apply decomposition.c                óL   >• [         R                  TTT5      R                  " T6 $ ra   ©r  r   r  )ÚprimalsÚtangentsr  ÚdecompositionÚjoint_gmr  s     €€€€rd   Úwrap_fnÚ$selective_decompose.<locals>.wrap_fn  ó0   ø€ Ü1×@Ñ@ØÐ*¨Móç‰cðàðð rf   c                 óL   >• [         R                  TTT5      R                  " U 6 $ ra   r-  )r  r0  r1  r  s    €€€rd   r2  r3  	  r4  rf   )rƒ   )r.  ú	list[Any]r/  r6  )rN   )r1  r0  r  Útrace_joint_graphr  r2  s   ``` ` rd   rP   rP   ö  s+   û€ ö ÷	ó 	÷	ô
 �7°Ò3°TÐ:Ð:rf   c                óR   ^ ^• [         R                  " X45      u  nmSU U4S jjnXC4$ )Nc                óF   >• [         R                  " U T5      u  pT" U0 UD6$ ra   )rl   rË  )Ú	flat_argsÚfn_argsÚ	fn_kwargsr  rÕ  s      €€rd   r‰  Ú-wrapper_and_args_for_make_fx.<locals>.wrapped  s(   ø€ Ü#×2Ò2°9¸dÓCÑˆÙ�WÐ* 	Ñ*Ð*rf   )r:  zlist[object]rY  r^   )rl   r¿  )r  r  r>  r:  r‰  rÕ  s   `    @rd   Úwrapper_and_args_for_make_fxr>    s0   ù€ ô
 ×)Ò)¨4¨.Ó9�O€Iˆt÷+ð +ð ÐÐrf   c               #  óÎ   #   • [         R                  " 5       n [         R                  " S5         S v •  [         R                  " U 5        g ! [         R                  " U 5        f = f7f©NF)rì   Úis_autocast_cache_enabledÚset_autocast_cache_enabled)Ú	old_values    rd   Údisable_autocast_cacherD    sE   é € ä×/Ò/Ó1€IÜ	×$Ò$ UÔ+ð4Ûä×(Ò(¨Õ3øŒ×(Ò(¨Õ3üs   ‚,A%¯A
 ³A%Á
A"Á"A%c                  ó   • \ rS rSrSrg)Ú#_ModuleNotInstalledAsSubmoduleErrori)  rv   Nr‰   rv   rf   rd   rF  rF  )  r�   rf   rF  c                  ó   • \ rS rSrSS jrSrg)Ú
_AttrProxyi.  c                ó   • g ra   rv   )rä  ÚbaseÚpaths      rd   Úreset_proxy_mappingÚ_AttrProxy.reset_proxy_mapping/  s   € Ørf   rv   N)rJ  r6   rK  r7  rY  rZ  )rŠ   r‹   rŒ   r�   rL  rŽ   rv   rf   rd   rH  rH  .  s   † ÷rf   rH  c                  ó®   ^ • \ rS rSrSrSU 4S jjrSS jr        SU 4S jjr      SU 4S jjr          SS jr	SS jr
SU 4S	 jjrS
rU =r$ )Ú_ModuleStackTraceri3  aƒ  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U ]  5         SU l        SU l        Xl        SU l        0 U l        U R                  R                  SS9 HO  u  p#X0R                  ;   a-  [        R                  SU R                  U   U5        SU l        MA  X R                  U'   MQ     [        5       U l        [        5       U l        [        5       U l        SU l        [        [         5      U l        U R                  R                  SS9 H,  u  p$U R"                  [%        U5         R'                  U5        M.     U m " UU4S jS[(        5      mTU l        g )NTF)Úremove_duplicatez<Shared module found between %s and %s, AttrProxy is enabled.r   c                  ó‚   >^ • \ rS rSrSU4S jjrS	UU U4S jjrS
U4S jjrSUU U4S jjr\SUU4S jj5       r	Sr
U =r$ )Ú._ModuleStackTracer.__init__.<locals>.AttrProxyif  c                ó  >• [        U[        5      (       a  UR                  5       n[        U[        5      (       d  [	        S[        U5       35      e[        UR                  R                  U R                  UR                  40 5      U l        UR                  U l        UR                  R                  U R                  l	        UR                  R                  U R                  l
        UTR                  U '   UTR                  U '   g )NúExpected Module, got )r›   rH  Úget_baser6   rš   r¼   r  rŠ   Ú__dict__r‹   rŒ   Úproxy_pathsÚproxy_modules)rä  rJ  rK  r¯   s      €rd   rå  Ú7_ModuleStackTracer.__init__.<locals>.AttrProxy.__init__g  sÈ   ø€ Ü˜d¤J×/Ñ/ØŸ=™=›?�Dä! $¬×/Ñ/Ü(Ð+@ÄÀdÃÀÐ)MÓNÐNô "&Ø—N‘N×+Ñ+Ø—^‘^ T§^¡^Ð4Øó"�”ð
 !%§¡�”Ø,0¯N©N×,EÑ,E�—‘Ô)Ø.2¯n©n×.IÑ.I�—‘Ô+ð ,0�×"Ñ" 4Ñ(Ø-1�×$Ñ$ TÒ*rf   c                óà   >• [        U [        5      (       d  [        S[        U 5       35      e[        TU ]  U5      n[        U[        5      (       d  U$ T" UTR                  U    S-   U-   5      $ )NrU  Ú.)r›   r6   rš   r¼   r  Ú__getattr__rX  )rä  r¸  r  Ú	AttrProxyr  r¯   s      €€€rd   r]  Ú:_ModuleStackTracer.__init__.<locals>.AttrProxy.__getattr__  sl   ø€ Ü! $¬×/Ñ/Ü(Ð+@ÄÀdÃÀÐ)MÓNÐNô !™7Ñ.¨tÓ4�Ü! (¬F×3Ñ3Ø#�Oá  ¨6×+=Ñ+=¸dÑ+CÀcÑ+IÈDÑ+PÓQÐQrf   c                ó"   >• TR                   U    $ ra   )rY  r™  s    €rd   rV  Ú7_ModuleStackTracer.__init__.<locals>.AttrProxy.get_base‹  s   ø€ Ø×+Ñ+¨DÑ1Ð1rf   c                ó|  >• [        U[        5      (       Ga  [        U [        R                  R                  5      (       ag  [        R                  R	                  [        [        U R                  R                  5       5      U   5      5      nT" UTR                  U     SU 35      $ [        U [        R                  R                  5      (       a^  [        R                  R                  [        U R                  R                  5       5      U   5      nT" UTR                  U     SU 35      $ [        TU ]5  U5      $ )Nr\  )r›   Úslicerì   r  Ú
Sequentialr   rb   Ú_modulesr  rX  Ú
ModuleListÚvaluesr  rí  )rä  rj  rè   r^  r  r¯   s      €€€rd   rí  Ú:_ModuleStackTracer.__init__.<locals>.AttrProxy.__getitem__Ž  sö   ø€ Ü˜c¤5×)Ò)Ü! $¬¯©×(;Ñ(;×<Ñ<ä#Ÿh™h×1Ñ1Ü'¬¨T¯]©]×-@Ñ-@Ó-BÓ(CÀCÑ(HÓIó˜ñ  )¨°×1CÑ1CÀDÑ1IÐ0JÈ!ÈCÈ5Ð.QÓRÐRÜ# D¬%¯(©(×*=Ñ*=×>Ñ>ä#Ÿh™h×1Ñ1´$°t·}±}×7KÑ7KÓ7MÓ2NÈsÑ2SÓT˜á(¨°×1CÑ1CÀDÑ1IÐ0JÈ!ÈCÈ5Ð.QÓRÐRä‘wÑ*¨3Ó/Ð/rf   c                óX  >• SU R                   ;  a  [        S5      eU R                   S   n[        U[        5      (       d  [        S[	        U5       35      eUR                  5        VVs0 s H0  u  p#UUb%  T" UTR                  U    S-   [        U5      -   5      OU_M2     snn$ s  snnf )Nre  z_modules not in __dict__zExpected dict, got r\  )rW  rš   r›   r  r¼   r  rX  r7  )rä  Ú
submodulesrq  r¢   r^  r¯   s       €€rd   re  Ú7_ModuleStackTracer.__init__.<locals>.AttrProxy._modulesŸ  s¸   ø€ à T§]¡]Ó2Ü(Ð)CÓDÐDØ!Ÿ]™]¨:Ñ6�
Ü! *¬d×3Ñ3Ü(Ð+>¼tÀJÓ?OÐ>PÐ)QÓRÐRð '1×&6Ñ&6Ô&8ôò '9™
˜ð à Ñ,ñ " %¨×);Ñ);¸DÑ)AÀCÑ)GÌ#ÈcË(Ñ)RÔSà"ò#ñ
 '9òð ùó s   Á+7B&)r  rW  )rJ  zUnion[Module, _AttrProxy]rK  r7  rY  rZ  )r¸  r7  rY  r^  )rY  r6   )rj  zUnion[int, slice]rY  r^  )rY  zdict[str, AttrProxy])rŠ   r‹   rŒ   r�   rå  r]  rV  rí  rì  re  rŽ   rE  )r  r^  r¯   s   @€€rd   r^  rS  f  s7   ù† ÷2÷0
Rñ 
R÷2÷0ñ 0ð" ÷ó örf   r^  )r  rå  Úrecord_stack_tracesÚ!_record_forward_stack_traces_onlyÚ
scope_rootÚenable_attr_proxyÚsubmodule_pathsÚnamed_modulesr¹   Úinfor   rX  Úattr_proxy_maprY  Úcounterr   rb   Úmodule_id_cacher»   rô   rH  Ú
proxy_type)rä  rn  r¸  r  Úmodr^  r¯   r  s        @@€rd   rå  Ú_ModuleStackTracer.__init__F  s0  ú€ Ü‰ÑÔØ#'ˆÔ Ø15ˆÔ.Ø$ŒØ!&ˆÔØ!ˆÔØ—‘×4Ñ4ÀeÐ4ÓL‰GˆDØ×(Ñ(Ó(Ü—‘ØRØ×(Ñ(¨Ñ+Øôð
 *.�Ö&à*.×$Ñ$ QÓ'ñ Mô @QÓ?RˆÔÜEVÓEXˆÔÜDUÓDWˆÔØˆŒä*¬4Ó0ˆÔØŸ™×6Ñ6ÈÐ6ÓN‰IˆDØ× Ñ ¤ C£Ñ)×0Ñ0°Ö6ñ Oð ˆ÷H	ð H	œ
ô H	ðT $ˆ�rf   c                óÈ   • XR                   L a  g[        U[        5      (       a  U R                  U   $  [        R
                  " X5      $ ! [         a  n[        UeSnAff = f)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)rn  r›   rH  rX  r0   Úpath_of_moduleÚ	NameErrorrF  )rä  rw  ro  s      rd   r{  Ú!_ModuleStackTracer.path_of_module²  s]   € ð
 —/‘/Ò!Øä�cœ:×&Ñ&Ø×#Ñ# CÑ(Ð(ð	=Ü×(Ò(¨Ó3Ð3øÜó 	=Ü5¸1Ð<ûð	=ús   µA Á
A!ÁAÁA!c                ó’  >• [        U[        5      (       a0  [        U[        R                  5      (       d  U R                  (       d  [
        TU ]  XU5      $ [        U[        5      (       a  U$ X R                  ;  a  U R                  X!5      U R                  U'   OU R                  U   R                  X!5        U R                  U   $ ra   )r›   r6   rn  r.   ro  r  r  rH  rs  rv  rL  )rä  r  r  r  r  s       €rd   r  Ú_ModuleStackTracer.getattrÂ  s¡   ø€ ô ˜8¤V×,Ñ,Ü˜(¤B§N¡N×3Ñ3Ø×)×)ä‘7‘? 4Ð3HÓIÐIÜ�h¤
×+Ñ+ØˆOð ×.Ñ.Ó.Ø,0¯O©O¸HÓ,KˆD×Ñ Ò)à×Ñ Ñ)×=Ñ=¸hÔMØ×"Ñ" 8Ñ,Ð,rf   c                ó   >• [         TU ]  X5      n[        R                  5         U R                  R                  5        H+  u  pEUR                  R                  [        [        U5      '   M-     / nU R                  R                  5        H(  u  pxX€R                  ;   d  M  UR                  Xx45        M*     SS jn	U H=  u  p«U	" U R                  U
5        U R                  U   n[        XÀR                  U
5        M?     U$ )Nc                ó�  • UR                  S5      nUS S US   pC[        U [        5      (       d  [        S[	        U 5       35      eU nU H=  n[        XV5      (       d    g[        XV5      n[        U[        [        45      (       a  M=    g   [        XT5      (       d  g[        [        XT5      [        5      (       d  g[        XT5        g)Nr\  éÿÿÿÿrU  FT)	Úsplitr›   r6   rš   r¼   r™   r  rH  Údelattr)r®   r<  ÚatomsrK  Útarget_submodrw  rÇ  s          rd   Ú_delete_proxy_attrÚ4_ModuleStackTracer.trace.<locals>._delete_proxy_attrõ  s·   € ð —L‘L Ó%ˆEØ"'¨¨ *¨e°B©i�-Ü˜c¤6×*Ñ*Ü$Ð'<¼TÀ#»Y¸KÐ%HÓIÐIØˆCó �Ü˜s×)Ñ)Ù ä˜cÓ(�ä! #¬
´FÐ';×<Ó<Ù ñ ô ˜3×.Ñ.Øô œg cÓ9¼:×FÑFØä�CÔ'Ørf   )r®   r6   r<  r7  rY  r¡   )r  rl  r£   Úclearr½   r  r°   rœ   r»   r  rq  rY  rô   r1   )rä  r  rq  rè   rq  r˜   Ú!proxy_module_names_to_be_replacedr¸  r  r‡  Úproxy_module_nameÚproxy_moduleÚactual_moduler  s                €rd   rl  Ú_ModuleStackTracer.traceÕ  sÞ   ø€ ô ‰g‰m˜DÓ0ˆô 	0×5Ñ5Ô7à×+Ñ+×1Ñ1Ö3‰HˆCØ?B¿y¹y¿~¹~Ô3´B°s³GÓ<ñ 4ð KMÐ)Ø ŸI™I×3Ñ3Ö5‰LˆDØ×+Ñ+Õ+Ø1×8Ñ8¸$¸ÖHñ 6ô	ó< 0QÑ+ÐÙ˜tŸy™yÐ*;Ô<Ø ×.Ñ.¨|Ñ<ˆMÜ˜¯	©	Ð3DÖEñ 0Qð
 ˆ
rf   c                óê   • SSK Jn  [        X[        45      (       a  U" U0 UD6$  [        R
                  " XX#U5      $ ! [         a*    [        R                  S[        U5      5        U" U0 UD6s $ f = f)z\PythonKeyTracer 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›   r.   r0   r  rF  r¹   rº   r7  )rä  r  r  r  r>  r�  s         rd   r  Ú_ModuleStackTracer.call_module	  s   € õ 	2ô �a¬;Ð7×8Ñ8Ù˜DÐ+ FÑ+Ð+ð
	,Ü×%Ò% d¨w¸fÓEÐEøÜ2ó 	,Ü�I‰IðJô �A“ôñ ˜DÐ+ FÑ+Ò+ð	,ús   ¦> ¾1A2Á1A2c                ó   • gr@  rv   )rä  r  Úmodule_qualified_names      rd   Úis_leaf_moduleÚ!_ModuleStackTracer.is_leaf_module<	  s   € Ørf   c                óô  >• [         TU ]  " U0 UD6nUR                  S;  a±  UR                  R	                  S5      c'  U R
                  R                  5       UR                  S'   UR                  S   R                  5        HM  u  nu  pV[        U[        5      (       d  M  UUR                  S-   UR                  -   4UR                  S   U'   MO     UR                  S:X  a•  U R                  bˆ  SUR                  ;  ax  U R                  R                   SU R                  U R                      3U R                  R                  R                   SU R                  R                   34UR                  S'   U$ )a  
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_stackr\  rI  Útorch_fnri   )r  r  r  r”   râ   Úmodule_stackÚcopyr  r›   r¼   r‹   rŒ   r	  rŠ   r  r  )rä  r  r>  rœ   rq  ÚfqnÚmod_clsr  s          €rd   r  Ú_ModuleStackTracer.create_node?	  sX  ø€ ô ‰wÒ" DÐ3¨FÑ3ˆð �7‰7Ð3Ó3Ø�y‰y�}‰}Ð.Ó/Ñ7Ø/3×/@Ñ/@×/EÑ/EÓ/G�—	‘	Ð+Ñ,à'+§y¡yÐ1BÑ'C×'IÑ'IÖ'KÑ#�‘^�cÜ˜g¤t×,Ó,àØ×*Ñ*¨SÑ0°7×3GÑ3GÑGð9�D—I‘IÐ/Ñ0°Ó5ñ (Lð �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Ñ!ð
 ˆrf   )rm  rs  rt  ro  ru  rY  rX  rv  rl  rn  rp  )rn  r.   rY  rZ  )rw  r6   rY  r7  rA  )r  úUnion[Module, Callable]rq  r¦  rY  r  )
r  r6   r  r   r  r¥  r>  rë  rY  rZ  )r  r6   r”  r7  rY  r¡   )r  rt  r>  rt  rY  rB  )rŠ   r‹   rŒ   r�   rý  rå  r{  r  rl  r  r•  r  rŽ   rE  rF  s   @rd   rO  rO  3  s    ø† ñ÷$j$ôX=ð -Øð-Ø#)ð-ØBRð-à	÷-ð&CØ+ðCØ<WðCà	÷CðJ ,àð ,ð ð ,ð !ð	 ,ð
 "ð ,ð 
ô ,ôD÷!õ !rf   rO  c                  ó  • \ rS rSr    S                       SS jjrSS jr              SS jr\      SS j5       rSS jr	\    SS j5       r
SS	 jrSS
 jrSS jrSS jr      SS jrSrg)Ú_MakefxTraceric	  Nc                ó  • [        U=(       d    0 5      U l        U R                  R                  [        R                  R
                  R                  R                  [        R                  R                  R                  5        X l
        X0l        X@l        XPl        X`l        Xpl        S U l        [#        5       U l        [#        5       U l        S U l        [#        5       U l        [#        5       U l        X€l        X�l        X l        X°l        g ra   )r  rƒ   Ú
setdefaultrì   rK  rL  rS  rÓ   Ú_decompÚdecompositionsrÉ  Ú_allow_non_fake_inputsrÔ  Úrecord_module_stackr­  rÌ  r'  r   r1  Úproxy_function_modeÚ	fx_tracerÚpython_dispatcher_modeÚtorch_fn_metadata_moderl  Úparent_tracerrt  Ú_disable_torch_fn_metadata_mode)rä  rƒ   rÉ  r¦  rÔ  r§  r­  rÌ  rl  r¬  rt  r­  s               rd   rå  Ú_MakefxTracer.__init__d	  sÛ   € ô  @DØ×% 2ó@
ˆÔ ð 	× Ñ ×+Ñ+Ü�I‰I�N‰N×$Ñ$×,Ñ,¬e¯m©m×.JÑ.J×.TÑ.Tô	
ð ".ÔØ,BÔ#Ø".ÔØ)<Ô Ø*>Ô!Ø2NÔ)ð ;?ˆÔÜFQÃmˆŒä‹Mð 	Ô ð 59ˆŒÜ?J»}ˆÔ#ä‹Mð 	Ô#ð $7Ô Ø6CÔØ#6Ô Ø/NÕ,rf   c                óŠ   • U R                   U R                  U R                  U R                  U R                  U R
                  /$ ra   ©r'  r1  r¨  r©  rª  r«  rã  s    rd   Ú_checkpoint_modesÚ_MakefxTracer._checkpoint_modes”	  s>   € à×!Ñ!Ø�O‰OØ×$Ñ$Ø�N‰NØ×'Ñ'Ø×'Ñ'ð
ð 	
rf   c                óL   • Xl         X l        X0l        X@l        XPl        X`l        g ra   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          rd   Ú_restore_modesÚ_MakefxTracer._restore_modesž	  s&   € ð !6ÔØ)ŒØ#;Ô Ø'ŒØ&AÔ#Ø&AÕ#rf   c              #  ó˜  #   • U R                  5       n SSKJn  [        US5      (       a.  U R                  (       a  UR
                  n[        U5      U l        OL[        5       U l        U R                  U R                  l	        U R                  (       a  SU R                  l
        U R                  S:X  ao  SS KnUR                  R                  R                  U5      nUc<  SS KJs  Jn  UR'                  SS9   [)        SU R*                  U" 5       SS	9nS S S 5        Xpl        OÀU R                  S
:X  aˆ  SS KnUR                  R                  R                  U5      nUc=  U" 5       n	SS KJs  Jn  UR'                  SS9   [)        SU R*                  U	S9nS S S 5        UR.                  c  [1        S5      eXpl        O(U R                  S:X  d  [1        SU R                   35      eU R3                  U R                  5        S v •  U R4                  " U6   g ! , (       d  f       GN= f! , (       d  f       N–= f! U R4                  " U6   f = f7f)NrB   )ÚShapeEnvÚ	_orig_modTÚfaker   F)Ú(fake_tensor_allow_unsafe_data_ptr_access)r  Úallow_non_fake_inputsÚ	shape_envÚstatic_shapesÚsymbolic)r  rÁ  rÂ  ú2shape_env should be set if tracing with 'symbolic'r  zUnexpected tracing type: )r±  rg  r½  r™   r§  r¾  rO  r©  rL   rl  rm  rÉ  r‘  Ú_dynamorý   r  Útorch._functorch.configr´  rÆ  Úpatchr(   r¦  r'  rÂ  rš   Ú_construct_modes_with_fx_tracerrº  )
rä  r=  r  Ú
prev_modesr½  rn  rì   r'  Ú_configrÂ  s
             rd   Ú_init_modes_from_inputsÚ%_MakefxTracer._init_modes_from_inputs®	  sø  é € ð ×+Ñ+Ó-ˆ
ð:	-å1ä�q˜+×&Ñ&¨4×+C×+CØŸ[™[�
ô "4°JÓ!?�•ä!0Ó!2�”Ø59×5MÑ5M�—‘Ô2Ø×+×+ØGK�D—N‘NÔDà× Ñ  FÓ*Û$à#(§=¡=×#6Ñ#6×#GÑ#GÈÓ#MÐ Ø#Ñ+ß=Ð=à Ÿ™ÐPU˜ÒVÜ+9Ø37Ø26×2MÑ2MÙ&.£jØ*.ñ	,Ð(÷ Wð )9Õ%Ø×"Ñ" jÓ0Û$à#(§=¡=×#6Ñ#6×#GÑ#GÈÓ#MÐ Ø#Ñ+Ù (£
�Iß=Ð=à Ÿ™ÐPU˜ÒVÜ+9Ø38Ø26×2MÑ2MØ&/ñ,Ð(÷ Wð $×-Ñ-Ñ5Ü(ØLóð ð )9Õ%à×(Ñ(¨FÓ2Ü(Ø3°D×4EÑ4EÐ3FÐGóð ð ×0Ñ0°·±Ô@Ûà×Ò Ò,÷I WÖVú÷  WÕVûð( ×Ò Ò,üsO   ‚I
”C%H6 Ã9HÄA*H6 Å?H%ÆA.H6 ÈI
È
H"ÈH6 È%
H3È/H6 È6IÉI
c                ó~  • [        UU R                  U R                  U R                  U R                  S9U l        U R                  (       a  [        U5      U l        U R                  S:X  d  U R                  (       a  [        5       U l	        U R                  (       d  [        U5      U l        U R                  Ul        g )N)rÔ  r­  rÌ  rÄ  )rñ   rÉ  rÔ  r­  rÌ  r1  r©  r¨  r    rª  r­  r–  r«  rt  )rä  r©  s     rd   rÉ  Ú-_MakefxTracer._construct_modes_with_fx_tracerï	  s”   € Ü0ØØ×ÑØ×*Ñ*Ø!%×!:Ñ!:Ø)-×)JÑ)Jñ
ˆŒð ××Ü'CÀIÓ'NˆDÔ$ð ×Ñ 
Ó*¨d×.?×.?Ü*BÓ*DˆDÔ'à×3×3Ü*CÀIÓ*NˆDÔ'Ø(,×(@Ñ(@ˆ	Õ%rf   c              #  ó<  #   • U R                  5       n UR                  U l        SS jnUR                  c  [        S5      eU" UR                  5      U l        U R	                  U R                  5        S v •  U R
                  " U6   g ! U R
                  " U6   f = f7f)Nc                ó¸   • [        U 5      [        L a
  [        5       $ [        U 5      [        L a  [        U R                  5      $ [	        S[        U 5       S35      e)NzUnexpected tracer type: r\  )r¼   rL   rO  rn  rå   ©r¬  s    rd   Ú_create_sub_fx_tracerÚD_MakefxTracer._init_modes_from_parent.<locals>._create_sub_fx_tracer
  sV   € Ü˜Ó&¬/Ò9Ü*Ó,Ð,Ü˜-Ó(Ô,>Ò>Ü-¨m×.FÑ.FÓGÐGä&Ø2´4¸Ó3FÐ2GÀqÐIóð rf   z*parent_tracer.fx_tracer should not be None)r¬  r¡  rY  rL   )r±  r'  r©  rš   rÉ  rº  )rä  r¬  rÊ  rÓ  s       rd   Ú_init_modes_from_parentÚ%_MakefxTracer._init_modes_from_parent
  sŠ   é € ð ×+Ñ+Ó-ˆ
ð	-Ø$1×$BÑ$BˆDÔ!ôð ×&Ñ&Ñ.Ü$Ð%QÓRÐRÙ2°=×3JÑ3JÓKˆDŒNØ×0Ñ0°·±Ô@Ûà×Ò Ò,øˆD×Ò Ò,üs   ‚B”A$B Á8BÂBÂBc           	     ó.  ^ ^• SS K m[        R                  " U4S jU5      nSU U4S jjnSS jnU" U5      nU" X5      n[        R                  " [
        T R                  5      n[        5        nUR                  [        T R                  5      5        T R                  (       a  UR                  T R                  5        UR                  T R                  5        UR                  T R                  5        UR                  T R                  5        UR                  U5        UR                  [        5       5        UR                  [!        T 5      5        T R"                  c  [%        S5      e ['        [)        XbT R"                  T R*                  5      T R"                  [-        U5      S9n	 S S S 5        T R3                  5       (       aY  TR4                  R7                  U5      =n
(       a7  U
R8                  b*  SSKJn  U" W	U
R8                  S5        U	R?                  5         T R@                  S:X  a3  T R                  c  [%        S5      eT R                  R8                  W	l        W	$ ! [.         a    [1        SS U 4S	 jS
9  e f = f! , (       d  f       Nà= f)Nr   c                óD   >• TR                   R                  R                  $ ra   )rn  Ú_symbolic_traceÚPH)ri   rì   s    €rd   re   Ú,_MakefxTracer._trace_inner.<locals>.<lambda>)
  s   ø€ ¨¯©×(@Ñ(@×(CÒ(Crf   c                ót   >^• SmSUUU4S jjnS UUS.n[         R                  " UTR                     U 5      $ )Nr   c                óÔ  >• SSK Jn  TR                  c  [        S5      eU" ST 35      n[	        U [
        5      (       a  TS-  mTR                  R                  XS9$ [        U 5      [        L ay  TR                  S:X  ai  TR                  R                  c  [        S5      eTR                  R                  R                  TR                  R                  R                  XS S	9U US
9$ [	        U TR                  5      (       d  [        U 5      (       a0  TR                  R                   R#                  TR                  U 5      $ [	        U [$        5      (       a  [        SU  S35      eU $ )Nr   )ÚConstantSourceú#fake_tensor_mode should not be NoneÚinputrB   )ÚsourcerÄ  rÅ  )Úpositive)Úhintrá  zScriptObject z. has been fakified. Cannot wrap_fake it again.)Útorch._dynamo.sourcerÞ  r'  rš   r›   r   Úfrom_tensorr¼   r	  rÉ  rÂ  Úcreate_symintnodeÚcreate_symbolÚScriptObjectr"   Ú_libraryÚfake_class_registryÚmaybe_to_fake_objr!   )ro   rÞ  rá  Ú	arg_counträ  rì   s      €€€rd   Úinner_wrap_fakeÚG_MakefxTracer._trace_inner.<locals>._wrap_fake.<locals>.inner_wrap_fake.
  sh  ø€ õ @à×(Ñ(Ñ0Ü(Ð)NÓOÐOÙ'¨%°	¨{Ð(;Ó<�Ü˜a¤×(Ñ(Ø ‘N�IØ×0Ñ0×<Ñ<¸QÐ<ÐNÐNä˜!“W¤’^¨×(9Ñ(9¸ZÓ(GØ×,Ñ,×6Ñ6Ñ>Ü,ØPóð ð  ×0Ñ0×:Ñ:×LÑLØ×-Ñ-×7Ñ7×EÑEØ°ð Fð ð Ø%ð Mð ð ô    5×#5Ñ#5×6Ñ6¼/È!×:LÑ:LØ Ÿ>™>×=Ñ=×OÑOØ×-Ñ-¨qóð ô ˜aÔ!1×2Ñ2Ü(Ø'¨ sÐ*XÐYóð ð �rf   c                ó   • U $ ra   rv   rà   s    rd   re   Ú@_MakefxTracer._trace_inner.<locals>._wrap_fake.<locals>.<lambda>U
  s   € ¡!rf   ©r  r¿  rÄ  )ro   rt  rY  rt  )rl   r  rÉ  )r  rí  Úwrap_fn_maprì  rä  rì   s      @€€rd   Ú
_wrap_fakeÚ._MakefxTracer._trace_inner.<locals>._wrap_fake+
  sC   ù€ ØˆI÷$ñ $ñN $Ø'Ø+ñˆKô
 —?’? ;¨t×/@Ñ/@Ñ#AÀ4ÓHÐHrf   c                óú   • [        [        R                  " U 5      S5      (       a@  [        R                  " U 5      R                  R                  [        R
                  -  (       a  [        U [        U5      5      $ U $ )NÚ__code__)r™   Úinspectr  rö  Úco_flagsÚ
CO_VARARGSr�   rù  )r=  Úphss     rd   Ú
_wrap_funcÚ._MakefxTracer._trace_inner.<locals>._wrap_func[
  sS   € äœGŸNšN¨1Ó-¨z×:Ñ:Ü—>’> !Ó$×-Ñ-×6Ñ6¼×9KÑ9K×Kô & a¬¨S«Ó2Ð2ØˆHrf   zfx_tracer should not be None)r¯   rq  Úartifactc                 ó   • SSS.$ )NÚmake_fx_fail_partialÚstring)r¸  Úencodingrv   rv   rf   rd   re   rÛ  †
  s   € Ø 6Ø$,ò)rf   c                 ód   >• T R                   R                  R                  SSSSS9R                  $ )Nrä  T)Úroot_moduleÚverboseÚinclude_strideÚinclude_device)r©  r“  Úpython_codeÚsrcrã  s   €rd   re   rÛ  Š
  s8   ø€  t§~¡~×';Ñ';×'GÑ'GØ$*Ø $Ø'+Ø'+ð	 (Hð (÷
 ‘cð(rf   )Úmetadata_fnÚ
payload_fn)Úinsert_deferred_runtime_assertsÚreenter_make_fxrÄ  rß  )r  r[   rY  r[   )r=  úCallable[_P, R]rú  zSequence[PHBase]rY  r  )!r‘  rl   r  rÁ   rÂ   rñ   r1  r   Úenter_contextr…   rƒ   r'  rª  r¨  r«  rD  Ú_set_make_fx_tracerr©  rš   rM   r�  rÔ  rh   Ú	Exceptionr$   Úis_hop_subgraph_tracerÚ_guardsr  rÂ  Útorch.fx.passes.runtime_assertr  Ú	recompilerÉ  )rä  r=  r  rú  ró  rû  r  r1  Ústackrõ   r  r  rì   s   `           @rd   Ú_trace_innerÚ_MakefxTracer._trace_inner!
  s  ù€ ó 	ä�oŠoÔCÀTÓJˆ÷.	Ið .	Iô`	ñ ˜$ÓˆÙ˜!Ó!ˆô .4¯[ª[Ü" D§O¡Oó.
ˆ
ô Œ[˜EØ×Ñ¤	¨$×*BÑ*BÓ CÔDØ×$×$Ø×#Ñ# D×$9Ñ$9Ô:Ø×Ñ × ;Ñ ;Ô<Ø×Ñ × 8Ñ 8Ô9Ø×Ñ × ;Ñ ;Ô<Ø×Ñ 
Ô+Ø×ÑÔ 6Ó 8Ô9Ø×ÑÔ 3°DÓ 9Ô:à�~‰~Ñ%Ü$Ð%CÓDÐDðÜ"Ü˜T¨¯©¸×9JÑ9JÓKØŸ>™>Ü"'¨£*ñ‘÷ ðH ×'Ñ'×)Ñ)Ø#Ÿm™m×<Ñ<¸TÓBÐB�ÕBØ×#Ñ#Ñ/åVá+¨A¨y×/BÑ/BÐDUÔVØ�K‰KŒMà×Ñ 
Ó*Ø×$Ñ$Ñ,Ü$Ð%JÓKÐKØ×/Ñ/×9Ñ9ˆAŒKØˆøô= ó Ü Øñ!ô òð ðú÷' �[ús   Á/C>JÅ.=I'É'JÊJÊ
Jc                ó€   • U R                  X5         U R                  " U/UQ76 sS S S 5        $ ! , (       d  f       g = fra   )rÌ  r  )rä  r=  r  s      rd   rl  Ú_MakefxTracer.trace£
  s/   € Ø×)Ñ)¨!Õ2Ø×$Ò$ QÐ.¨Ò.÷ 3×2×2ús   ’/¯
=c                ó   • U R                   S L$ ra   rÒ  rã  s    rd   r  Ú$_MakefxTracer.is_hop_subgraph_tracer§
  s   € Ø×!Ñ!¨Ð-Ð-rf   c                ó  • [        U R                  SU R                  U R                  U R                  U R
                  U R                  U S9nUR                  U 5         UR                  " U/UQ76 sS S S 5        $ ! , (       d  f       g = f)Nr  rÒ  )	r¡  rƒ   r¦  rÔ  r§  r­  rÌ  rÕ  r  )rä  r=  r  Ú
sub_tracers       rd   Útrace_subgraphÚ_MakefxTracer.trace_subgraphª
  sw   € ä"Ø×$Ñ$ØØ×'Ñ'Ø×ÑØ×$Ñ$Ø×%Ñ%Ø×-Ñ-Øñ	
ˆ
ð ×/Ñ/°Õ5Ø×*Ò*¨1Ð4¨tÒ4÷ 6×5×5ús   ÁA;Á;
B	c                ó\  • [        U[        5      (       d  [        S[        U5       35      e[	        USU R
                  U R                  U R                  U R                  U R                  U S9nUR                  U 5         UR                  " U/UQ76 sS S S 5        $ ! , (       d  f       g = f)NzExpected Mapping, got r  rÒ  )r›   r   rš   r¼   r¡  r¦  rÔ  r§  r­  rÌ  rÕ  r  )rä  r=  Údecomp_tabler  r  s        rd   Útrace_subgraph_custom_decompÚ*_MakefxTracer.trace_subgraph_custom_decomp¹
  s™   € ô ˜,¬×0Ñ0Ü Ð#9¼$¸|Ó:LÐ9MÐ!NÓOÐOä"ØØØ×'Ñ'Ø×ÑØ×$Ñ$Ø×%Ñ%Ø×-Ñ-Øñ	
ˆ
ð ×/Ñ/°Õ5Ø×*Ò*¨1Ð4¨tÒ4÷ 6×5×5ús   Â BÂ
B+)r­  r¦  r­  rÌ  rƒ   r'  r©  r¬  rÔ  r¨  r1  rt  rª  r§  rl  r«  rÉ  )FNFF)rƒ   r  rÉ  r7  r¦  r¡   rÔ  r¡   r§  r¡   r­  r¡   rÌ  r¡   rl  r¡   r¬  úOptional[_MakefxTracer]rt  r¡   r­  r¡   rY  rZ  )rY  r6  )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]rY  rZ  )r=  r   r  r¥  rY  úGenerator[None, None, None])r©  r¡  rY  rZ  )r¬  r¡  rY  r%  )r=  r   r  rt  rY  r.   )r=  r   r  rt  rY  r  rê  )r=  r   r!  rY   rY  r.   )rŠ   r‹   rŒ   r�   rå  r±  rº  r   rÌ  rÉ  rÕ  r  rl  r  r  r"  rŽ   rv   rf   rd   r¡  r¡  c	  s|  † ð %*Ø15Ø$)Ø05ð.OàDð.Oð ð.Oð !%ð	.Oð
 ð.Oð "ð.Oð #ð.Oð '+ð.Oð "ð.Oð /ð.Oð "ð.Oð *.ð.Oð 
õ.Oô`
ðBà7ðBð DðBð #Sð	Bð
 2ðBð &=ðBð &SðBð 
ôBð  ð>-Øð>-Ø!3ð>-à	$ó>-ó ð>-ô@Að* ð-Ø*ð-à	$ó-ó ð-ô8@ôD/ô.ô5ð5Øð5Ø)Fð5à	÷5rf   r¡  r$  Ú_CURRENT_MAKE_FX_TRACERc              #  ó8   #   • [         n U q S v •  Uq g ! Uq f = f7fra   )r&  )r¯   Úprev_tracers     rd   r  r  Ð
  s&   é € ô *€Kð.Ø"(ÐÛà"-Ñø +Ñüs   ‚Š �“—)rÔ  r§  r­  rÌ  rl  rt  r­  c               óæ   ^ ^• US;  a  [        SU 35      eSSKJn  [        UUUUUUUU=(       d    UR                  R
                  S:H  U	U
S9
m[        R                  " T 5      SU U4S jj5       nU$ )	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Å  rB   )rl  rt  r­  c                 ó*   >• TR                   " T/U Q76 $ ra   )rl  )r  r=  Úmake_fx_tracers    €€rd   r‰  Úmake_fx.<locals>.wrapped  s   ø€ à×#Ò# AÐ-¨Ò-Ð-rf   )r  rt  rY  r.   )rš   rÏ  rÆ  r¡  rl  Úprovenance_tracking_levelr;  r‹  )r=  rƒ   rÉ  r¦  rÔ  r§  r­  rÌ  rl  rt  r­  rÆ  r‰  r+  s   `            @rd   rN   rN   Û
  s�   ù€ ð, Ð7Ó7ÜØ;¸L¸>ÐJó
ð 	
õ 'ä"ØØØØØØØ$Ø/÷ 7Ø�<‰<×1Ñ1°QÑ6Ø/Ø(Gñ€Nô ‡_‚_�QÓ÷.ó ð.ð €Nrf   c                 óR   • [         R                  R                  R                  5       $ ra   )rì   rý   Ú_python_dispatchÚ _get_current_dispatch_mode_stackrv   rf   rd   Úget_torch_dispatch_modesr1    s   € Ü�;‰;×'Ñ'×HÑHÓJÐJrf   c                 ó   • [        5       $ ra   )rS   rv   rf   rd   rR   rR     s   € ÜÓÐrf   c                 óJ  • [         R                  R                  [         R                  R                  R
                  5      n [         R                  R                  [         R                  R                  R
                  5      nU b  Ub  [        SU  SU 35      eU =(       d    U$ )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ð   rî   rš   )Úpre_dispatch_moder÷   s     rd   rS   rS     s‚   € ô Ÿ
™
×BÑBÜ�‰×&Ñ&×,Ñ,óÐô �8‰8×&Ñ&¤u§x¡x×'EÑ'E×'KÑ'KÓL€DØÑ%¨©ÜÐ1Ð2CÐ1DÀGÈDÈ6ÐRÓSÐSØ×$ Ð$rf   c                ó¬   • [        5       nU(       d  [        S5      e[        5          / nUR                  XX5      sSSS5        $ ! , (       d  f       g= f)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.
zExpected proxy mode to be setN)rS   rš   r8  rè  )r  r  r>  r÷   r�  s        rd   rT   rT   &  sD   € ô Ó€DÞÜÐ<Ó=Ð=ô 
%Õ	&àˆØ×$Ñ$ T°$Ó?÷ 
'×	&×	&ús   §AÁ
Ac                 ó\   • [        [        R                  R                  R                  5      $ ra   )r8   rì   rí   rï   rð   rv   rf   rd   r8  r8  ;  s   € äœuŸx™x×=Ñ=×CÑCÓDÐDrf   c                ó.  ^• SSK Jn  T[        ;   ai  UR                  SSU4S j5      (       a  [        $ U    U =R
                  S-  sl        [        T   " U0 UD6nU =R
                  S-  sl        UsS S S 5        $ [        $ ! , (       d  f       [        $ = f)Nr   )ÚCompilerBisectorÚaot_eager_decomp_partitionr0  c                 ó   >• [        T 5      $ ra   )Úrepr)r  s   €rd   re   Ú%maybe_handle_decomp.<locals>.<lambda>J  s	   ø€ Ä4ÈÄ8rf   rB   )Ú!torch._inductor.compiler_bisectorr9  rZ   Údisable_subsystemrÂ  r�  )r1  r  r  r>  r9  rë   s    `    rd   rÃ  rÃ  @  s�   ø€ õ Cà	Ô(Ó(Ø×-Ñ-Ø(¨/Ô;K÷
ñ 
ô "Ð!âØ×$Ò$¨Ñ)Õ$Ü-¨bÒ1°4ÐB¸6ÑBˆCØ×$Ò$¨Ñ)Õ$Ø÷	 ‰Zô Ð÷ ŒZô Ðús   ¶;BÂ
Bc                óŒ   • [        XU5      u  pV[        5          [        XTUS9" U5      nSSS5        U$ ! , (       d  f       W$ = f)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>  r8  rN   )r  r  r>  rÉ  rƒ   r‰  Úall_argsr!  s           rd   Úget_isolated_graphmodulerB  W  sL   € ô 5°TÀÓHÑ€Gä	$Õ	&ÜØÈ<ò
à
óˆ÷ 
'ð €I÷	 
'Ô	&ð €Iús	   ™4´
Ac                ór  • SSK Jn  [        R                  R	                  [        R                  R
                  R                  5      nU(       ai  UR                  (       aW  U" UR                  U 5      =n(       a<  [        U[        5      (       d  [        SU 35      eXAR                  R                  S'   gggg)zOA helper function for setting up unbacked_bindings on the destination FX graph.rB   )Úcompute_unbacked_bindingsr·   Úunbacked_bindingsN)rg  rD  rì   rí   rî   rï   ÚFAKErÂ  r›   r/   rš   rœ   r”   )rë   r½  rD  r  Úsymbol_to_paths        rd   ru  ru  m  sŽ   € å:ô —‘×+Ñ+¬E¯H©H×,JÑ,J×,OÑ,OÓP€IÞ�Y×(×(Ù6°y×7JÑ7JÈCÓPÐPˆ>ÕPÜ˜i¬×/Ñ/Ü$Ð';¸I¸;Ð%GÓHÐHØ7E�N‰N×ÑÐ 3Ò4ð Qð )€yrf   )r{   r  r   r	  rY  r  )rƒ   r  rY  z4Generator[Mapping[OpOverload, Callable], None, None])rœ   r’   rY  r¡   rê  )rY  r%  )r®   r   r¯   r¡  r°   r«   rY  rZ  )r®   z!_AnyScriptObjectType | OpaqueTyper¯   r¡  r°   r/   rY  rZ  )r®   r�   r¯   r¡  r°   r´   rY  rZ  )r®   z:Union[PySymType, _AnyScriptObjectType, Tensor, OpaqueType]r¯   r¡  r°   rt  rY  rZ  )r®   r   r¯   r¡  rY  r¡   )r®   r   r¯   r¡  rY  r«   )r®   r   r¯   r¡  rÓ   r\   rY  zUnion[_ProxyTensor, U])
r®   r   r¯   r¡  rÓ   r\   rÖ   zCallable[[_ProxyTensor], R]rY  úUnion[R, U])r®   rC  r¯   r¡  rY  r/   )r®   rC  r¯   r¡  rÓ   r\   rY  zUnion[Proxy, U])
r®   rC  r¯   r¡  rÓ   r\   rÖ   zCallable[[Proxy], R]rY  rH  )r®   r�   r¯   r¡  rY  r´   )r®   r�   r¯   r¡  rÓ   r[   rY  zUnion[T, _PySymProxyType])r®   r#   r¯   r¡  rÓ   r[   rY  z Union[T, _OpaqueObjectProxyType])
r®   r�   r¯   r¡  rÓ   r\   rÖ   zCallable[[_PySymProxyType], R]rY  rH  )
r®   z:Union[Tensor, _AnyScriptObjectType, PySymType, OpaqueType]r¯   r¡  rÓ   rt  rÖ   r   rY  rt  )rõ   ztorch.TensorrY  zlist[Proxy])rY  z*dict[type[sympy.Expr], Callable[..., Any]]ra   )r¯   r¡  rÄ   z
sympy.Exprrë   zPySymType | NonerY  z1IntLikeType | FloatLikeType | BoolLikeType | None)F)r˜   r   r  r¡   rY  rz  )r˜   r  r  r¡   rY  r  )r¯   r¡  r)  r¡   rY  r%  )r°   r/   r˜   r  rY  r/   )
r¯   r¡  r=  r  r  rW  r>  rX  rY  zThunk[R])
r]  r   r°   r/   r^  rz  r¯   r¡  rY  rZ  )
rv  r[   rw  ra  r^  rm  r¯   r¡  rY  r[   )r¯   r¡  rY  z5Callable[[PySymType], Union[bool, int, float, Proxy]])r¯   r¡  rõ   r   rY  zUnion[_ProxyTensor, Tensor])r¯   r¡  rõ   rC  rY  rD  )r¯   r¡  rõ   r�   rY  z!Union[_PySymProxyType, PySymType])r¯   r¡  rõ   r#   rY  z(Union[_OpaqueObjectProxyType, PySymType])r¯   r¡  rõ   z6Tensor | _AnyScriptObjectType | PySymType | OpaqueTyperY  rt  )r  rt  r1  rñ   rY  rZ  )r¥  z'Union[list[object], tuple[object, ...]]r¯   r¡  rY  z-tuple[list[object], tuple[object, ...], bool])r1  rñ   r  rG   rÔ  r¡   r  r¥  r>  rë  rY  rt  )r<  r   rV  z:Optional[tuple[tuple[Argument, ...], dict[str, Argument]]]rY  r¡   )r^  ztype[TorchFunctionMode]rY  zCCallable[[], _GeneratorContextManager[Optional[TorchFunctionMode]]])r  rŸ  r¯   r0   rq  zOptional[tuple[Any, ...]]rY  r.   )
r=  zCallable[[Unpack[_Ts]], R]rˆ  ztuple[Unpack[_Ts]]r¯   r¡  rÔ  r¡   rY  r  )r  z+OpOverload | torch._ops.HigherOrderOperatorrY  r%  )
r¯   r¡  r  rG   r  r¥  rë   rt  rY  rZ  )
r¯   r¡  r  rG   r  r¥  rë   r�   rY  r/   )r1  r  r7  r¡   rY  r  )r  zCallable[..., R]r  r¥  r>  rë  rY  z0tuple[Callable[[list[object]], R], list[object]])r¯   r¡  rY  r%  )Nr  F)r=  r   rƒ   r  rÉ  r7  r¦  r¡   rÔ  r¡   r§  r¡   r­  r¡   rÌ  r¡   rl  r¡   rt  r¡   r­  r¡   rY  zCallable[..., GraphModule])rY  zlist[TorchDispatchMode])rY  z Optional[ProxyTorchDispatchMode])r  r  r  rW  r>  rX  rY  r^   )rY  z-Generator[ProxyTorchDispatchMode, None, None])
r1  rñ   r  rG   r  r¥  r>  rë  rY  rt  )r  N)r  r   r  r¥  r>  rë  rÉ  r7  rƒ   r  rY  r.   )rë   rt  r½  ra  rY  rZ  )òÚ
__future__r   r;  r÷  Úloggingr  Ú	threadingrÁ   r%  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   r   rì   Ú
torch._opsÚtorch.fxrn  Útorch.fx.tracebackrÞ  r‘  Útorch.utils._pytreerý   Ú_pytreerl   r   r   r   Útorch._dispatch.pythonr    Ú"torch._library.fake_class_registryr!   Útorch._library.opaque_objectr"   r#   Útorch._loggingr$   r%   Útorch._subclasses.fake_implsr&   Útorch._subclasses.fake_tensorr'   r(   r)   r*   r+   Ú#torch._subclasses.functional_tensorr,   Útorch._subclasses.meta_utilsr-   r.   r/   r0   Útorch.fx.graph_moduler1   Útorch.fx.noder2   r3   r4   Útorch.fx.passes.shape_propr5   Útorch.nnr6   r[  r7   Útorch.utils._python_dispatchr8   r9   r:   r;   r<   Útorch.utils._statsr=   Útorch.utils._thunkr>   Útorch.utils.weakr?   r@   rA   Ú_backward_staterC   Úsym_noderD   r�  rE   rÃ   Útorch._higher_order_ops.utilsrF   rG   Útorch.fx._symbolic_tracerH   Útorch.typesrI   rJ   rK   Ú__all__r¡  rè  r¾   rC  rK  rL  rÓ  Ú	getLoggerrŠ   r¹   Ú_loggingÚgetArtifactLoggerrÁ  rZ   r–   r»  r[   r\   r]   r^   r_   r¼   Únull_ctx_typeÚregister_pytree_nodeÚSizerh   Ú!_pytree_subclasses_that_lose_infor�   r…   rt  Ú
proxy_slotr‡   Ú
no_defaultrQ   r�   r’   r�   ÚlocalrŸ   r¦   r£   r§   rª   r±   rÎ   r´   rÏ   rÌ   rú   Úcacher  rä   r  rb   r  r7  r	  r
  r¡   r  r  r-  rV   rU   r6  r?  r`  ra  rb  rx  r«   r‚  r…  r  r  r¬  rœ  r©  rÝ  rß  rÆ   rL   r9  ra  Ú_disable_dynamorM   r�  rŽ  r”  r–  Ú)_temp_remove_metadata_torch_function_moder©  Ú-_temp_remove_pre_dispatch_torch_function_moderñ   r  rï  r°   ÚGraphAppendingTracerrW   ÚInterpreterrO   r  rP   r>  rD  r|  rF  rH  rO  r¡  r&  r  rN   r1  rR   rS   rT   r8  rÃ  rB  ru  rv   rf   rd   Ú<module>r{     s±  ðö #ã Û Û Û Û Û Û Û ß 0ß BÓ Bß WÓ WÝ !÷
÷ 
õ 
÷ DÓ CÝ %ã Û Ý ß )Ð )ß $Ð $ß )Ñ )Ý ;Ý ?ß DÝ +Ý *Ý 4÷õ õ AÝ 6ß /Ñ /Ý .÷ñ õ
 @Ý Ý -÷õ õ %Ý $ß WÑ Wå *Ý ö ÛÝ.ãåEÝ%Ý/ßDÑDò€ð ÐAÑB€à×&Ñ&Ð(8Ð9Ð Ø˜U×/Ñ/Ð1AÐAÑBÐ à‡y�y‡~�~€Ø‡y�y‡~�~€à×Ó˜Ó!€Ø—n’n×6Ò6°xÐARÓSÐ à=?Ð Ð:Ó ?àÐ áˆCƒL€ÙˆCƒL€Ùˆtƒ_€ÙˆCƒL€Ù�5Ó€á�[Ó!€ð × Ó Ø	‡J‚JÙÙñð &ò
ð" &+§Z¢Z°Ð$7Ð !ôBð ð	>Ø@ð	>à9ó	>ó ð	>ñ ‹X€
÷	ñ 	ñ ‹\€
ç /ôˆxô ôMô )§/¢/ô ñ &AÓ%BÐ "ð EGÐ 'Ð)AÓ Fô4ð ó)>ó ð)>ðX 
Û Wó 
Ø Wð 
ðØ	*ðØ4@ðØINðà	óó 
ðð
 
ðØ	ðØ(ðØ1@ðà	óó 
ðð
4Ø	Cð4àð4ð ð4ð 
ô	4ônDð # 5™\€�Ó )Ø$)¨%¡LÐ ˜	Ó 0ð 
ðØ	ðàðð óó 
ðð 
ð!Ø	ð!àð!ð ð!ð ó	!ó 
ð!ð 
ðØ	ðàðð ðð +ð	ð
 óó 
ðð 
ðØ	ðàðð óó 
ðð 
ðØ	ðàðð ðð ó	ó 
ðð 
ðØ	ðàðð ðð $ð	ð
 óó 
ðð 
ðØ	ðàðð óó 
ðð 
ð$Ø	ð$àð$ð ð$ð ó	$ó 
ð$ð 
ð+Ø	ð+àð+ð ð+ð &ó	+ó 
ð+ð 
ðØ	ðàðð ðð .ð	ð
 óó 
ðð !Ù%ð	*Ø	Cð*àð*ð ð*ð ð	*ð
 õ*ôbð& ‡‚óó ðð  EIðfØðfØ *ðfØ1Aðfà6õföRð 	Øñàñð ñð ñ	ð
 ÐÑñð Ð"Ñ#ñ$ð ˆ3Ð!Ð!Ñ"ñ#ð ñð 
ñ	
ð ñ
ð ñð �ó ö '(ðT à,0ñ%Øð%Ø%)ð%à ô%ó ð%ð$ óó ðð óó ðô0ð Øð Ø,ð Ø5<ð ØHQð àô ðGBØðGBØ ðGBØ/?ðGBØIUðGBà	ôGBðT Ø	ˆ8�OÑ$ g¨f°oÐ.EÑ&FÐFñ€ð Ø
ˆHÐ%Ñ&¨°Ð8HÐ0HÑ(IÐIñ€ð
\Øð\àð\ð 'ð	\ð
 ð\ð ô\ð~ ÷ð ó ðð
Øðà:ôð, 
ð&Øð&Ø#ð&à ó&ó 
ð&ð
 
ð-Øð-Ø1ð-à'ó-ó 
ð-ð
 
ð,Øð,Ø&ð,à&ó,ó 
ð,ð
 
ð3Øð3Ø'ð3à-ó3ó 
ð3ð
(Øð(à=ð(ð ô(ð ˜Ÿš×+Ò+¨ZÐ8€ð=Ø
ð=Ø4ð=à	ô=ð@(KØ=ð(KØGSð(Kà2ô(KðVGØ&ðGà
ðGð ðGð ð	Gð
 ðGð ôG÷T'ñ 'ð> ÷ð ó ðô
x�fô xðz OSð,Øð,àKð,ð 
õ,ð^$Ø$ð$àHô$ðN ×Òð 04ð)NØ
!ð)Nàð)Nð -ð)Nð ô	)Nó ð)NðX+Ø!ð+àð+ð ð+ð ð	+ð
 ô+ð^ #'€ÐÓ &ð ðØ
5ðà óó ðô %Ð 1ô %ñ$ -SØó-Ð )ô<%Ð#4ô <%ñ~ 1WØ ó1Ð -ô
eÐ.ô eðP1Øð1Ø *ð1Ø2Dð1ØKQð1à	ô1ðØðØ *ðØ2DðØKTðà
ôôD"˜bŸhšh×;Ò;ô "ô4@0˜rŸ~š~ô @0ôF9 R§^¢^ô 9ðx;Øð;ð
 ð;ð ô;ð6Ø
ðØ"4ðØ>Oðà5ôð ó4ó ð4ô	¨)ô 	÷
ñ ô
m˜ô m÷`	g5ñ g5ðT 48Ð Ð0Ó 7ð ó.ó ð.ð DHØØ#(ð	/ð Ø %Ø!&Ø)-Ø %Ø %Ø,1ñ/Øð/à@ð/ð ð/ð !ð	/ð ð/ð ð/ð ð/ð #'ð/ð ð/ð ð/ð &*ð/ð  ö/ôdKôô%ð@Ø
ð@à
ð@ð ð@ð ô	@ð* óEó ðEðØ&ðàðð ðð ð	ð
 ôð6 ØCGðØ
ðà
ðð ðð ð	ð
 Aðð õõ,Frf   