Ë
    g^(h•" ã                   ó*  — d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
mZmZmZmZ ddlmZ ddlmZ ddlZddlmZmZ dd	lmZmZmZ dd
lmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& ddl'm(Z(m)Z) ddl*m+Z+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z:m;Z;m<Z< ddl=m>Z> 	 ddl?m@Z@ erddlBmCZC ddlDmEZEmFZF  ede¬«      ZGdQdRd„ZHdRd„ZIdeJeKe<f   fd„ZLd„ ZMh d£ZNd„ ZO G d„ de<«      ZP G d„ d eP«      ZQ G d!„ d"eP«      ZR G d#„ d$e<«      ZS G d%„ d&eS«      ZT G d'„ d(eP«      ZU G d)„ d*eU«      ZV G d+„ d,eQ«      ZW G d-„ d.eW«      ZX G d/„ d0eQ«      ZYdRd1„ZZ G d2„ d3eP«      Z[ G d4„ d5e<«      Z\ G d6„ d7e<«      Z]d8„ Z^dRd9„Z_ G d:„ d;eQ«      Z` G d<„ d=eQ«      Za G d>„ d?eQ«      Zb G d@„ dAe<«      Zc G dB„ dCe<«      Zd G dD„ dEe<«      Ze G dF„ dGe<«      ZfddHlDmgZgmhZh  G dI„ dJeh«      Zi ei«       Zj G dK„ dLe<«      Zk G dM„ dNe<«      Zl G dO„ dPe<«      Zmy# eA$ r dZ@Y �Œew xY w)SaŽ  
Function-related variable tracking classes for Dynamo's symbolic execution.

This module contains classes that track different types of functions during graph
compilation, including:
- User-defined functions and methods
- Built-in functions and methods
- Wrapped functions (e.g. from decorators)
- Special function types (e.g. functools.partial)
- Triton kernels and related function types

These classes are responsible for:
- Tracking function calls and their arguments
- Managing function closures and cell variables
- Handling function attributes and special methods
- Maintaining guards for function identity and closure contents
- Supporting function inlining and specialization
- Enabling proper symbolic execution of different function types

The variable trackers here work together with the rest of Dynamo to enable
accurate graph capture while handling Python's various function-related behaviors.
é    N)ÚSequence)ÚAnyÚCallableÚOptionalÚTYPE_CHECKINGÚTypeVar)ÚNever)Úpatché   )Ú	polyfillsÚ	variables)Úcreate_call_functionÚcreate_rot_nÚis_generator)Úget_dynamo_observed_exceptionÚhandle_observed_exceptionÚInfiniteGeneratorErrorÚObservedExceptionÚObservedGeneratorExitÚObservedUserStopIterationÚraise_observed_exceptionÚ	SkipFrameÚunimplementedÚunimplemented_v2ÚUnsupported)ÚGuardBuilderÚinstall_guard)Ú
AttrSourceÚConstantSourceÚDefaultsSourceÚGetItemSource)	Úcheck_constant_argsÚcheck_unspec_or_constant_argsÚcmp_name_to_op_mappingÚcountersÚidentityÚis_functionÚis_wrapper_or_member_descriptorÚistypeÚ	make_cellé   )ÚtypestrÚValueMutationNewÚVariableTracker©ÚConstantVariable)Ú_fsdp_param_group)ÚInstructionTranslator)ÚTritonGridTypeÚTritonKernelTypeÚ_F)Úboundc                 ó–   — t        |t        «      r|S |st        j                  | |«      S t        j                  j                  ||«      S ©N)Ú
isinstancer.   Úbuildr   ÚLazyVariableTrackerÚcreate)ÚtxÚvalÚsources      ú_/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_dynamo/variables/functions.pyÚwrap_bound_argrA   X   sB   € ä�#”Ô'Øˆ
ÙÜ×$Ñ$ R¨Ó-Ð-ô ×,Ñ,×3Ñ3°C¸Ó@Ð@ó    c                 ó’   — t        |j                  «       «      D ]+  \  }}t        |t        t        f«      sŒt        | |«      ||<   Œ- y r8   )ÚlistÚitemsr9   ÚtupleÚdictrA   )r=   ÚresultÚkÚvs       r@   Úwrap_args_kwargsrK   d   s>   € Ü�V—\‘\“^Ó$ò .‰ˆˆ1Ü�aœ%¤˜Õ'ä& r¨1Ó-ˆF�1ŠIñ.rB   rH   c                 óÆ   — | j                   j                  }|j                  D ]<  }|j                  «       }||v r!|j	                  ||j                  |«      «       |||<   Œ> y)zÇ
    Update `result` to add mapping from local name to new cells created
    directly by `code`, or update SideEffects in `parent` if the a local cell is
    already in `result` (cell argument).
    N)ÚoutputÚside_effectsÚco_cellvarsÚtrack_cell_newÚ
store_cellÚpop)ÚparentrH   ÚcoderN   ÚnameÚnew_cells         r@   Úinit_cellvarsrW   k   sa   € ð —=‘=×-Ñ-€Là× Ñ ò  ˆØ×.Ñ.Ó0ˆØ�6‰>ð ×#Ñ# H¨f¯j©j¸Ó.>Ô?ØˆˆtŠñ rB   c                 ó¼   — ddl m}  || ||||«      }||_        t        |t        «      rddlm}	 t         |	|«      «      }|�t        |t        «      sJ ‚||_        |S )Nr   )ÚFunctionType©Úpairwise)	ÚtypesrY   Ú__kwdefaults__r9   rF   Ú	itertoolsr[   rG   Ú__annotations__)
rT   Ú	f_globalsrU   ÚdefaultsÚclosureÚ
kwdefaultsÚannotationsrY   Úfuncr[   s
             r@   Ú_create_nested_fnrf   |   sa   € õ #á˜˜i¨¨x¸ÓA€DØ$€DÔä�+œuÔ%Ý&ä™8 KÓ0Ó1ˆð Ð¤*¨[¼$Ô"?Ð?Ð?Ø&€DÔà€KrB   >   Ú__doc__Ú__code__Ú__closure__Ú__globals__Ú__defaults__r]   r_   c                 ó&  — |xr t        ||«      }	 t        j                  ||«      }|t
        v rt        ||«      }|r t        j                  j                  |«      S t        j                  | «      S # t        $ r t	        t        | «       Y Œgw xY wr8   )r   ÚinspectÚgetattr_staticÚAttributeErrorr   Úfn_known_dunder_attrsÚgetattrr   r;   r<   r.   r:   )r=   Úfnr?   rU   Úsubobjs        r@   Úfn_var_getattrrt   ›   s�   € ØÒ0œ
 6¨4Ó0€Fð5Ü×'Ñ'¨¨DÓ1ˆð Ô$Ñ$Ü˜˜TÓ"ˆÙÜ×,Ñ,×3Ñ3°F¸FÓCÐCÜ× Ñ   VÓ,Ð,øô ò 5ô 	!¤°Ö4ð5ús   ’A4 Á4BÂBc                   óP   — e Zd Zd„ Zd„ Z	 	 	 	 	 	 	 	 dd„Zdddedefd„Zd	„ Z	d
„ Z
y)ÚBaseUserFunctionVariablec                 ó6   — | j                  «       j                  S r8   ©Úget_codeÚco_filename©Úselfs    r@   Úget_filenamez%BaseUserFunctionVariable.get_filename­   ó   € Ø�}‰}‹×*Ñ*Ð*rB   c                 ó6   — | j                  «       j                  S r8   ©ry   Úco_namer{   s    r@   Úget_namez!BaseUserFunctionVariable.get_name°   ó   € Ø�}‰}‹×&Ñ&Ð&rB   r=   r2   Úreturnc                 óL   — |j                  | g | j                  «       ¢|¢|«      S r8   )Úinline_user_function_returnÚ	self_args©r|   r=   ÚargsÚkwargss       r@   Úcall_functionz&BaseUserFunctionVariable.call_function³   s,   € ð ×-Ñ-¨dÐ4N°d·n±nÓ6FÐ4NÈÐ4NÐPVÓWÐWrB   rU   c                 óÆ   — d}	 t        | j                  «       |«      }t
        j                  j                  |«      S # t        $ r |dk(  rt        | t        «      rd}Y ŒAw xY w)NFÚ__name__T)ÚhasattrÚget_functionÚNotImplementedErrorr9   ÚNestedUserFunctionVariabler   r0   r<   ©r|   r=   rU   rH   s       r@   Úcall_obj_hasattrz)BaseUserFunctionVariable.call_obj_hasattr»   se   € ð ˆð	Ü˜T×.Ñ.Ó0°$Ó7ˆFô ×)Ñ)×0Ñ0°Ó8Ð8øô #ò 	Ø�zÒ!¤j°Ô7QÔ&RØ�ùð	ús   „= ½ A ÁA c                 ón   — t        t        j                  | j                  «       «      j                  «      S r8   )rD   rm   Ú	signaturer�   Ú
parametersr{   s    r@   Úinspect_parameter_namesz0BaseUserFunctionVariable.inspect_parameter_namesÇ   s'   € Ü”G×%Ñ% d×&7Ñ&7Ó&9Ó:×EÑEÓFÐFrB   c                 ó   — i S r8   © ©r|   r=   s     r@   Úclosure_varsz%BaseUserFunctionVariable.closure_varsÊ   ó   € Øˆ	rB   N©r=   r2   r‰   úlist[VariableTracker]rŠ   údict[str, VariableTracker]r„   r.   )r�   Ú
__module__Ú__qualname__r}   r‚   r‹   Ústrr.   r“   r—   r›   r™   rB   r@   rv   rv   ¬   sd   „ ò+ò'ðXà#ðXð &ðXð -ð	Xð
 
óXð
9Ø)ð
9Ø14ð
9à	ó
9òGórB   rv   c                   óÚ   ‡ — e Zd ZdZddhej
                  £Zed„ «       Zddˆ fd„Zˆ fd„Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zdeeef   fd„Zdddefd„Zdddedefd„Z	 	 	 	 	 	 	 	 dˆ fd„Zˆ xZS )ÚUserFunctionVariablez-Some unsupported user-defined global functionrr   Úis_constantc                 óf   — t        |j                  t        j                  «      «        | ||¬«      S ©N©r?   )r   Ú
make_guardr   ÚCLOSURE_MATCH©ÚclsÚvaluer?   s      r@   Úcreate_with_sourcez'UserFunctionVariable.create_with_source×   s(   € ä�f×'Ñ'¬×(BÑ(BÓCÔDÙ�5 Ô(Ð(rB   r„   c                 ó,  •— t        ‰| �  di |¤Ž t        |dd«      rd| _        nd| _        t	        |t
        j                  t        j                  j                  f«      sJ dt        |«      › d|› �«       ‚t        j                  |d|«      }|| _        y )NÚ_dynamo_marked_constantFTzexpected FunctionType found ú Ú_torchdynamo_inliner™   )ÚsuperÚ__init__rq   r¥   r9   r\   rY   ÚtorchÚjitÚScriptFunctionr,   rm   rn   rr   ©r|   rr   r¥   rŠ   Ú	__class__s       €r@   r´   zUserFunctionVariable.__init__Ü   sŽ   ø€ Ü‰ÑÑ"˜6Ò"Ü�2Ð0°%Ô8à#ˆDÕà$ˆDÔä˜"œu×1Ñ1´5·9±9×3KÑ3KÐLÔMð 	
Ø*¬7°2«;¨-°q¸¸Ð=ó	
ÐMô ×#Ñ# BÐ(=¸rÓBˆØ&(ˆ�rB   c                 óX   •— t        | t        «      r| j                  S t        ‰| �  «       S r8   )r)   r¤   rr   r³   Úas_python_constant©r|   r¹   s    €r@   r»   z'UserFunctionVariable.as_python_constantí   s%   ø€ Ü�$Ô,Ô-Ø—7‘7ˆNä‰wÑ)Ó+Ð+rB   c                 ó   — g S r8   r™   r{   s    r@   r‡   zUserFunctionVariable.self_argsó   rœ   rB   c                 ó   — | j                   S r8   ©rr   r{   s    r@   r�   z!UserFunctionVariable.get_functionö   ó   € Ø�w‰wˆrB   c                 ó.   — | j                   j                  S r8   )rr   rh   r{   s    r@   ry   zUserFunctionVariable.get_codeù   s   € Ø�w‰w×ÑÐrB   c                 ó"   — t         j                  S r8   ©r\   rY   r{   s    r@   Úpython_typez UserFunctionVariable.python_typeü   ó   € Ü×!Ñ!Ð!rB   c                 ó4   — t        | j                  dd «      d uS ©NÚ__self__)rq   rr   r{   s    r@   Úhas_selfzUserFunctionVariable.has_selfÿ   s   € Ü�t—w‘w 
¨DÓ1¸Ð=Ð=rB   c                 ó.   — | j                   j                  S r8   )rr   rj   r{   s    r@   Úget_globalsz UserFunctionVariable.get_globals  s   € Ø�w‰w×"Ñ"Ð"rB   c                 ó”  — | j                   rJ ‚|j                  j                  }t        j                  t
        |¬«      }| j                  }|j                  xs g }t        |«      D ��	cg c])  \  }}	| j                  €dnt        | j                  |«      ‘Œ+ }
}}	t        j                  |j                  |j                  |j                  t!        t#        ||
«      D ��cg c]  \  }} |||¬«      ‘Œ c}}«      |j$                  «      }|j&                  r||j&                  D �ci c])  }|| j                  €dnt        | j                  |d¬«      “Œ+ }}|j&                  j)                  «       D ��ci c]  \  }}| ||||   ¬«      “Œ c}}|_         t+        j,                  |«      j.                  |i |¤Ž}|j1                  «        t3        |j4                  j)                  «       «      }t7        ||«       t9        |||j                  «       | j                  j$                  xs d}t;        |«      t;        | j                  j                  j<                  «      k(  sJ ‚t#        t?        j@                  «       | j                  j                  j<                  |«      D ]Í  \  }}}|j                  jB                  }||v r||   }n¢| j                  rbtE        tG        | j                  d«      |«      }tG        |d«      }	 tI        jJ                  ||jL                  |«      }|jU                  |||«      }n4	 tI        jJ                  ||jL                  «      }|jU                  d||«      }|||<   ŒÏ |S c c}	}w c c}}w c c}w c c}}w # tN        $ r tQ        jR                  «       }Y Œ‡w xY w# tN        $ r tQ        jR                  «       }Y Œuw xY w)	z—
        Assume `args` and `kwargs` are VariableTracker arguments for a call to
        this function, create new bindings for initial locals.
        )r=   N)r>   r?   T)Úis_kwr™   ri   Úcell_contents)+r¥   rM   Úroot_txÚ	functoolsÚpartialrA   rr   rk   Ú	enumerater?   r    r\   rY   rh   rj   r�   rF   Úzipri   r]   rE   rm   r•   ÚbindÚapply_defaultsrG   Ú	argumentsrK   rW   ÚlenÚco_freevarsr^   ÚcountrN   r!   r   r.   r:   rÎ   Ú
ValueErrorr   ÚDeletedVariableÚtrack_cell_existing)r|   rS   r‰   rŠ   rÏ   Úwraprr   ra   ÚidxÚ_Údefaults_sourcesÚargr?   Ú	fake_funcrI   Úkwdefaults_sourcesrJ   r6   rH   rb   rU   ÚcellrN   Úcell_varÚclosure_cellÚclosure_cell_contentsÚcontents_vars                              r@   Ú	bind_argszUserFunctionVariable.bind_args  s„  € ð
 ×#Ò#Ð#Ð#Ø—-‘-×'Ñ'ˆÜ× Ñ ¤°GÔ<ˆà!%§¡ˆØ—?‘?Ò( bˆô $ HÓ-÷
á��Qð —K‘KÐ'‰D¬^¸D¿K¹KÈÓ-MÑMð
Ðñ 
ô ×&Ñ&Ø�K‰KØ�N‰NØ�K‰KÜô (+¨8Ð5EÓ'F÷á#˜˜Vñ ˜S¨Ö0óóð �N‰Nó
ˆ	ð ×Òð ×*Ñ*ö"ð ð à—{‘{Ð*ñ ä'¨¯©°Q¸dÔCñDð"Ðð "ð ×-Ñ-×3Ñ3Ó5÷(á�A�qð ‘4˜AÐ&8¸Ñ&;Ô<Ñ<ó(ˆIÔ$ð
 2”×!Ñ! )Ó,×1Ñ1°4ÐB¸6ÑBˆØ×ÑÔÜ�e—o‘o×+Ñ+Ó-Ó.ˆä˜ &Ô)Ü�f˜f b§k¡kÔ2Ø—'‘'×%Ñ%Ò+¨ˆÜ�7‹|œs 4§7¡7×#3Ñ#3×#?Ñ#?Ó@Ò@Ð@Ð@Ü"Ü�O‰OÓ˜tŸw™w×/Ñ/×;Ñ;¸Wó 
ò "	$‰OˆC��tð "Ÿ=™=×5Ñ5ˆLØ�|Ñ#Ø'¨Ñ-‘à—’Ü,Ü˜tŸ{™{¨MÓ:¸Có �ô )3°<ÀÓ(QÐ%ð?Ü#2×#8Ñ#8Ø × 2Ñ 2Ð4Ió$�Lð (×;Ñ;Ø  $¨ó‘ð?Ü#2×#8Ñ#8¸À×ASÑASÓ#T�Lð (×;Ñ;¸DÀ$ÈÓU�à#ˆF�4ŠLðE"	$ðH ˆùóU
ùóùò"ùó(øô< "ò ?ä#,×#<Ñ#<Ó#>’Lð?ûô "ò ?ä#,×#<Ñ#<Ó#>’Lð?ús<   Á*.M-ÃM3Ä$.M9Å1M>Ë;!NÌ1 N'ÎN$Î#N$Î'OÏOr=   r2   rU   c                 ó‚   — |t         v rt        j                  | |«      S t        || j                  | j
                  |«      S r8   )r$   r   ÚGetAttrVariablert   rr   r?   ©r|   r=   rU   s      r@   Úvar_getattrz UserFunctionVariable.var_getattr\  s7   € ØÔ)Ñ)Ü×,Ñ,¨T°4Ó8Ð8Ü˜b $§'¡'¨4¯;©;¸Ó=Ð=rB   c                 ól   — t        | j                  |«      }t        j                  j	                  |«      S r8   )rŽ   rr   r   r0   r<   r’   s       r@   r“   z%UserFunctionVariable.call_obj_hasattra  s+   € ô ˜Ÿ™ $Ó'ˆÜ×)Ñ)×0Ñ0°Ó8Ð8rB   c                 ó  •— | j                   t        j                  j                  u rÉ t	        j
                  | j                   «      j                  |i |¤Ž}|j                  d   }t        |t        «      s)|j                  «       }t        d|j                  › d�«       t        |t        «      s|j                  «       }t        d|› d�«       |j                   }t        j                   |d¬«      S | j"                  r't%        || j                   | j                  «       ||«      S |j&                  j(                  j*                  r‘|j&                  j(                  j,                  sq	 ddlm}	 |	�h| j                   |	j4                  |	j6                  fv rDt        j                  j8                  j-                  |«      5  t:        ‰
| �y  |||«      cd d d «       S t:        ‰
| �y  |||«      S # t2        $ r d }	Y Œˆw xY w# 1 sw Y   Œ+xY w)	Nr   z=`nonstrict_trace` expects a callable, but got value of type <ú>z)
Applying `nonstrict_trace` to function <zl>; however, `nonstrict_trace` currently requires the function to be defined outside `torch.compile` region.
T©Únonstrict_traceable)Ú	FSDPState)rr   rµ   Ú_dynamoÚnonstrict_tracerm   r•   rÔ   r‰   r9   rv   rÄ   r   r�   r¤   r‚   r   ÚTorchInGraphFunctionVariabler¥   Úinvoke_and_store_as_constantrM   Úcurrent_tracerÚunder_activation_checkpointÚ#allow_side_effects_under_checkpointÚ/torch.distributed.fsdp._fully_shard._fsdp_stateró   Ú	ExceptionÚ_pre_forwardÚ_post_forwardrN   r³   r‹   )r|   r=   r‰   rŠ   r6   Úfn_varÚtypÚfn_namerr   ró   r¹   s             €r@   r‹   z"UserFunctionVariable.call_functiong  sÒ  ø€ ð �7‰7”e—m‘m×3Ñ3Ñ3Ø3”G×%Ñ% d§g¡gÓ.×3Ñ3°TÐD¸VÑDˆEØ—Z‘Z ‘]ˆFÜ˜fÔ&>Ô?Ø×(Ñ(Ó*�ÜØSÐTW×T`ÑT`ÐSaÐabÐcôô ˜fÔ&:Ô;Ø Ÿ/™/Ó+�Üð)Ø)0¨	ð 2ðôð —‘ˆBÜ×9Ñ9¸"ÐRVÔWÐWà×ÒÜ/Ø�D—G‘G˜TŸ]™]›_¨d°Fóð ð �I‰I×$Ñ$×@Ò@Ø—I‘I×,Ñ,×PÒPð!ÝUð Ð$¨¯©Ø×&Ñ&Ø×'Ñ'ð5ñ *ô —]‘]×/Ñ/×SÑSÐTVÓWñ CÜ ™7Ñ0°°T¸6ÓB÷Cñ Cä‰wÑ$ R¨¨vÓ6Ð6øô ò !Ø ’	ð!ú÷Cð Cús   Å%G& Æ:G7Ç&G4Ç3G4Ç7H ©F©r„   Nr�   )r�   r    r¡   rg   rv   Ú_nonvar_fieldsÚclassmethodr®   r´   r»   r‡   r�   ry   rÄ   rÉ   rË   rG   r¢   r.   ré   rí   r“   r‹   Ú__classcell__©r¹   s   @r@   r¤   r¤   Î   sÛ   ø„ Ù7ð 	Øðð 
"×	0Ñ	0ð€Nð ñ)ó ð)ö)ô",òòò ò"ò>ò#ðU°°c¸?Ð6JÑ1Kó Uðn>Ð5ð >¸Só >ð
9Ø)ð9Ø14ð9à	ó9ð-7à#ð-7ð &ð-7ð -ð	-7ð
 
÷-7ñ -7rB   r¤   c                   óJ   ‡ — e Zd Zddˆ fd„Zed„ «       Z	 	 	 	 	 	 	 	 dd„Zˆ xZS )ÚBuiltinMethodVariablec                 ój   •— t        ‰| �  di |¤Ž t        |t        j                  «      sJ ‚|| _        y ©Nr™   )r³   r´   r9   r\   ÚBuiltinMethodTyperr   r¸   s       €r@   r´   zBuiltinMethodVariable.__init__˜  s0   ø€ Ü‰ÑÑ"˜6Ò"Ü˜"œe×5Ñ5Ô6Ð6Ð6Øˆ�rB   c                 ó„   — | j                   }| j                  }|t        u xr |dk(  xs t        |«      t        u xr |dk(  S )NÚ__new__Ú__contains__)rÈ   r�   rF   ÚtypeÚ	frozenset)ÚobjÚmethod_selfÚmethod_names      r@   Úis_supported_builtin_methodz1BuiltinMethodVariable.is_supported_builtin_method�  sI   € à—l‘lˆØ—l‘lˆð œuÐ$ÒA¨¸	Ñ)Aò 
Ü�Ó¤Ð*ÒL¨{¸nÑ/Lð	
rB   c                 óø   — | j                   j                  }| j                   j                  }| j                  xr t	        | j                  d«      }t        j                  |||«      }|j                  ||||«      S rÇ   )rr   rÈ   r�   r?   r   r.   r:   Úcall_method)r|   r=   r‰   rŠ   r  rU   Ú
obj_sourceÚobj_vts           r@   r‹   z#BuiltinMethodVariable.call_function¨  sf   € ð —g‘g×&Ñ&ˆØ�w‰w×ÑˆØ—[‘[ÒH¤Z°·±¸ZÓ%Hˆ
Ü ×&Ñ& r¨;¸
ÓCˆØ×!Ñ! " d¨D°&Ó9Ð9rB   r  r  r�   )r�   r    r¡   r´   Ústaticmethodr  r‹   r  r  s   @r@   r	  r	  —  sG   ø„ öð
 ñ
ó ð
ð
:à#ð
:ð &ð
:ð -ð	
:ð
 
÷
:rB   r	  c            
       óþ   ‡ — e Zd Zdej                  ded   fˆ fd„Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Z d„ ZeZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdej,                  fd„Zdee   fd„Zd„ Zd„ Zd„ Zdddeddddddf
ˆ fd „Zˆ xZ S )!ÚLocalGeneratorObjectVariablerT   Úinline_tracerr2   c                 óN   •— t        ‰| �  di |¤Ž || _        || _        || _        y r  )r³   r´   rT   r`   r  )r|   rT   r`   r  rŠ   r¹   s        €r@   r´   z%LocalGeneratorObjectVariable.__init__¶  s+   ø€ ô 	‰ÑÑ"˜6Ò"ØˆŒ	Ø"ˆŒØ*ˆÕrB   c                 ó   — | j                   S r8   )rT   r{   s    r@   ry   z%LocalGeneratorObjectVariable.get_codeÂ  s   € Ø�y‰yÐrB   c                 ó6   — | j                  «       j                  S r8   rx   r{   s    r@   r}   z)LocalGeneratorObjectVariable.get_filenameÅ  r~   rB   c                 ó6   — | j                  «       j                  S r8   r€   r{   s    r@   r‚   z%LocalGeneratorObjectVariable.get_nameÈ  rƒ   rB   c                 ó   — t         ‚r8   )r�   r{   s    r@   r�   z)LocalGeneratorObjectVariable.get_functionË  s   € Ü!Ð!rB   c                  ó   — y©NFr™   r{   s    r@   rÉ   z%LocalGeneratorObjectVariable.has_selfÎ  ó   € ØrB   c                 ó"   — | j                  «       S r8   )r‚   r{   s    r@   r�   z%LocalGeneratorObjectVariable.__name__Ñ  s   € Ø�}‰}‹ÐrB   c                 óV   — | j                   j                  › d| j                  «       › d�S )Nú(ú))r¹   r�   r‚   r{   s    r@   Ú__str__z$LocalGeneratorObjectVariable.__str__Ô  s'   € Ø—.‘.×)Ñ)Ð*¨!¨D¯M©M«OÐ+<¸AÐ>Ð>rB   c                 óÂ  — ddl m} ddlm}m}m}  |j                  «       } ||«      } ||«      } ||«      }	|5  |5  |	5  | j                  |«      }
|
j                  s| j                  |«      | _
        t        j                  | j                  «      j                  |«       d d d «       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nr   )Ú"disallow_side_effects_in_generator)r2   Ú save_and_restart_speculation_logÚ(temporarely_allow_writes_to_output_graph)Útorch._dynamo.side_effectsr,  Útorch._dynamo.symbolic_convertr2   r-  r.  Ú
current_txÚ_get_inline_tracerÚgenerator_exhaustedÚforce_unpack_var_sequenceÚremaining_itemsr   ÚListIteratorVariableÚreconstruct)r|   Úcodegenr,  r2   r-  r.  r=   ÚsaveÚdisallowÚtempÚtracers              r@   r7  z(LocalGeneratorObjectVariable.reconstructÙ  sÝ   € ÝQ÷	
ñ 	
ð .Ð"×-Ñ-Ó/ˆÙ/°Ó3ˆÙ5°bÓ9ˆÙ7¸Ó;ˆàñ 	V�8ñ 	V˜Tñ 	VØ×,Ñ,¨RÓ0ˆFØ×-Ò-Ø'+×'EÑ'EÀbÓ'I�Ô$Ü×*Ñ*¨4×+?Ñ+?Ó@×LÑLÈWÔU÷		V÷ 	V÷ 	V÷ 	Vñ 	Vú÷ 	Vð 	Vú÷ 	Vð 	Vús;   ¼C¿C	ÁA"B=Â$C	Â,CÂ=CÃC	Ã	C	ÃCÃCc                 ó<   — | j                   j                  |||«      S r8   )rr   ré   rˆ   s       r@   ré   z&LocalGeneratorObjectVariable.bind_argsì  s   € Ø�w‰w× Ñ   T¨6Ó2Ð2rB   c                 ó   — | j                   S r8   ©r`   r{   s    r@   rË   z(LocalGeneratorObjectVariable.get_globalsï  ó   € Ø�~‰~ÐrB   c                 ó"   — t         j                  S r8   )r\   ÚGeneratorTyper{   s    r@   rÄ   z(LocalGeneratorObjectVariable.python_typeò  s   € Ü×"Ñ"Ð"rB   c                 óp   — ddl m} | j                  €|j                  || g i «      | _        | j                  S ©Nr   )ÚInliningInstructionTranslator)r0  rE  r  Úbuild_inline_tracer)r|   r=   rE  s      r@   r2  z/LocalGeneratorObjectVariable._get_inline_tracerõ  s;   € ÝPà×ÑÐ%Ø!>×!RÑ!RØ�D˜"˜bó"ˆDÔð ×!Ñ!Ð!rB   c                 ód  — | j                  |«      }| j                  «       rt        t        |«       	 t	        j
                  t        dt        d   i«      5  |j                  «       cd d d «       t        dxx   t        d   z  cc<   S # 1 sw Y   nxY wnf# t        $ r}|‚d }~wt        $ r ‚ t        $ rC}t        j                  j                  j                  | j                  «       «       t         |‚d }~ww xY w	 t        dxx   t        d   z  cc<   y # t        dxx   t        d   z  cc<   w xY w)Nr   Úinline_call)r2  Ú_is_generator_exhaustedr   ÚStopIterationr
   rG   r%   Úinline_call_r   r   r   rµ   rô   Ú
eval_frameÚ	skip_codery   r   )r|   r=   r<  Úes       r@   Únext_variablez*LocalGeneratorObjectVariable.next_variableþ  s  € Ø×(Ñ(¨Ó,ˆà×'Ñ'Ô)Ü$¤]°BÔ7ð	Aô —‘œH ¼ÀÑ8OÐ&PÓQñ -Ø×*Ñ*Ó,÷-ð -ô �_Ó%¬°-Ñ)@Ñ@Ô%÷-ð -úð -øä ò 	ØˆGûÜ%ò 	àÜò 	#Ü�M‰M×$Ñ$×.Ñ.¨t¯}©}«Ô?Ü Ð"ûð	#úð-ô �_Ó%¬°-Ñ)@Ñ@Ô%øŒH�_Ó%¬°-Ñ)@Ñ@Ô%úsM   ³#B ÁBÁ&	B ÂBÂB ÂD Â	C8ÂB Â C8Â5>C3Ã3C8Ã8D ÄD/c                  ó   — yr$  r™   rš   s     r@   Úhas_unpack_var_sequencez4LocalGeneratorObjectVariable.has_unpack_var_sequence  r%  rB   r„   c                  ó   — y©NTr™   rš   s     r@   Úhas_force_unpack_var_sequencez:LocalGeneratorObjectVariable.has_force_unpack_var_sequence  s   € ØrB   c                 ó‚   — g }	 	 |j                  | j                  |«      «       Œ"# t        $ r t        |«       Y |S w xY wr8   )ÚappendrO  r   r   )r|   r=   rH   s      r@   r4  z6LocalGeneratorObjectVariable.force_unpack_var_sequence  sL   € ØˆØðØ—‘˜d×0Ñ0°Ó4Ô5ð øô -ò Ü)¨"Ô-ØØˆðús   … & ¦>½>c                 ó˜   — | j                  |«      }	 |j                  |«       y # t        $ r}|j                  |«       Y d }~y d }~ww xY wr8   )r2  Ú_raise_exception_variabler   Úexception_handler)r|   r=   Úexcr<  rN  s        r@   Ú_setup_exceptionz-LocalGeneratorObjectVariable._setup_exception%  sH   € Ø×(Ñ(¨Ó,ˆð	(Ø×,Ñ,¨SÕ1øÜ ò 	(ð ×$Ñ$ Q×'Ñ'ûð	(ús   “% ¥	A	®AÁA	c                 óT   — | j                   d u xs | j                   j                  dk(  S )Nr   )r  Úinstruction_pointerr{   s    r@   Ú_is_generator_just_startedz7LocalGeneratorObjectVariable._is_generator_just_started.  s*   € Ø×!Ñ! TÐ)ÒX¨T×-?Ñ-?×-SÑ-SÐWXÑ-XÐXrB   c                 ó0   — t        | j                  dd«      S )Nr3  F)rq   r  r{   s    r@   rI  z4LocalGeneratorObjectVariable._is_generator_exhausted1  s   € Ü�t×)Ñ)Ð+@À%ÓHÐHrB   r=   rU   r‰   rž   rŠ   rŸ   r.   c                 ó°  •— |dk(  r| j                  |«      S |dk(  r| S |dk(  rp| j                  «       r-t        |«      r"t        d„ |D «       «      st	        t
        |«       | j                  |«      }|j                  |«       | j                  |«      S |dk(  rã| j                  |«      }| j                  «       s| j                  «       rd|_	        t        j                  d «      S 	 | j                  |t        j                  t        d«      «       t        j                   dk\  r5|j"                  j$                  d	k(  rd|_	        t        j                  d «      S 	 | j                  |«      rt	        t(        |«       n¬|d
k(  r§| j                  |«      }	 | j                  |t        |«      dk(  r|d   n|d   «       | j                  |«      }t1        dt2        fi «      }	 | j                  |t        j                  |d«      «       | j                  |«       t	        t(        |«       |S t6        ‰| �q  ||||«       y # t&        $ r d|_	        t        j                  d «      cY S w xY w# t&        $ r d|_	        t        j                  d «      cY S t*        $ r |j,                  €J ‚|j,                  cY S w xY w# t.        $ r ‚ w xY w# t5        |«      $ r Y |S w xY w)NÚ__next__Ú__iter__Úsendc              3   ó\   K  — | ]$  }t        |t        «      xr |j                  d u –— Œ& y ­wr8   )r9   r0   r­   )Ú.0rá   s     r@   ú	<genexpr>z;LocalGeneratorObjectVariable.call_method.<locals>.<genexpr>G  s1   è ø€ ò àô ˜sÔ$4Ó5ÒK¸#¿)¹)ÀtÐ:KÓKñùs   ‚*,ÚcloseTr™   )é   é   ÚCALL_INTRINSIC_1Úthrowrh  r+   r   Ú__InternalThrowException)rO  r^  r×   Úallr   Ú	TypeErrorr2  Ú	push_manyrI  r3  r   r0   r[  ÚExceptionVariableÚGeneratorExitÚsysÚversion_infoÚnext_instructionÚopnamer   ÚRuntimeErrorr   Úsymbolic_resultr   r  rü   r   r³   r  )	r|   r=   rU   r‰   rŠ   r<  ÚretvalÚexc_typer¹   s	           €r@   r  z(LocalGeneratorObjectVariable.call_method4  sÒ  ø€ ð �:ÒØ×%Ñ% bÓ)Ð)Ø�ZÒàˆKØ�VŠ^ð ×.Ñ.Ô0´S¸´Yô ñ à#ôô ô -¬Y¸Ô;Ø×,Ñ,¨RÓ0ˆFØ×Ñ˜TÔ"Ø×%Ñ% bÓ)Ð)Ø�WŠ_ð ×,Ñ,¨RÓ0ˆFØ×.Ñ.Ô0°D×4PÑ4PÔ4RØ-1�Ô*Ü ×1Ñ1°$Ó7Ð7ð8Ø×%Ñ%Øœ	×3Ñ3´MÀ2ÓFôô( ×$Ñ$¨Ò/Ø×/Ñ/×6Ñ6Ð:LÒLà15�FÔ.Ü$×5Ñ5°dÓ;Ð;ð.à×%Ñ% bÔ)Ü,¬\¸2Ô>øð �WŠ_ð ×,Ñ,¨RÓ0ˆFðð
 ×%Ñ% b´S¸³YÀ!²^¨$¨qª'ÈÈaÉÔQð
 ×'Ñ'¨Ó+ˆFô| Ð6¼¸ÀbÓIˆHð?Ø×%Ñ% b¬)×*EÑ*EÀhÐPRÓ*SÔTØ×"Ñ" 2Ô&ô
 )¬°vÔ>ØˆMä‰Ñ˜B  d¨FÕ3øôa )ò 8à-1�Ô*Ü ×1Ñ1°$Ó7Ò7ð8ûô )ò 8Ø-1�Ô*Ü ×1Ñ1°$Ó7Ò7Ü,ò .ð
 ×-Ñ-Ð9Ð9Ð9Ø×-Ñ-Ò-ð.ûô, %ò àðûôN 1°Ó:ò àð ˆMðúsI   Ã'A1H; Å!I& Æ(J5 Ç7K È;%I#É"I#É&%J2Ê"J2Ê1J2Ê5K ËKËK)!r�   r    r¡   r\   ÚCodeTyper   r´   ry   r}   r‚   r�   rÉ   r*  Ú__repr__r7  ré   rË   rÄ   r2  rO  rQ  ÚbuiltinsÚboolrT  rD   r.   r4  r[  r^  rI  r¢   r  r  r  s   @r@   r  r  µ  sæ   ø„ ð
+à�n‰nð
+ð  Ð 7Ñ8õ	
+òò+ò'ò"òòò?ð €HòVò&3òò#ò"òAò.ð°8·=±=ó ð¨t°OÑ/Dó ò(òYòIðz4à#ðz4ð ðz4ð &ð	z4ð
 -ðz4ð 
÷z4ñ z4rB   r  c                   ó   — e Zd ZdZy)Ú4ContextlibContextManagerLocalGeneratorObjectVariablezö
    .. note::

        This is only used when the function is annotated with @contextlib.contextmanager

        It is a special case of a generator function as we do not allow return a context manager
        from a torch.compile function.
    N)r�   r    r¡   rg   r™   rB   r@   r  r  ñ  s   „ òrB   r  c                   óR   ‡ — e Zd ZdZedœdefˆ fd„Zd„ Zd„ Z	 	 	 	 	 	 	 	 dd„Z	ˆ xZ
S )	ÚLocalGeneratorFunctionVariablezxfunctions that behaves like iterators

    .. note::

        This is a wrapper around (Nested)UserFunctionVariable
    )Úgenerator_clsÚvtc                ó@   •— t        ‰| �  di |¤Ž || _        || _        y r  )r³   r´   rƒ  r‚  )r|   rƒ  r‚  rŠ   r¹   s       €r@   r´   z'LocalGeneratorFunctionVariable.__init__  s$   ø€ ô 	‰ÑÑ"˜6Ò"ØˆŒØ*ˆÕrB   c                 ó’   — || j                   j                  j                  «       v rt        | |«      S t        | j                  |«      S r8   )r¹   Ú__dict__Úkeysrq   rƒ  )r|   rU   s     r@   Ú__getattr__z*LocalGeneratorFunctionVariable.__getattr__  s;   € Ø�4—>‘>×*Ñ*×/Ñ/Ó1Ñ1Ü˜4 Ó&Ð&Ü�t—w‘w Ó%Ð%rB   c                 ó6   — ddl m} |j                  || ||«      S rD  )r0  rE  rF  )r|   r=   r‰   rŠ   rE  s        r@   Ú_build_inline_tracerz3LocalGeneratorFunctionVariable._build_inline_tracer  s$   € ÝPà,×@Ñ@ØØØØó	
ð 	
rB   c                 ó  — t        | j                  j                  «       «      sJ ‚| j                  |||«      }| j                  j                  «       }| j                  j	                  «       }| j                  |||| j                  ¬«      S r§   )r   rƒ  ry   rŠ  rË   r‚  r?   )r|   r=   r‰   rŠ   r  rT   r`   s          r@   r‹   z,LocalGeneratorFunctionVariable.call_function   s�   € ô ˜DŸG™G×,Ñ,Ó.Ô/Ð/Ð/à×1Ñ1°"°d¸FÓCˆØ�w‰w×ÑÓ!ˆØ—G‘G×'Ñ'Ó)ˆ	ð ×!Ñ!ØØØØ—;‘;ð	 "ó 
ð 	
rB   r�   )r�   r    r¡   rg   r  r.   r´   rˆ  rŠ  r‹   r  r  s   @r@   r�  r�  þ  sO   ø„ ñð 3ò		+àõ	+ò&ò

ð
à#ð
ð &ð
ð -ð	
ð
 
÷
rB   r�  c                   ó,   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zˆ xZS )Ú3FunctionDecoratedByContextlibContextManagerVariablezm
    .. note::

        This is only used when the function is annotated with @contextlib.contextmanager
    c                 ó2   •— t        ‰| �  |fdt        i|¤Ž y )Nr‚  )r³   r´   r  )r|   rƒ  rŠ   r¹   s      €r@   r´   z<FunctionDecoratedByContextlibContextManagerVariable.__init__>  s%   ø€ Ü‰ÑØñ	
äNð	
ð ó	
rB   c                 ó˜   •— t         ‰| �  |||«      }t        |t        j                  j
                  j                  «      sJ ‚d|_        |S rS  )r³   rŠ  r9   rµ   rô   Úsymbolic_convertÚ&InliningGeneratorInstructionTranslatorÚis_generator_from_ctx_manager)r|   r=   r‰   rŠ   r<  r¹   s        €r@   rŠ  zHFunctionDecoratedByContextlibContextManagerVariable._build_inline_tracerE  sO   ø€ ô
 ‘Ñ-¨b°$¸Ó?ˆÜØÜ�M‰M×*Ñ*×QÑQô
ð 	
ð 
ð 04ˆÔ,ØˆrB   )r�   r    r¡   rg   r´   rŠ  r  r  s   @r@   r�  r�  5  s   ø„ ñô
÷ð rB   r�  c                   óv   ‡ — e Zd ZdZdˆ fd„Zdefd„Zd„ Zd„ Z	 	 	 	 	 	 	 	 dˆ fd	„Z	ˆ fd
„Z
dddefˆ fd„Zˆ xZS )ÚUserMethodVariablez$Some unsupported user-defined methodr„   c                 ó6   •— t        ‰| �  dd|i|¤Ž || _        y )Nrr   r™   )r³   r´   r  )r|   rr   r  rŠ   r¹   s       €r@   r´   zUserMethodVariable.__init__V  s   ø€ Ü‰ÑÑ)˜BÐ) &Ò)Øˆ�rB   c                 óh   — | j                   j                  › d| j                  › d| j                  › d�S )Nr(  z, r)  )r¹   r�   rr   r  r{   s    r@   r{  zUserMethodVariable.__repr__Z  s.   € Ø—.‘.×)Ñ)Ð*¨!¨D¯G©G¨9°B°t·x±x°jÀÐBÐBrB   c                 ó   — | j                   gS r8   )r  r{   s    r@   r‡   zUserMethodVariable.self_args]  s   € Ø—‘ˆzÐrB   c                 ó"   — t         j                  S r8   )r\   Ú
MethodTyper{   s    r@   rÄ   zUserMethodVariable.python_type`  s   € Ü×ÑÐrB   r=   r2   c                 óâ  •— ddl m}  || j                  «      rHg | j                  «       ¢|¢}t	        j
                  | j                  d¬«      }|j                  |||«      S |j                  j                  «       r�t        | j                  t        j                  «      ryt        | j                  dd«      }|�|j                  d«      r|dk7  s| j                  r¨| j                  j                  || j                  j                   ||| j                  ¬	«      S t"        �d| j                  t"        j$                  j&                  u r>t	        j(                  | j                  «      j                  || j                  g|¢­|«      S | j                  rQt        | j                  j*                  | j                  j                   «      }t-        ||| j/                  «       ||«      S t0        ‰	| �  |||«      S )
Nr   )Úis_nonstrict_trace_callableTrñ   r    Ú z	torch.nn.ztorch.nn.utils.parametrize)Úconstant)Útrace_rulesr›  rr   r‡   r   rö   r‹   rM   Úis_root_tracerr9   r  ÚNNModuleVariablerq   Ú
startswithr¥   r  r�   r1   ÚFSDPParamGroupÚuse_training_stateÚTorchCtxManagerClassVariabler­   r÷   r‚   r³   )
r|   r=   r‰   rŠ   r›  Ú	call_argsÚvarÚmodule_attrrr   r¹   s
            €r@   r‹   z UserMethodVariable.call_functionc  s¡  ø€ õ 	>á& t§w¡wÔ/Ø2˜$Ÿ.™.Ó*Ð2¨TÐ2ˆIÜ×8Ñ8Ø—‘¨TôˆCð ×$Ñ$ R¨°FÓ;Ð;ð �9‰9×#Ñ#Ô%¬*Ø�H‰H”i×0Ñ0ô+
ô " $§'¡'¨<¸Ó<ˆKð Ð'Ø×*Ñ*¨;Ô7ØÐ#?Ò?Ø×#Ò#à—x‘x×+Ñ+Ø˜Ÿ™×(Ñ(¨$°À×AQÑAQð ,ó ð ô Ð)Ø—‘Ô,×;Ñ;×NÑNÑNä×9Ñ9¸$¿'¹'ÓB×PÑPØ�T—X‘XÐ% Ñ% vóð ð ×ÒÜ˜Ÿ™Ÿ™¨¯©×)9Ñ)9Ó:ˆBÜ/°°B¸¿¹»ÈÈvÓVÐVÜ‰wÑ$ R¨¨vÓ6Ð6rB   c                 ó&   •— t         ‰| �  «       dd  S ©Nr+   )r³   r—   r¼   s    €r@   r—   z*UserMethodVariable.inspect_parameter_names   s   ø€ Ü‰wÑ.Ó0°°Ð4Ð4rB   rU   c                 óÚ   •— | j                   xr t        | j                   |«      }|dk(  r| j                  S |dk(  r!t        j                  || j
                  |«      S t        ‰| �  ||«      S )NrÈ   Ú__func__)r?   r   r  r.   r:   rr   r³   rí   )r|   r=   rU   r?   r¹   s       €r@   rí   zUserMethodVariable.var_getattr£  s`   ø€ Ø—‘Ò>¤¨D¯K©K¸Ó!>ˆØ�:ÒØ—8‘8ˆOØ�:ÒÜ"×(Ñ(¨¨T¯W©W°fÓ=Ð=Ü‰wÑ" 2 tÓ,Ð,rB   r  r�   )r�   r    r¡   rg   r´   r¢   r{  r‡   rÄ   r‹   r—   rí   r  r  s   @r@   r”  r”  S  sm   ø„ Ù.õðC˜#ó Còò ð;7à#ð;7ð &ð;7ð -ð	;7ð
 
õ;7ôz5ð-Ð5ð -¸S÷ -ñ -rB   r”  c                   ó<   ‡ — e Zd Zdˆ fd„Z	 	 	 	 	 	 	 	 dˆ fd„Zˆ xZS )ÚWrappedUserMethodVariablec                 ó´   •— |j                  dd «       |j                  dd «       t        ‰| �  |j                  |j                  fi |¤Ž || _        || _        y ©Nrr   r  )rR   r³   r´   rr   r  ÚwrappedÚcontext©r|   r°  r±  rŠ   r¹   s       €r@   r´   z"WrappedUserMethodVariable.__init__­  sI   ø€ Ø�
‰
�4˜ÔØ�
‰
�5˜$ÔÜ‰Ñ˜Ÿ™ W§[¡[Ñ;°FÒ;ØˆŒØˆ�rB   c                 ó–   •— | j                   j                  |«       t        ‰| �  |||«      }| j                   j	                  |«       |S r8   ©r±  Úenterr³   r‹   Úexit©r|   r=   r‰   rŠ   rH   r¹   s        €r@   r‹   z'WrappedUserMethodVariable.call_function´  óA   ø€ ð 	�‰×Ñ˜2ÔÜ‘Ñ& r¨4°Ó8ˆØ�‰×Ñ˜"ÔØˆrB   r  r�   ©r�   r    r¡   r´   r‹   r  r  s   @r@   r­  r­  ¬  ó8   ø„ õð	à#ð	ð &ð	ð -ð		ð
 
÷	ñ 	rB   r­  c                   ó<   ‡ — e Zd Zdˆ fd„Z	 	 	 	 	 	 	 	 dˆ fd„Zˆ xZS )ÚWrappedUserFunctionVariablec                 óž   •— |j                  dd «       |j                  dd «       t        ‰| �  |j                  fi |¤Ž || _        || _        y r¯  )rR   r³   r´   rr   r°  r±  r²  s       €r@   r´   z$WrappedUserFunctionVariable.__init__Á  sC   ø€ Ø�
‰
�4˜ÔØ�
‰
�5˜$ÔÜ‰Ñ˜Ÿ™Ñ. vÒ.ØˆŒØˆ�rB   c                 ó–   •— | j                   j                  |«       t        ‰| �  |||«      }| j                   j	                  |«       |S r8   r´  r·  s        €r@   r‹   z)WrappedUserFunctionVariable.call_functionÈ  r¸  rB   r  r�   r¹  r  s   @r@   r¼  r¼  À  rº  rB   r¼  c                 óø   — d„ }|D �cg c]
  } ||«      ‘Œ }}|j                  «       D ��ci c]  \  }}| ||«      “Œ }}} ||i |¤Ž}	| j                  j                  |	|t        |«      ¬«      S c c}w c c}}w )Nc                 óv   — t        | t        j                  «      r| j                  «       S | j	                  «       S r8   )r9   r   ÚTensorVariableÚget_real_valuer»   )Úxs    r@   Úconvertz-invoke_and_store_as_constant.<locals>.convertÕ  s0   € Ü�aœ×1Ñ1Ô2Ø×#Ñ#Ó%Ð%Ø×#Ñ#Ó%Ð%rB   r¨   )rE   rM   Úregister_attr_or_moduler   )
r=   rr   rU   r‰   rŠ   rÄ  rÃ  rI   rJ   Úress
             r@   r÷   r÷   Ô  s†   € ò&ð
 !%Ö%˜1‰G�A�JÐ%€DÐ%Ø(.¯©«×7¡  1ˆa‘˜“‰mÐ7€FÑ7Ù
ˆdÐ
�fÑ
€CØ�9‰9×,Ñ,ØØÜ˜dÓ#ð -ó ð ùò &ùÛ7s
   ˆA1¬A6c                   óz   ‡ — e Zd Zdhej                  £Z	 d	 dˆ fd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zd„ Zˆ xZS )r‘   r`   c	                 óL  •— t        ‰
| �  di |	¤Ž t        |j                  «       t        «      sJ ‚t        |j                  «       t
        j                  «      sJ ‚t        |t        «      sJ ‚|| _        || _	        || _
        || _        || _        || _        || _        || _        y r  )r³   r´   r9   r»   r¢   r\   rz  rG   r  rT   r`   ra   rc   rd   rb   Ú
wrapped_fn)r|   r  rT   r`   ra   rc   rd   rb   rÉ  rŠ   r¹   s             €r@   r´   z#NestedUserFunctionVariable.__init__ê  s”   ø€ ô 	‰ÑÑ"˜6Ò"Ü˜'×4Ñ4Ó6¼Ô<Ð<Ð<Ü˜$×1Ñ1Ó3´U·^±^ÔDÐDÐDÜ˜)¤TÔ*Ð*Ð*ØˆŒØˆŒ	Ø"ˆŒØ ˆŒØ$ˆŒØ&ˆÔØˆŒØ5?ˆ�rB   c                 ó   — g S r8   r™   r{   s    r@   r‡   z$NestedUserFunctionVariable.self_args  rœ   rB   c                 ó6   — | j                   j                  «       S r8   )rT   r»   r{   s    r@   ry   z#NestedUserFunctionVariable.get_code  s   € Ø�y‰y×+Ñ+Ó-Ð-rB   c                 ó"   — t         j                  S r8   rÃ   r{   s    r@   rÄ   z&NestedUserFunctionVariable.python_type  rÅ   rB   c                 óD  — | j                   rt        ‚t        j                  | j                  j                  «       | j                  | j                  j                  «       «      }| j                  r| j                  j                  «       |_	        | j                  r| j                  j                  «       |_        | j                  rZ| j                  j                  «       }t        |t        «      rddlm} t#         ||«      «      }t        |t"        «      sJ ‚||_        |S )Nr   rZ   )rb   r�   r\   rY   rT   r»   r`   r  ra   rk   rc   r]   rd   r9   rF   r^   r[   rG   r_   )r|   re   rd   r[   s       r@   r�   z'NestedUserFunctionVariable.get_function  sØ   € Ø�<Š<Ü%Ð%Ü×!Ñ!Ø�I‰I×(Ñ(Ó*Ø�N‰NØ�L‰L×+Ñ+Ó-ó
ˆð
 �=Š=Ø $§¡× @Ñ @Ó BˆDÔØ�?Š?Ø"&§/¡/×"DÑ"DÓ"FˆDÔØ×ÒØ×*Ñ*×=Ñ=Ó?ˆKÜ˜+¤uÔ-Ý.ä"¡8¨KÓ#8Ó9�ô ˜k¬4Ô0Ð0Ð0Ø#.ˆDÔ ØˆrB   c                 ó   — | j                   d uS r8   )rb   r{   s    r@   Úhas_closurez&NestedUserFunctionVariable.has_closure&  s   € Ø�|‰| 4Ð'Ð'rB   c                  ó   — yr$  r™   r{   s    r@   rÉ   z#NestedUserFunctionVariable.has_self)  r%  rB   c                 ó   — | j                   S r8   r?  r{   s    r@   rË   z&NestedUserFunctionVariable.get_globals,  r@  rB   c                 óH  — | j                  «       }t        j                  || j                  | j                  j                  «       | j                  rt        | j                  j                  «      nd t        d„ t        t        | j                  «       j                  «      «      D «       «      «      }| j                  r| j                  j                  «       |_         t        j                   |«      j"                  |i |¤Ž}|j%                  «        t'        |j(                  j                  «       «      }t+        |j,                  j.                  |«       t1        |||«       t3        |j                  «      D ])  \  }}	|	|vsJ ‚| j4                  j                  |   }
|
||	<   Œ+ |S )Nc              3   ó2   K  — | ]  }t        d «      –— Œ y ­wr8   )r*   )re  rß   s     r@   rf  z7NestedUserFunctionVariable.bind_args.<locals>.<genexpr>6  s   è ø€ ÒS a”)˜D—/ÑSùs   ‚)ry   r\   rY   r`   r  r»   ra   rF   rE   Úranger×   rØ   rc   Úkeys_as_python_constantr]   rm   r•   rÔ   rÕ   rG   rÖ   rK   rM   rÏ   rW   rÒ   rb   )r|   rS   r‰   rŠ   rT   re   r6   rH   rÞ   rU   rä   s              r@   ré   z$NestedUserFunctionVariable.bind_args/  sH  € Ø�}‰}‹ˆÜ×!Ñ!ØØ�N‰NØ�L‰L×+Ñ+Ó-Ø*.¯-ª-ŒE�$—-‘-×%Ñ%Ô&¸TÜÑS¬5´°T·]±]³_×5PÑ5PÓ1QÓ+RÔSÓSó
ˆð �?Š?Ø"&§/¡/×"IÑ"IÓ"KˆDÔØ,”×!Ñ! $Ó'×,Ñ,¨dÐ=°fÑ=ˆØ×ÑÔÜ�e—o‘o×+Ñ+Ó-Ó.ˆÜ˜Ÿ™×.Ñ.°Ô7Ü�f˜f dÔ+ä" 4×#3Ñ#3Ó4ò 	 ‰IˆC�Ø˜vÑ%Ð%Ð%Ø—<‘<×%Ñ% cÑ*ˆDØˆF�4ŠLð	 ð
 ˆrB   c                 óì  ‡— ‰j                  ˆfd„«        ‰| j                  «       ‰j                  ‰j                  | j                  «      g«        ‰t        j                  | j                  j                  j                  «      «       | j                  r ‰| j                  «       n!‰j                  ‰j                  d «      g«       | j                  r ‰| j                  «       n!‰j                  ‰j                  d «      g«       | j                  r ‰| j                  «       n!‰j                  ‰j                  d «      g«       | j                  r=	 | j                  j                  «       }‰j                  ‰j                  |«      g«       n!‰j                  ‰j                  d «      g«       ‰j                  t!        dd«      «       | j"                  rw‰j                  ˆfd„«        ‰| j"                  «       ‰j                  t!        dd«      «       ‰j                  t%        d«      «       ‰j                  t!        dd«      «       y y # t        $ r  ‰| j                  «       Y Œ¼w xY w)Nc                  ó0   •— ‰ j                  t        d«      S )Nrf   )Úload_import_fromr�   ©r8  s   €r@   ú<lambda>z8NestedUserFunctionVariable.reconstruct.<locals>.<lambda>I  s   ø€ �G×,Ñ,¬XÐ7JÓK€ rB   é   Fc                  ó(   •— ‰ j                  dd«      S )NrÐ   Úwraps©rØ  rÙ  s   €r@   rÚ  z8NestedUserFunctionVariable.reconstruct.<locals>.<lambda>m  s   ø€ ˜×0Ñ0°¸gÓF€ rB   r+   r   T)Úadd_push_nullrT   Úextend_outputÚcreate_load_const_uncheckedr`   r0   r<   r­   r�   ra   Úcreate_load_constrb   rc   rd   r»   r�   r   rÉ  r   )r|   r8  rd   s    ` r@   r7  z&NestedUserFunctionVariable.reconstructG  sî  ø€ Ø×ÑÛKô	
ñ 	�—	‘	ÔØ×Ñ˜w×BÑBÀ4Ç>Á>ÓRÐSÔTÙÔ ×'Ñ'¨¯	©	¯©×(?Ñ(?Ó@ÔAà�=Š=Ù�D—M‘MÕ"à×!Ñ! 7×#<Ñ#<¸TÓ#BÐ"CÔDà�<Š<Ù�D—L‘LÕ!à×!Ñ! 7×#<Ñ#<¸TÓ#BÐ"CÔDà�?Š?Ù�D—O‘OÕ$à×!Ñ! 7×#<Ñ#<¸TÓ#BÐ"CÔDà×Òð*Ø"×.Ñ.×AÑAÓC�Ø×%Ñ%Ø×8Ñ8¸ÓEÐFõð ×!Ñ! 7×#<Ñ#<¸TÓ#BÐ"CÔDà×ÑÔ2°1°eÓ<Ô=à�?Š?Ø×!Ñ!ÛFôñ �D—O‘OÔ$Ø×!Ñ!Ô"6°q¸%Ó"@ÔAØ×!Ñ!¤,¨q£/Ô2Ø×!Ñ!Ô"6°q¸$Ó"?Õ@ð øô 'ò *Ù˜×(Ñ(Ö)ð*ús   Å;I ÉI3É2I3r8   r  )r�   r    r¡   rv   r  r´   r‡   ry   rÄ   r�   rÏ  rÉ   rË   ré   r7  r  r  s   @r@   r‘   r‘   ä  s_   ø„ àðà	!×	0Ñ	0ð€Nð  ð@ð 
õ@ò6ò.ò"òò0(òòòö0+ArB   r‘   c                   óˆ   ‡ — e Zd Zddhej                  £Zddˆ fd„Zd„ Zed„ «       Z	 	 	 	 	 	 	 	 dd„Z	dd	„Z
ddd
efd„Zˆ xZS )ÚSkipFunctionVariabler­   Úreasonc                 ó@   •— t        ‰| �  di |¤Ž || _        || _        y r  )r³   r´   r­   rå  )r|   r­   rå  rŠ   r¹   s       €r@   r´   zSkipFunctionVariable.__init__|  s!   ø€ Ü‰ÑÑ"˜6Ò"ØˆŒ
Øˆ�rB   c                 ó   — | j                   S r8   ©r­   r{   s    r@   r»   z'SkipFunctionVariable.as_python_constant�  s   € Ø�z‰zÐrB   c                 ó|   — t        |«      s(t        |j                  t        j                  «      «        | ||¬«      S r§   )r(   r   r©   r   ÚFUNCTION_MATCHr«   s      r@   r®   z'SkipFunctionVariable.create_with_source„  s2   € ä.¨uÔ5ô ˜&×+Ñ+¬L×,GÑ,GÓHÔIÙ�5 Ô(Ð(rB   r=   r2   c           	      ó&  — t        j                  | j                  dd«      r2t        dt	        | j                  «      d| j                  › d�dg¬«       y | j                  t
        j                  j                  u r?|j                  dd «      }|r|j                  «       }t        d	d
|› d|› d�d|› �dg¬«       y t        | j                  t        j                  «      rEd| j                  › d�}t
        j                  j                  j                  |«       t        |«       y t!        | j                  dd«      }	 t        j"                  | j                  «      }d|› d|› d�}d|› d�g}	d|vr|	d|› d|› d�dgz  }	|d+k(  rd,}g }	| j,                  r| j,                  nd-}t        d.d/| j                  j&                  › d0|› d1|› �||	¬«       y # t$        $ �r; ddh}
| j                  j&                  |
v r"d| j                  j&                  › d |› d�}d!d"g}	nù| j                  j&                  �„| j                  j&                  j)                  d#«      r_d$| j                  j&                  › d |› d �}d%g}	t
        j                  j                  j                  |d&z   d&j+                  |	«      z   «       n_d'| j                  j&                  › d |› d(�}d)d*g}	t
        j                  j                  j                  |d&z   d&j+                  |	«      z   «       Y �Œ”w xY w)2NÚ_torchdynamo_disableFz1Skip calling `torch.compiler.disable()`d functionzSkip calling function `z4` since it was wrapped with `torch.compiler.disable`z(Remove the `torch.compiler.disable` call)Úgb_typer±  ÚexplanationÚhintsÚmsgz%Call to `torch._dynamo.graph_break()`z0Called `torch._dynamo.graph_break()` with args `z`, kwargs `ú`z$User-inserted graph break. Message: z.Remove the `torch._dynamo.graph_break()` call.z2Graph break due to unsupported wrapper descriptor zM. Please file an issue on GitHub so the PyTorch team can add support for it. r¡   z<unknown qualname>z?Dynamo developers have intentionally marked that the function `z` in file `z` should not be traced.zAvoid calling the function `z`.rô   zRemove the function `z` or the file `zv` from torch/_dynamo/trace_rules.py. More graph breaks may occur as a result of attempting to trace into the function.z Please file an issue to PyTorch.Ú_abcÚ	_warningsz6Dynamo does not know how to trace the Python builtin `ú.z˜If you are attempting to call a logging function (e.g. `_warnings.warn`), you can try adding it to `torch._dynamo.config.reorderable_logging_functions`.zKPlease file an issue on GitHub so the PyTorch team can add support for it. Úoptreez*Dynamo cannot trace optree C/C++ function zi Consider using torch.utils._pytree - https://github.com/pytorch/pytorch/blob/main/torch/utils/_pytree.pyú
z/Dynamo does not know how to trace the builtin `zˆ.` This function is either a Python builtin (e.g. _warnings.warn) or a third-party C/C++ Python extension (perhaps created with pybind).zŒIf it is a Python builtin, please file an issue on GitHub so the PyTorch team can add support for it and see the next case for a workaround.a  If it is a third-party C/C++ Python extension, please either wrap it into a PyTorch-understood custom operator (see https://pytorch.org/tutorials/advanced/custom_ops_landing_page.html for more details) or, if it is traceable, use `torch.compiler.allow_in_graph`.Úallow_in_graphz”Found an allow_in_graph decorator to a function which is created inside the parent function that is getting compiled. This is not supported for now.z<missing reason>z,Attempted to call function marked as skippedzmodule: z, qualname: z, skip reason: )rm   rn   r­   r   r¢   rµ   rô   Úgraph_breakÚgetr»   r9   r\   ÚWrapperDescriptorTypeÚutilsÚ	warn_oncer   rq   Úgetfilern  r    r¡  Újoinrå  )r|   r=   r‰   rŠ   Úgraph_break_msgrð  ÚqualnameÚpathrî  rï  Úknown_python_builtin_modulesrå  s               r@   r‹   z"SkipFunctionVariable.call_function�  sn  € ô ×!Ñ! $§*¡*Ð.DÀeÔLÜØKÜ˜DŸJ™J›Ø5°d·j±j°\ÐAuÐvà>ðö	ð �Z‰Zœ5Ÿ=™=×4Ñ4Ñ4Ø$Ÿj™j¨°Ó5ˆOÙØ"1×"DÑ"DÓ"F�ÜØ?ØJÈ4È&ÐP[Ð\bÐ[cÐcdÐeØBÀ?ÐBSÐTàDðö	ô ˜Ÿ
™
¤E×$?Ñ$?Ô@àDÀTÇZÁZÀLð Q?ð @ð ô
 �M‰M×Ñ×)Ñ)¨#Ô.Ü˜#Õä˜tŸz™z¨>Ð;OÓPˆHð<YÜ—‘ t§z¡zÓ2�àUÐV^ÐU_ð ` Ø $˜vÐ%<ð>ð ð
 3°8°*¸BÐ?ð�ð  DÑ(ØØ/°¨z¸ÈÈð OAð Að ;ð	ñ �Eð` Ð+Ò+ð?ð ð
 �Ø$(§K¢K�T—[’[Ð5GˆFÜØFØ" 4§:¡:×#8Ñ#8Ð"9¸ÀhÀZÈÐ_eÐ^fÐgØ'Øö	øôc ó (YØ06¸Ð/DÐ,Ø—:‘:×(Ñ(Ð,HÑHðØ ŸJ™J×1Ñ1Ð2°!°H°:¸RðAð  ð
iðGð‘Eð —J‘J×)Ñ)Ð5ØŸ
™
×-Ñ-×8Ñ8¸ÔBà$NÈtÏzÉz×OdÑOdÐNeÐefÐgoÐfpÐpqÐ"r�Kð^ð�Eô
 —M‘M×'Ñ'×1Ñ1°+ÀÑ2DÀtÇyÁyÐQVÓGWÑ2WÕXð JÈ$Ï*É*×J_ÑJ_ÐI`Ð`aÐbjÐakð lað bð  ðmð;ð�Eô —M‘M×'Ñ'×1Ñ1°+ÀÑ2DÀtÇyÁyÐQVÓGWÑ2WÔXúðQ(Yús   Ä:AG ÇELÌLc                 óh   — t         j                  j                  t        | j                  |«      «      S r8   )r   r0   r<   rŽ   r­   rì   s      r@   r“   z%SkipFunctionVariable.call_obj_hasattrþ  s$   € Ü×)Ñ)×0Ñ0´¸¿¹ÀTÓ1JÓKÐKrB   rU   c                 ó‚   — |t         v rt        j                  | |«      S t        || j                  | j
                  |«      S r8   )r$   r   rë   rt   r­   r?   rì   s      r@   rí   z SkipFunctionVariable.var_getattr  s7   € ØÔ)Ñ)Ü×,Ñ,¨T°4Ó8Ð8ä˜b $§*¡*¨d¯k©k¸4Ó@Ð@rB   r8   r  r�   ©r=   r2   )r�   r    r¡   r.   r  r´   r»   r  r®   r‹   r“   r¢   rí   r  r  s   @r@   rä  rä  u  sŒ   ø„ àØðð 
×	'Ñ	'ð€Nöò
ð ñ)ó ð)ðoà#ðoð &ðoð -ð	oð
 
óoóbLðAÐ5ð A¸S÷ ArB   rä  c                   óH   ‡ — e Zd ZdZdˆ fd„Zdˆ fd„Z	 	 	 	 	 	 	 	 dd„Zˆ xZS )ÚWrapperUserFunctionVariablea3  
    Used to represent a wrapper object that contains the actual callable as an
    attribute. For example, torch.jit.script/trace have the original function at
    their _torchdynamo_inline attribute. Similarly, functions with
    __script_if_tracing_wrapper have the original attr at "__original_fn".
    c                 ó@   •— t        ‰| �  di |¤Ž || _        || _        y r  )r³   r´   Úwrapper_objÚattr_to_trace)r|   r	  r
  rŠ   r¹   s       €r@   r´   z$WrapperUserFunctionVariable.__init__  s#   ø€ Ü‰ÑÑ"˜6Ò"Ø&ˆÔØ*ˆÕrB   c                 óø   •— || j                   k(  r[t        | j                  | j                   «      }| j                  xr t	        | j                  |«      }t        j                  |||«      S t        ‰| �!  ||«      S r8   )	r
  rq   r	  r?   r   r.   r:   r³   rí   )r|   r=   rU   r>   r?   r¹   s        €r@   rí   z'WrapperUserFunctionVariable.var_getattr  si   ø€ Ø�4×%Ñ%Ò%Ü˜$×*Ñ*¨D×,>Ñ,>Ó?ˆCØ—[‘[ÒB¤Z°·±¸TÓ%BˆFÜ"×(Ñ(¨¨S°&Ó9Ð9ä‰wÑ" 2 tÓ,Ð,rB   c                 ó¬   — t        j                  t        j                  «      j	                  || t        j
                  | j                  «      g|¢|«      S r8   )r   r¤   r   Úgetattr_and_tracer‹   r0   r
  rˆ   s       r@   r‹   z)WrapperUserFunctionVariable.call_function  sL   € ô ×-Ñ-Ü×'Ñ'ó
ç
‰-Ø�”y×1Ñ1°$×2DÑ2DÓEÐMÈÐMÈvó
ð	
rB   r  r  r�   )r�   r    r¡   rg   r´   rí   r‹   r  r  s   @r@   r  r    s=   ø„ ñõ+õ
-ð

à#ð

ð &ð

ð -ð	

ð
 
÷

rB   r  c                  óR   — t         j                  j                  «       rddlm}  | S i S )Nr   ©Útraceable_collective_remaps)rµ   ÚdistributedÚis_availableÚ)torch.distributed._functional_collectivesr  r  s    r@   Ú_traceable_collective_remapsr  *  s&   € ä×Ñ×%Ñ%Ô'õ	
ð +Ð*Ø€IrB   c                 óÖ   — t         j                  j                  «       sJ d«       ‚|t        «       j	                  «       v sJ ‚|j
                  }| j                  d«      }t        ||«      S )NzIllegal invocation.z)torch.distributed._functional_collectives)rµ   r  r  r  Úvaluesr�   Úimport_sourcer   )r=   rr   Ú
inner_nameÚpath_sources       r@   Ú_traceable_collectives_sourcer  5  sb   € Ü×Ñ×)Ñ)Ô+ÐBÐ-BÓBÐ+ØÔ-Ó/×6Ñ6Ó8Ñ8Ð8Ð8à—‘€JØ×"Ñ"Ð#NÓO€KÜ�k :Ó.Ð.rB   c                   óp   ‡ — e Zd ZdZdˆ fd„Zedd„«       Zed„ «       Zedd„«       Z	 	 	 	 	 	 	 	 d	d„Z	ˆ xZ
S )
Ú!CollectiveFunctionRewriteVariablea÷  
    Some of the torch.distributed.* collective APIs are possible to rewrite to 'traceable' collectives.

    This class provides both a way to check if a function is remappable, and perform the remapping.

    In the case that a function is 'remappable' but only for some combinations of call-time arguments,
    we check the args at `call_function` time and fall back to graph-breaking if needed.  This is no worse
    than status-quo as we currently graph-break on all distributed.* collectives.
    c                óX   •— t        ‰| �  |fi |¤Ž t        |t        «      sJ ‚|| _        y r8   )r³   r´   r9   r¤   Úreplacement_var)r|   rr   r  rŠ   r¹   s       €r@   r´   z*CollectiveFunctionRewriteVariable.__init__I  s.   ø€ Ü‰Ñ˜Ñ&˜vÒ&Ü˜/Ô+?Ô@Ð@Ð@Ø.ˆÕrB   c                 ój   — t         j                  | |«      \  }}t        |ft        |fd|i|¤Ž|dœ|¤ŽS )Nr?   )r  r?   )r  Úrewriter¤   )r=   Úold_fnr?   ÚoptionsÚnew_fnÚ
new_sources         r@   r<   z(CollectiveFunctionRewriteVariable.createN  sM   € ä>×FÑFÀrÈ6ÓRÑˆ�
Ü0Øð
ä0°ÑVÀ
ÐVÈgÑVØñ
ð ñ	
ð 	
rB   c                 óH   — t        j                  | «      xr | t        «       v S r8   )rm   Ú
isfunctionr  )Úvariables    r@   Úcan_rewritez-CollectiveFunctionRewriteVariable.can_rewriteX  s%   € ô ×Ñ˜xÓ(ÒW¨XÔ9UÓ9WÐ-Wð	
rB   c                 ó8   — t        «       |   }|t        | |«      fS r8   )r  r  )r=   rr   r#  s      r@   r   z)CollectiveFunctionRewriteVariable.rewrite^  s"   € ä-Ó/°Ñ3ˆØÔ4°R¸Ó@Ð@Ð@rB   c                 óz  — dd l m} ddlm} t	        j
                  | j                  «      }t         |j                  |i |¤Žj                  «      }d}d|v r+|d   j                  «       rt        d| j                  › �«       | j                  |j                  |j                  |j                  fv ro|j                  d«      }|�|j                   n|j"                  d   j$                  }||vrt'        d|› �«      ‚t(        j*                  j-                  ||   «      |d<   | j.                  j1                  |||«      S )Nr   )ÚREDUCE_OP_TO_STRr™   Úasync_opzBCollectiveFunctionRewriteVariable can't support async_op=True for ÚopzUnsupported all_reduce op: )Útorch.distributedr  r  r+  rm   r•   rr   rG   rÔ   rÖ   r»   r   Ú
all_reduceÚreduce_scatter_tensorÚ_reduce_scatter_baserù  r­   r–   ÚdefaultrÚ   r   r0   r<   r  r‹   )	r|   r=   r‰   rŠ   Údistr+  r•   Úreduce_op_varÚ	reduce_ops	            r@   r‹   z/CollectiveFunctionRewriteVariable.call_functionc  s<  € õ 	)ÝNô ×%Ñ% d§g¡gÓ.ˆ	Ü�n�i—n‘n dÐ5¨fÑ5×?Ñ?Ó@ˆØˆà˜Ñ F¨:Ñ$6×$IÑ$IÔ$KÜØTÐUY×U\ÑU\ÐT]Ð^ôð �7‰7Ø�O‰OØ×&Ñ&Ø×%Ñ%ð
ñ 
ð
 #ŸJ™J tÓ,ˆMð !Ð,ð ×#Ò#à×)Ñ)¨$Ñ/×7Ñ7ð ð
 Ð 0Ñ0Ü Ð#>¸y¸kÐ!JÓKÐKÜ$×5Ñ5×<Ñ<Ø  Ñ+óˆF�4‰Lð ×#Ñ#×1Ñ1°"°d¸FÓCÐCrB   r  r  r�   )r�   r    r¡   rg   r´   r  r<   r(  r   r‹   r  r  s   @r@   r  r  >  s{   ø„ ñõ/ð
 ò
ó ð
ð ñ
ó ð
ð
 òAó ðAð'Dà#ð'Dð &ð'Dð -ð	'Dð
 
÷'DrB   r  c                   ó0   ‡ — e Zd Z	 	 	 	 	 	 	 	 dˆ fd„Zˆ xZS )ÚFunctoolsWrapsVariablec                 ó|   •‡— |s(t        ‰«      dk(  rˆfd„}t        j                  |«      S t        ‰| �  |‰|«      S )Nr+   c                 ó‚   •— t        | t        j                  «      r| j                  ‰d   ¬«      S t	        d| › d�«       y )Nr   )rÉ  zfunctools.wraps(r)  )r9   r   r‘   Úcloner   )rr   r‰   s    €r@   rÝ  z3FunctoolsWrapsVariable.call_function.<locals>.wraps–  s:   ø€ Ü˜b¤)×"FÑ"FÔGØŸ8™8¨t°A©w˜8Ó7Ð7ÜÐ 0°°°AÐ6Õ7rB   )r×   r   ÚLambdaVariabler³   r‹   )r|   r=   r‰   rŠ   rÝ  r¹   s     `  €r@   r‹   z$FunctoolsWrapsVariable.call_functionŽ  s>   ù€ ñ œ#˜d›) qš.ô8ô
 ×+Ñ+¨EÓ2Ð2ä‰wÑ$ R¨¨vÓ6Ð6rB   r�   )r�   r    r¡   r‹   r  r  s   @r@   r7  r7  �  s3   ø„ ð7à#ð7ð &ð7ð -ð	7ð
 
÷7ñ 7rB   r7  c                   ó*   — e Zd Zd„ Z	 	 	 	 	 	 	 	 dd„Zy)ÚCollectionsNamedTupleFunctionc                 ó   — | j                   S r8   r¿   r{   s    r@   r»   z0CollectionsNamedTupleFunction.as_python_constant¡  rÀ   rB   c                 óF  — t        ||«      }|r} | j                  |D �cg c]  }|j                  «       ‘Œ c}i |j                  «       D ��ci c]  \  }}||j                  «       “Œ c}}¤Ž}t	        j
                  |t        «       ¬«      S t        d«       y c c}w c c}}w )N)Úmutation_typez!namedtuple with non constant args)r"   rr   r»   rE   r   ÚUserDefinedClassVariabler-   r   )	r|   r=   r‰   rŠ   Úconstant_argsrÃ  rI   rJ   r­   s	            r@   r‹   z+CollectionsNamedTupleFunction.call_function¤  s–   € ô ,¨D°&Ó9ˆÙØ�D—G‘GØ26Ö7¨Q�!×&Ñ&Õ(Ò7ðà9?¿¹»×H±°°A�1�a×*Ñ*Ó,Ñ,ÓHñˆEô ×5Ñ5ØÔ%5Ó%7ôð ô 	Ð9Õ:ùò 8ùÛHs   ŸBÁBNr�   )r�   r    r¡   r»   r‹   r™   rB   r@   r=  r=     s2   „ òð;à#ð;ð &ð;ð -ð	;ð
 
ô;rB   r=  c                   ó‚   ‡ — e Zd Zdeddfˆ fd„Zd„ Zd„ Zd„ Z	 	 	 	 	 	 	 	 dd
„Zdd	de	defd„Z
dd	de	fd„Zd„ Zd„ Zˆ xZS )ÚFunctoolsPartialVariablere   r„   Nc                 óÒ   •— t        ‰| �  di |¤Ž || _        t        |t        «      sJ ‚|| _        t        |t        «      sJ ‚|| _        t        j                  t        «      | _        y r  )r³   r´   re   r9   rD   r‰   rG   ÚkeywordsrÐ   rÑ   r&   Ú
fake_value)r|   re   r‰   rF  rŠ   r¹   s        €r@   r´   z!FunctoolsPartialVariable.__init__·  s\   ø€ Ü‰ÑÑ"˜6Ò"ØˆŒ	Ü˜$¤Ô%Ð%Ð%ØˆŒ	Ü˜(¤DÔ)Ð)Ð)Ø ˆŒô $×+Ñ+¬HÓ5ˆ�rB   c                 ó"   — t         j                  S r8   )rÐ   rÑ   r{   s    r@   rÄ   z$FunctoolsPartialVariable.python_typeÂ  s   € Ü× Ñ Ð rB   c                 ó<  ‡— ‰j                  ˆfd„«        ‰| j                  «       | j                  r‰j                  | j                  «       | j                  s2‰j                  t        t        | j                  «      dz   d«      «       y ‰j                  | j                  j                  «       «       t        | j                  j                  «       «      }‰j                  ‰j                  t        |«      t        | j                  «      z   dz   |d«      «       y )Nc                  ó(   •— ‰ j                  dd«      S )NrÐ   rÑ   rÞ  rÙ  s   €r@   rÚ  z6FunctoolsPartialVariable.reconstruct.<locals>.<lambda>Æ  s   ø€  g×&>Ñ&>¸{ÈIÓ&V€ rB   r+   F)rß  re   r‰   ÚforeachrF  rà  r   r×   r  rF   r‡  Úcreate_call_function_kw)r|   r8  r‡  s    ` r@   r7  z$FunctoolsPartialVariable.reconstructÅ  sÉ   ø€ Ø×ÑÓVÔWÙ�—	‘	ÔØ�9Š9Ø�O‰O˜DŸI™IÔ&Ø�}Š}Ø×!Ñ!Ô"6´s¸4¿9¹9³~ÈÑ7IÈ5Ó"QÔRØà�‰˜Ÿ™×,Ñ,Ó.Ô/Ü�T—]‘]×'Ñ'Ó)Ó*ˆØ×ÑØ×+Ñ+¬C°«I¼¸D¿I¹I»Ñ,FÈÑ,JÈDÐRWÓXõ	
rB   c                 ó"   — | j                  «       S r8   ©r»   r{   s    r@   r�   z%FunctoolsPartialVariable.get_functionÔ  ó   € Ø×&Ñ&Ó(Ð(rB   r=   r2   c                 óz   — | j                   |z   }i | j                  ¥|¥}| j                  j                  |||«      S r8   )r‰   rF  re   r‹   )r|   r=   r‰   rŠ   Úmerged_argsÚmerged_kwargss         r@   r‹   z&FunctoolsPartialVariable.call_function×  s>   € ð —i‘i $Ñ&ˆØ3˜4Ÿ=™=Ð3¨FÐ3ˆØ�y‰y×&Ñ& r¨;¸ÓFÐFrB   rU   c                 ó‚   — t         j                  j                  t        t	        j
                  t        «      |«      «      S r8   )r   r0   r<   rŽ   rÐ   rÑ   r&   rì   s      r@   r“   z)FunctoolsPartialVariable.call_obj_hasattrá  s2   € ô ×)Ñ)×0Ñ0Ü”I×%Ñ%¤hÓ/°Ó6ó
ð 	
rB   c                 óž  — | j                   xr t        | j                   |«      }|dk(  r| j                  S |dk(  r!t        j                  | j
                  |¬«      S |dk(  rW| j                  j                  «       D ��ci c]  \  }}t        j                  |«      |“Œ }}}t        j                  ||¬«      S t        t        |«       y c c}}w )Nre   r‰   r¨   rF  )r?   r   re   r   ÚListVariabler‰   rF  rE   r0   r<   ÚConstDictVariabler   ro   )r|   r=   rU   r?   rI   rJ   rE   s          r@   rí   z$FunctoolsPartialVariable.var_getattré  sª   € Ø—‘Ò>¤¨D¯K©K¸Ó!>ˆà�6Š>Ø—9‘9ÐØ�6Š>Ü×)Ñ)¨$¯)©)¸FÔCÐCØ�:ÒØ?C¿}¹}×?RÑ?RÓ?T×U±t°q¸!Ô%×,Ñ,¨QÓ/°Ñ2ÐUˆEÑUÜ×.Ñ.¨u¸VÔDÐDÜ ¤°Õ4ùó Vs   Á> C	c                 ó:  — t        j                  | j                  j                  «       g| j                  D �cg c]  }|j                  «       ‘Œ c}¢­i | j
                  j                  «       D ��ci c]  \  }}||j                  «       “Œ c}}¤ŽS c c}w c c}}w r8   )rÐ   rÑ   re   r»   r‰   rF  rE   )r|   rá   rI   rJ   s       r@   r»   z+FunctoolsPartialVariable.as_python_constantõ  s   € Ü× Ñ Ø�I‰I×(Ñ(Ó*ð
à26·)±)Ö<¨3ˆc×$Ñ$Õ&Ò<ò
ð 6:·]±]×5HÑ5HÓ5J×K©T¨Q°ˆq�!×&Ñ&Ó(Ñ(ÓKñ
ð 	
ùâ<ùÛKó   ¸B
Á1Bc                 ó:  — t        j                  | j                  j                  «       g| j                  D �cg c]  }|j                  «       ‘Œ c}¢­i | j
                  j                  «       D ��ci c]  \  }}||j                  «       “Œ c}}¤ŽS c c}w c c}}w )zcSimilar to as_python_constant(), but add ID_MATCH guards to try to force things to become constants)rÐ   rÑ   re   Úguard_as_python_constantr‰   rF  rE   )r|   rJ   rI   s      r@   rZ  z1FunctoolsPartialVariable.guard_as_python_constantü  s€   € ä× Ñ Ø�I‰I×.Ñ.Ó0ð
à48·I±IÖ>¨qˆa×(Ñ(Õ*Ò>ò
ð <@¿=¹=×;NÑ;NÓ;P×Q±4°1°aˆq�!×,Ñ,Ó.Ñ.ÓQñ
ð 	
ùâ>ùÛQrX  r�   )r�   r    r¡   r.   r´   rÄ   r7  r�   r‹   r¢   r“   rí   r»   rZ  r  r  s   @r@   rD  rD  ¶  s�   ø„ ð	6˜_ð 	6È4õ 	6ò!ò
ò)ðGà#ðGð &ðGð -ð	Gð
 
óGð
Ø)ð
Ø14ð
à	ó
ð
5Ð5ð 
5¸Só 
5ò
ö
rB   rD  c                   ó  ‡ — e Zd Zdddhej                  £Ze ej                  d«      dee	de
f   ej                  f   fd„«       «       Zed„ «       Zdeddfˆ fd	„Zedefd
„«       Zd„ Zd„ Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zd„ Zˆ xZS )ÚPolyfilledFunctionVariablerr   rÉ  Útraceable_fnNr„   .c                 ó   — i S r8   r™   )r¬   s    r@   Ú_get_polyfill_handlersz1PolyfilledFunctionVariable._get_polyfill_handlers  s	   € ð ˆ	rB   c                 óf   — t        |j                  t        j                  «      «        | ||¬«      S r§   )r   r©   r   rê  r«   s      r@   r®   z-PolyfilledFunctionVariable.create_with_source  s(   € ä�f×'Ñ'¬×(CÑ(CÓDÔEá�5 Ô(Ð(rB   c                 ó*  •— t        ‰| �  di |¤Ž || _        | j                  «       j	                  ||«      }t        |«      sJ d|› d|› �«       ‚dD ]"  }t        ||d «      }|sŒt        |«      sJ ‚|} n t        d|› d�«      ‚|| _        || _	        y )NzPolyfill handler z is not callable for )Ú__torch_dynamo_polyfill__Ú__python_implementation__z# does not have a traceable functionr™   )
r³   r´   rr   r_  rù  Úcallablerq   rv  rÉ  r]  )r|   rr   rŠ   ÚhandlerÚcandidate_attrÚ	candidater]  r¹   s          €r@   r´   z#PolyfilledFunctionVariable.__init__  sÀ   ø€ Ü‰ÑÑ"˜6Ò"ØˆŒà×-Ñ-Ó/×3Ñ3°B¸Ó;ˆÜ˜Ô ÐXÐ$5°g°YÐ>SÐTVÐSWÐ"XÓXÐ ð
ò 	ˆNô   ¨¸Ó>ˆIÚÜ 	Ô*Ð*Ð*Ø(�Ùð	ô Ø# G 9Ð,OÐPóð ð &ˆŒØ ,ˆÕrB   c                 ó   — | j                   S r8   )r]  r{   s    r@   Úpolyfill_fnz&PolyfilledFunctionVariable.polyfill_fn/  s   € à× Ñ Ð rB   c                 ó0   — t        | j                  dd«      S )NÚ*__torch_dynamo_can_constant_fold_through__F)rq   rÉ  r{   s    r@   Úcan_constant_fold_throughz4PolyfilledFunctionVariable.can_constant_fold_through3  s   € ÜØ�O‰OÐIÈ5ó
ð 	
rB   c                 ó"   — | j                  «       S r8   rN  r{   s    r@   r�   z'PolyfilledFunctionVariable.get_function8  rO  rB   c                 ó.  — | j                  «       r€t        ||«      rt | j                  |D �cg c]  }|j                  «       ‘Œ c}i |j	                  «       D ��ci c]  \  }}||j                  «       “Œ c}}¤Ž}t        j                  ||«      S | j                  t        j                  u �r&t        |«      dk(  �r|�st        |d   t        j                  t        j                  f«      rçt        d„ |d   j                  D «       «      rÈt        j                  j!                  ||j"                  j%                  dt&        j(                  t+        d„ |d   j                  D «       «      fi «      t'        j(                  |d   j                  D �cg c]4  }t        |t        j,                  «      r|j.                  n|j0                  ‘Œ6 c}«      ¬«      S t        j                  || j2                  «      }|j5                  |||«      S c c}w c c}}w c c}w )Nr+   r   c              3   óð   K  — | ]n  }t        |t        j                  «      xr t        |j                  t        «      xs2 t        |t        j
                  «      xr |j                  «       t        u –— Œp y ­wr8   )r9   r   r0   r­   ÚintÚSymNodeVariablerÄ   )re  rÃ  s     r@   rf  z;PolyfilledFunctionVariable.call_function.<locals>.<genexpr>R  se   è ø€ ò ð ô ˜Aœy×9Ñ9Ó:ÒW¼zÈ!Ï'É'ÔSVÓ?Wò YÜ˜q¤)×";Ñ";Ó<ÒWÀÇÁÃÔTWÐAWóYñùs   ‚A4A6r‹   c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr8   )Úas_proxy)re  Úas     r@   rf  z;PolyfilledFunctionVariable.call_function.<locals>.<genexpr>]  s   è ø€ Ò?¨A˜1Ÿ:™:Ÿ<Ñ?ùs   ‚)Úsym_num)rl  r#   rr   r»   rE   r.   r:   r|  Úsumr×   r9   r   rU  ÚTupleVariablerm  rq  r<   rM   Úcreate_proxyrµ   Úsym_sumrF   r0   r­   ru  r]  r‹   )	r|   r=   r‰   rŠ   rÃ  rI   rJ   rH   Útraceable_function_variables	            r@   r‹   z(PolyfilledFunctionVariable.call_function;  sÒ  € ð ×)Ñ)Ô+Ô0MØ�&ô1
ð �—‘Ø6:Ö;°�a×*Ñ*Õ,Ò;ðà=C¿\¹\»^×L±T°Q¸�q˜!×.Ñ.Ó0Ñ0ÓLñð ô #×(Ñ(¨¨VÓ4Ð4ð �G‰G”x—|‘|Ò#Ü�D“	˜Q“ÚÜ˜4 ™7¤Y×%;Ñ%;¼Y×=TÑ=TÐ$UÔVÜñ ð ˜a™Ÿ™ôô ô ×,Ñ,×3Ñ3ØØ—	‘	×&Ñ&Ø#Ü—M‘MÜÑ?°°a±·±Ô?Ó?ÐAØó	ô Ÿ™ð "& a¡§¡öð ô  *¨!¬Y×-GÑ-GÔHð ŸGšGà!"§¡ñ+òó	ð 4ó ð ô( '6×&;Ñ&;¸BÀ×@QÑ@QÓ&RÐ#Ø*×8Ñ8¸¸TÀ6ÓJÐJùòO <ùÛLùò4s   ­HÁHÆ9Hc                 ób  — |dk(  r| j                  |||«      S t        | j                  |d «      }|€J d|› d| j                  › �«       ‚t        |«      sJ d|› d| j                  › �«       ‚i }| j                  rt        | j                  |«      |d<   t        |fi |¤Ž}|j                  |||«      S )NÚ__call__zMember z not found in z is not callable in r?   )r‹   rq   rr   r'   r?   r   r\  )r|   r=   rU   r‰   rŠ   Úmethodr"  Úpolyfilled_method_variables           r@   r  z&PolyfilledFunctionVariable.call_methodo  sÀ   € ð �:ÒØ×%Ñ% b¨$°Ó7Ð7ä˜Ÿ™ $¨Ó-ˆØÐ!ÐJ W¨T¨F°.ÀÇÁÀ	Ð#JÓJÐ!Ü˜6Ô"ÐQ g¨d¨VÐ3GÈÏÉÀyÐ$QÓQÐ"ØˆØ�;Š;Ü *¨4¯;©;¸Ó =ˆG�HÑÜ%?ÀÑ%RÈ'Ñ%RÐ"Ø)×7Ñ7¸¸DÀ&ÓIÐIrB   c                 ó   — | j                   S r8   r¿   r{   s    r@   r»   z-PolyfilledFunctionVariable.as_python_constant‚  rÀ   rB   r�   ©r‰   rž   rŠ   rŸ   r„   r.   )r�   r    r¡   r.   r  r  rÐ   Ú	lru_cacherG   r   r   r\   rY   r_  r®   r5   r´   Úpropertyri  rl  r�   r‹   r  r»   r  r  s   @r@   r\  r\    s  ø„ àØØðð 
×	'Ñ	'ð	€Nð Ø€Y×Ñ˜Óð t¨H°S¸#°XÑ,>À×@RÑ@RÐ,RÑ'Sò ó ó ðð ñ)ó ð)ð
-˜2ð -¨Dõ -ð. ð!˜Rò !ó ð!ò
ò
)ð2Kà#ð2Kð &ð2Kð -ð	2Kð
 
ó2KðhJð &ð	Jð
 -ðJð 
óJö&rB   r\  c                   ó   — e Zd Zd„ Zy)ÚTracebackVariablec                  ó   — y r8   r™   rˆ   s       r@   r‹   zTracebackVariable.call_functionˆ  s   � rB   N)r�   r    r¡   r‹   r™   rB   r@   r„  r„  †  s   „ ã2rB   r„  c                   ó0   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zˆ xZS )ÚSysFunctionVariablec                 ó2   •— t        ‰| �  di |¤Ž || _        y r  )r³   r´   r­   )r|   r­   rŠ   r¹   s      €r@   r´   zSysFunctionVariable.__init__Œ  s   ø€ Ü‰ÑÑ"˜6Ò"Øˆ�
rB   c                 óh  — t        |j                  «      rK|j                  d   }|j                  }d }t        j                  ||«      |t        j                  ||«      g}n>t        j                  d «      t        j                  d «      t        j                  d «      g}t        j                  |«      S )Néÿÿÿÿ)r×   Úexn_vt_stackry  r.   r:   r   r0   rw  )r|   r=   Úexnr   ÚtbrE   s         r@   Úexc_infozSysFunctionVariable.exc_info�  sš   € Üˆr�‰ÔØ—/‘/ "Ñ%ˆCØ—,‘,ˆCØˆBä×%Ñ% b¨#Ó.ØÜ×%Ñ% b¨"Ó-ð‰Eô ×*Ñ*¨4Ó0Ü×*Ñ*¨4Ó0Ü×*Ñ*¨4Ó0ðˆEô
 ×&Ñ& uÓ-Ð-rB   c                 ó>   — | j                  |«      j                  d   S r©  )rŽ  rE   rš   s     r@   Ú	exceptionzSysFunctionVariable.exception¢  s   € Ø�}‰}˜RÓ ×&Ñ& qÑ)Ð)rB   c                 óü   — | j                   t        j                  u r| j                  |«      S | j                   t        j                  u r| j                  |«      S t	        d| j                   j
                  › �«       y )Nzsys.)r­   rr  rŽ  r�  r   r�   rˆ   s       r@   r‹   z!SysFunctionVariable.call_function¥  sZ   € Ø�:‰:œŸ™Ñ%Ø—=‘= Ó$Ð$Ø�Z‰Zœ3Ÿ=™=Ñ(Ø—>‘> "Ó%Ð%ä˜D §¡×!4Ñ!4Ð 5Ð6Õ7rB   )r�   r    r¡   r´   rŽ  r�  r‹   r  r  s   @r@   r‡  r‡  ‹  s   ø„ ôò.ò$*ö8rB   r‡  )ÚTMADescriptorMetadataÚTritonHOPifierc                   óÜ   — e Zd Zdedefd„Zdedefd„Zdedefd„Z	de
ej                  j                  j                  df   fd	„Zd
„ Zd„ Zd„ Zd„ Zdedefd„Zdddee   ddfd„Zdefd„Zy)ÚDynamoTritonHOPifierrð  r„   c                 ó   — t        |«      ‚r8   )r   )r|   rð  s     r@   Úraise_unsupportedz&DynamoTritonHOPifier.raise_unsupportedµ  s   € Ü˜#ÓÐrB   Úmaybe_callablec                 ó.   — t        |t        t        f«      S r8   )r9   r‘   r¤   )r|   r˜  s     r@   Úis_callablez DynamoTritonHOPifier.is_callable¸  s   € ÜØÔ7Ô9MÐNó
ð 	
rB   r>   c                 ó   — |j                   S r8   rè  )r|   r>   s     r@   Ú	get_valuezDynamoTritonHOPifier.get_value½  s   € Ø�y‰yÐrB   .c                 óv   — ddl m} t        ||«      r|j                  «       S t	        dt        |«      › �«       y )Nr+   )ÚBaseListVariablezgrid for the triton kernel is )Úlistsrž  r9   rs  r   r  )r|   Úgridrž  s      r@   Ú
check_gridzDynamoTritonHOPifier.check_gridÀ  s0   € Ý+ä�dÐ,Ô-Ø—=‘=“?Ð"äÐ:¼4À»:¸,ÐGÕHrB   c                 óº   — |j                  «       D ��ci c]%  \  }}t        j                  j                  |«      |“Œ' }}}|j	                  ||gi «      }|S c c}}w r8   )rE   r   r0   r<   r‹   )r|   r   Úmetar=   rI   rJ   s         r@   Ú	call_gridzDynamoTritonHOPifier.call_gridÈ  sV   € ØDHÇJÁJÃL×Q¹D¸A¸q”	×*Ñ*×1Ñ1°!Ó4°aÑ7ÐQˆÑQØ×!Ñ! " t f¨bÓ1ˆØˆùó Rs   ”*Ac                 ó\   — ddl m} |j                  ||«      }|j                  |||«      }|S )Nr+   )ÚSourcelessBuilder)Úbuilderr¦  r<   r‹   )	r|   Úuser_fnr‰   rŠ   r=   r'  r¦  Úwrapped_user_functionrH   s	            r@   Úcall_user_defined_fnz)DynamoTritonHOPifier.call_user_defined_fnÎ  s1   € Ý.à 1× 8Ñ 8¸¸WÓ EÐØ&×4Ñ4°R¸¸vÓFˆØˆrB   c                 ól   — ddl m}  ||t        |j                  |› «      «      j	                  |«      }|S )Nr+   )ÚVariableBuilder)r§  r¬  r   Úkernel_sourceÚ_wrap)r|   Úuser_objr=   r'  rU   r¬  Úwrapped_user_objs          r@   Úwrap_user_defined_objz*DynamoTritonHOPifier.wrap_user_defined_objÕ  s7   € Ý,á*Ø”
˜8×1Ñ1°d°VÓ=ó
ç
‰%�‹/ð 	ð  ÐrB   c                 ól   — |j                  |«      }|D �cg c]  }|j                  «       ‘Œ }}|S c c}w r8   )Úunpack_var_sequencerZ  )r|   Úconfigsr=   Úconfigs       r@   Úmaybe_unpack_configsz)DynamoTritonHOPifier.maybe_unpack_configsÝ  s=   € à×-Ñ-¨bÓ1ˆð DKÖK¸�6×2Ñ2Õ4ÐKˆÐKàˆùò Ls   –1rH   c                 ód   — |j                  «       s| j                  d«       |j                  «       S )Nz`@triton.heuristics must return constant values because configs can only contain constant values.)Úis_python_constantr—  rZ  )r|   rH   s     r@   Úmaybe_unpack_heuristic_resultz2DynamoTritonHOPifier.maybe_unpack_heuristic_resultæ  s0   € Ø×(Ñ(Ô*Ø×"Ñ"Ørôð ×.Ñ.Ó0Ð0rB   r'  ÚTritonKernelVariabler‰   c                 óÄ   — |j                   €t        |«      dk7  r| j                  d«        t        |«      |j                  |j
                  |d   |j                  ¬«      S )Nr+   z7Triton kernels should be called with only a single gridr   )ÚkernelÚ
kernel_idxr   r­  )r   r×   r—  r  r¼  r½  r?   )r|   r'  r‰   s      r@   Úcall_getitemz!DynamoTritonHOPifier.call_getitemð  s\   € ð �=‰=Ð$¬¨D«	°QªØ×"Ñ"ØIôð Œt�H‹~Ø—?‘?Ø×*Ñ*Ø�a‘Ø"Ÿ/™/ô	
ð 	
rB   c                 ó$  — ddl m} ddlm} i }t	        |j                  «       «      D ]D  }||   }	t        |	t        «      sŒ|	j                  «       ||<   |	j                  j                  ||<   ŒF |j                  «       D ��	ci c]%  \  }}	t        j                  j                  |«      |	“Œ' }
}}	ddlm}m} |j                  «       D ��	ci c]"  \  }}	t        |	|«      r||	j#                  «       “Œ$ }}}	|
j                  «       D ��	ci c]  \  }}	t        |	|«      s||	“Œ }}}	|j%                  «       D ][  }	|	j'                  «       }	t        |	t        j(                  t        j*                  f«      rŒ>| j-                  dt/        |	«      › d�«       Œ] |j1                  |«      } ||t2        «      }|j4                  j7                  d|d	|j8                  ||||j;                  «       d
œ«       t        j                  d «      S c c}	}w c c}	}w c c}	}w )Nr+   r/   )rV  r   )Úkernel_side_tableÚtriton_kernel_wrapper_mutationz.Unexpected argument type for a Triton kernel: rô  r‹   r™   )r½  Úconstant_args_idxr   Útma_descriptor_metadatarŠ   )r�  r0   ÚdictsrV  rD   r‡  r9   ÚTMADescriptorVariableÚto_metadataÚdata_ptrÚfrom_tensorrE   r   r<   Ú*torch._higher_order_ops.triton_kernel_wraprÀ  rÁ  r»   r  ÚrealizerÁ  rq  r—  ÚreprÚadd_constant_argsrG   rM   rx  r½  rs  )r|   r'  ÚgridsÚcombined_args_rawr=   r0   rV  rÃ  rI   rJ   Úcombined_argsrÀ  rÁ  rB  Únon_constant_argsrÂ  r£  s                    r@   Úcall_HOPzDynamoTritonHOPifier.call_HOP  s  € Ý.Ý,ð :<ÐÜÐ'×,Ñ,Ó.Ó/ò 	>ˆAØ! !Ñ$ˆAÜ˜!Ô2Õ3Ø-.¯]©]«_Ð'¨Ñ*Ø'(§z¡z×'=Ñ'=Ð! !Ò$ð		>ð *×/Ñ/Ó1÷
á��1ô ×&Ñ&×-Ñ-¨aÓ0°!Ñ3ð
ˆñ 
÷
	
ð *×/Ñ/Ó1÷
á��1Ü˜!Ð-Ô.ð ˆq×#Ñ#Ó%Ñ%ð
ˆñ 
ð &×+Ñ+Ó-÷
á��1Ü˜aÐ!1Ô2ð ˆq‰Dð
Ðñ 
ð #×)Ñ)Ó+ò 	ˆAØ—	‘	“ˆAÜ˜a¤)×":Ñ":¼I×<UÑ<UÐ!VÕWØ×&Ñ&ØDÄTÈ!ÃWÀIÈQÐOõð	ð .×?Ñ?ÀÓNÐÙ Ð!2´DÓ9ˆØ
�	‰	×ÑØØ*Øà&×1Ñ1Ø%6ØØ+BØŸ-™-›/ñô		
ô ×)Ñ)Øó
ð 	
ùó]
ùó
ùó

s   Â*H Ã
'HÄHN)r�   r    r¡   r¢   r	   r—  r   r}  rš  rœ  rF   rµ   ÚfxÚproxyÚProxyr¡  r¤  rª  r±  r¶  r¹  r   r¾  r0   rÑ  r™   rB   r@   r•  r•  ´  s¼   „ ð Sð ¨Uó ð
¨#ð 
°$ó 
ð
˜Sð  Só ðI %¨¯©¯©×(<Ñ(<¸cÐ(AÑ"Bó Iòòò òð1°Cð 1¸Có 1ð
à(ð
ð �s‰mð
ð 
 ó	
ð$@
ÐBRô @
rB   r•  c                   ó�   ‡ — e Zd ZU ded<   ded<   ee   ed<   ded<   dˆ fd	„Z	 	 	 	 	 	 	 	 dd
„Z	 	 	 	 	 	 dˆ fd„Zde	de	fd„Z
ˆ xZS )rº  r3   r   r4   r¼  r½  r   r­  r„   c                 ó‚   •— |j                  dd «      | _        t        ‰| �  di |¤Ž t        j                  | |||«       y )Nr­  r™   )rR   r­  r³   r´   Ú dynamo_triton_hopifier_singletonÚinit_variable)r|   r¼  r½  r   rŠ   r¹   s        €r@   r´   zTritonKernelVariable.__init__N  s;   ø€ Ø#ŸZ™Z¨¸Ó>ˆÔÜ‰ÑÑ"˜6Ò"Ü(×6Ñ6°t¸VÀZÐQUÕVrB   c                 ó2   — t         j                  | |||«      S r8   )r×  Úcall_triton_kernelrˆ   s       r@   r‹   z"TritonKernelVariable.call_functionS  s    € ô 0×BÑBØ�$˜ ó
ð 	
rB   c                 ó˜   •— |dk(  rt         j                  | |«      S |dk(  rt         j                  | |||«      S t        ‰| �  ||||«      S )NÚ__getitem__Úrun)r×  r¾  Úcall_runr³   r  )r|   r=   rU   r‰   rŠ   r¹   s        €r@   r  z TritonKernelVariable.call_method]  sW   ø€ ð �=Ò Ü3×@Ñ@ÀÀtÓLÐLØ�UŠ]Ü3×<Ñ<¸TÀ4ÈÐQSÓTÐTô ‰wÑ" 2 t¨T°6Ó:Ð:rB   rá   c                 óv   — ddl m} ddlm} t	        ||«      r  |j
                  |j                  «       «      S |S )Nr+   r/   )rq  )r�  r0   Útensorrq  r9   r<   Úevaluate_expr)r|   rá   r0   rq  s       r@   Úspecialize_symbolicz(TritonKernelVariable.specialize_symbolicl  s6   € Ý.Ý+ô �c˜?Ô+Ø*Ð#×*Ñ*¨3×+<Ñ+<Ó+>Ó?Ð?Øˆ
rB   r  r�   r€  )r�   r    r¡   r_   r   rp  r´   r‹   r  r   râ  r  r  s   @r@   rº  rº  H  s†   ø… Ø
ÓØÓØ˜‘ÓØÓõWð

à#ð
ð &ð
ð -ð	
ð
 
ó
ð;ð &ð	;ð
 -ð;ð 
õ;ð sð ¨s÷ rB   rº  c                   ó<   ‡ — e Zd Z	 	 	 	 	 	 	 	 dˆ fd„Zd„ Zd„ Zˆ xZS )rÅ  c                 ó”   •— t        |t        j                  «      sJ ‚t        ‰| �  di |¤Ž || _        || _        || _        || _        y r  )	r9   r   ÚDataPtrVariabler³   r´   rÇ  ÚdimsÚ
block_dimsÚelement_size)r|   rÇ  ræ  rç  rè  rŠ   r¹   s         €r@   r´   zTMADescriptorVariable.__init__w  sH   ø€ ô ˜(¤I×$=Ñ$=Ô>Ð>Ð>Ü‰ÑÑ"˜6Ò"Ø ˆŒØˆŒ	Ø$ˆŒØ(ˆÕrB   c                 óè   — | j                   D �cg c]  }|j                  «       ‘Œ c}| j                  D �cg c]  }|j                  «       ‘Œ c}| j                  j                  «       fS c c}w c c}w r8   )ræ  rs  rç  rè  )r|   Údims     r@   rÆ  z!TMADescriptorVariable.to_metadata†  sT   € à'+§y¡yÖ1 ˆS�\‰\�^Ò1Ø'+§¡Ö7 ˆS�\‰\�^Ò7Ø×Ñ×&Ñ&Ó(ð
ð 	
ùÚ1ùÚ7s
   �A*¶A/c                 ó  ‡ ‡— ‰j                  ˆˆ fd„«       ‰ j                  j                  ‰«       g ‰ j                  ¢‰ j                  ¢‰ j
                  ‘}‰j                  |«       ‰j                  t        |«      dz   d«       y )Nc                  óV   •— ‰ j                  ddt        ‰j                  «      › d�«      S )Nz$triton.tools.experimental_descriptorÚcreate_Úd_tma_descriptor)rØ  r×   ræ  )r8  r|   s   €€r@   rÚ  z3TMADescriptorVariable.reconstruct.<locals>.<lambda>�  s+   ø€ �G×,Ñ,Ø6Øœ#˜dŸi™i›.Ð)Ð)9Ð:ó€ rB   r+   F)	rß  rÇ  r7  ræ  rç  rè  rK  r‹   r×   )r|   r8  r‰   s   `` r@   r7  z!TMADescriptorVariable.reconstruct�  sp   ù€ Ø×Ñôô	
ð 	�‰×!Ñ! 'Ô*Ø@�—‘Ð@˜TŸ_™_Ð@¨d×.?Ñ.?Ð@ˆØ�‰˜ÔØ×Ñœc $›i¨!™m¨UÕ3rB   )rÇ  zvariables.DataPtrVariableræ  úlist[ConstantVariable]rç  rï  rè  r0   )r�   r    r¡   r´   rÆ  r7  r  r  s   @r@   rÅ  rÅ  v  s8   ø„ ð)à-ð)ð 'ð)ð -ð	)ð
 )õ)ò
ö
4rB   rÅ  c                   ó@   ‡ — e Zd Zdeddfˆ fd„Z	 	 	 	 	 	 	 	 dd„Zˆ xZS )ÚCreateTMADescriptorVariableÚrankr„   Nc                 ó>   •— |dv sJ ‚t        ‰| �  di |¤Ž || _        y )N)r+   r   r™   )r³   r´   rò  )r|   rò  rŠ   r¹   s      €r@   r´   z$CreateTMADescriptorVariable.__init__›  s(   ø€ ð
 �v‰~Ðˆ~Ü‰ÑÑ"˜6Ò"Øˆ�	rB   c                 óú  — d|v r|d   n|d   }t        |t        j                  «      st        d| j                  › d�«      ‚| j                  dk(  r;t        |«      t        |«      z   dk(  sJ ‚d|v r|d   n|d   g}d|v r|d   n|d	   g}nTt        |«      t        |«      z   d
k(  sJ ‚d|v r|d   n|d   d|v r|d   n|d	   g}d|v r|d   n|d   d|v r|d   n|d   g}d|v r|d   n|d   }t        ||||¬«      S )NÚptrr   z8Please ensure there were no graph breaks between create_z3d_tma_descriptor and the upstream .data_ptr() call.r+   é   rê  Ú	block_dimr   é   Údim1Údim0Ú
block_dim1rh  Ú
block_dim0rè  rŠ  )rÇ  ræ  rç  rè  )r9   r   rå  r   rò  r×   rÅ  )r|   r=   r‰   rŠ   rõ  ræ  rç  rè  s           r@   r‹   z)CreateTMADescriptorVariable.call_function¤  sa  € ð  %¨™ˆf�UŠm°D¸±Gˆä˜#œy×8Ñ8Ô9ÜðØŸ)™)˜ð %$ð$óð ð �9‰9˜Š>Ü�t“9œs 6›{Ñ*¨aÒ/Ð/Ð/à!&¨&¡��u’°d¸1±gðˆDð (3°fÑ'<��{Ò#À$ÀqÁ'ð‰Jô �t“9œs 6›{Ñ*¨aÒ/Ð/Ð/à"(¨FÑ"2��v’¸¸Q¹Ø"(¨FÑ"2��v’¸¸Q¹ðˆDð
 )5¸Ñ(>��|Ò$ÀDÈÁGØ(4¸Ñ(>��|Ò$ÀDÈÁGðˆJð 2@À6Ñ1I�v˜nÒ-ÈtÐTVÉxˆä$ØØØ!Ø%ô	
ð 	
rB   r�   )r�   r    r¡   rp  r´   r‹   r  r  s   @r@   rñ  rñ  š  sE   ø„ ðàðð 
õ	ð(
à#ð(
ð &ð(
ð -ð	(
ð
 
÷(
rB   rñ  r8   r  )nrg   r|  rÐ   rm   r^   rr  r\   Úcollections.abcr   Útypingr   r   r   r   r   Útyping_extensionsr	   Úunittest.mockr
   rµ   rœ  r   r   Úbytecode_transformationr   r   r   rZ  r   r   r   r   r   r   r   r   r   r   r   Úguardsr   r   r?   r   r   r    r!   rû  r"   r#   r$   r%   r&   r'   r(   r)   r*   Úbaser,   r-   r.   r�  r0   Ú#torch.distributed.fsdp._fully_shardr1   ÚModuleNotFoundErrorr0  r2   rÉ  r3   r4   r5   rA   rK   rG   r¢   rW   rf   rp   rt   rv   r¤   r	  r  r  r�  r�  r”  r­  r¼  r÷   r‘   rä  r  r  r  r  r7  r=  rD  r\  r„  r‡  r’  r“  r•  r×  rº  rÅ  rñ  r™   rB   r@   ú<module>r     sR  ðñó. Û Û Û Û 
Û Ý $ß BÕ BÝ #Ý ã ç #ß VÑ V÷÷ ÷ ñ ÷ 1ß NÓ N÷
÷ 
õ 
÷ =Ñ <Ý &ðÝEñ
 ÝD÷ñ ˆT˜Ô"€ô	Aó.ð  $ s¨OÐ';Ñ"<ó  ò"ò(Ð ò-ô"˜ô ôDF7Ð3ô F7ôR:Ð4ô :ô<y4 ?ô y4ôx	
Ø ô
ô4
Ð%=ô 4
ônØ"ôô<V-Ð-ô V-ôrÐ 2ô ô(Ð"6ô ó(ô NAÐ!9ô NAôbPA˜?ô PAôf
 /ô 
òDó/ôLDÐ(<ô LDô^7Ð1ô 7ô&;Ð$8ô ;ô,L
˜ô L
ô^~ ô ~ôB3˜ô 3ô
 8˜/ô  8÷FôN
˜>ô N
ñb $8Ó#9Ð  ô+˜?ô +ô\!4˜Oô !4ôH2
 /õ 2
øðc: ò ØÓðús   Â&H ÈHÈH