Ë
    ÃÓ^jq³ ã                   ó0
  — U 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Zddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlmZmZ ddlmZmZ ddlmZ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" dd	l#m$Z$ dd
l%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; ddl<m=Z=m>Z> ddl?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZI ddlJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZU ddlVmWZWmXZXmYZYmZZZ ddl[m\Z\ ddl]m^Z^ 	 ddl_m`Z` er2ddlbmcZc ddldmeZemfZfmgZg ddlhmiZi ddljmkZkmlZl ddlmmnZn ddlompZpmqZq ddlrmsZs  ededef   ¬ «      Ztd!Zud"Zv ewh d#£«      Zx ewd$h«      Zyd%Zz e«       Z{eeef   e|d&<    G d'„ d(e}«      Z~ejþ                  d)e@fd*„«       Z€ G d+„ d,«      Z�d-ed)e�fd.„Z‚d-ed/d0d1e$dz  d2ee   d3eƒe„ef   d)eƒe„eZf   fd4„Z…	 d£d/d0d5ed6e$dz  d)eZfd7„Z†d/d0d8eƒe„ef   d)dfd9„Z‡d:d0d8eƒe„eZf   d;e�j                  d)dfd<„Z‰d;e�j                  d=eƒe„ef   d>e„d?eŠe‹df   dz  d@eŠe   dz  dAeƒe„ef   dz  dBeƒe„ef   dz  d)ej*                  fdC„ZŒh dD£Z�d/d0dEe‹d6e$dz  d>e„d)eZf
dF„ZŽ G dG„ dHeZ«      Z� G dI„ dJe�«      Z� G dK„ dLe�«      Z‘ G dM„ dNe�«      Z’ G dO„ dPeZ«      Z“ G dQ„ dRe“«      Z” G dS„ dTe�«      Z• G dU„ dVe•«      Z– G dW„ dXe�«      Z— G dY„ dZe—«      Z˜ G d[„ d\e�«      Z™d/d0dEedef   d>e„d2ešeZ   d3eƒe„eZf   d)eZfd]„Z› G d^„ d_e�«      Zœ G d`„ daeœ«      Z�e�j<                  e�j>                  e�j@                  e�jB                  e�jD                  e�jF                  e�jH                  e�jJ                  e�jL                  h	Z§ G db„ dceZ«      Z¨ G dd„ dee¨«      Z© G df„ dge�«      Zª G dh„ dieª«      Z«d)eƒeef   fdj„Z¬d/d0dEedef   d)e@fdk„Z­ G dl„ dme�«      Z® G dn„ doe�«      Z¯ G dp„ dqeZ«      Z° G dr„ dseZ«      Z± G dt„ dueZ«      Z²ddvljm³Z³m´Z´mµZµm¶Z¶  G dw„ dxe¶«      Z· e·«       Z¸ G dy„ dzeZ«      Z¹ G d{„ d|eZ«      Zº G d}„ d~eZ«      Z» G d„ d€eZ«      Z¼ G d�„ d‚eZ«      Z½ G dƒ„ d„e�«      Z¾ G d…„ d†e�«      Z¿ G d‡„ dˆe¨«      ZÀd/d0d‰eg df   d>e„d)dfdŠ„ZÁ G d‹„ dŒeZ«      ZÂ G d�„ dŽeZ«      ZÃ G d�„ d�eZ«      ZÄ G d‘„ d’eZ«      ZÅ G d“„ d”eZ«      ZÆ G d•„ d–eZ«      ZÇ G d—„ d˜eZ«      ZÈ G d™„ dšeZ«      ZÉ G d›„ dœeZ«      ZÊ G d�„ džeZ«      ZË G dŸ„ d eZ«      ZÌ G d¡„ d¢eZ«      ZÍy# ea$ r dZ`Y �Œ	w xY w)¤aŽ  
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)ÚCallableÚSequence)ÚCellTypeÚFunctionType)ÚAnyÚcastÚLiteralÚOptionalÚTYPE_CHECKINGÚTypeVar)ÚNever)ÚWeakKeyDictionary)Úget_stack_above_dynamo)ÚSource)Úis_namedtuple_classé   )ÚconfigÚgraph_break_hintsÚ	polyfillsÚ	variables)Úcreate_call_functionÚcreate_rot_nÚis_generator)Úformat_frame_infoÚget_dynamo_observed_exceptionÚInfiniteGeneratorErrorÚObservedExceptionÚObservedGeneratorExitÚObservedUserStopIterationÚraise_observed_exceptionÚraise_type_errorÚStepUnsupportedÚunimplementedÚUnsupported)ÚGuardBuilderÚinstall_guard)
Ú
AttrSourceÚCellContentsSourceÚClosureSourceÚConstantSourceÚDefaultsSourceÚGetItemSourceÚImportSourceÚSkipGuardSourceÚTypeMROSourceÚ
TypeSource)Úcheck_constant_argsÚcheck_unspec_or_constant_argsÚcmp_name_to_op_mappingÚidentityÚis_functionÚ2is_lru_cache_wrapper_trace_without_warning_allowedÚis_tensor_base_attr_getterÚis_wrapper_or_member_descriptorÚistypeÚ	make_cellÚunpack_iterableé   )Ú#AsPythonConstantNotImplementedErrorÚAttributeMutationNewÚValueMutationNewÚVariableTracker©ÚConstantVariable)ÚUserDefinedObjectVariable)Ú_fsdp_param_group)Ú	PyCodegen)Ú&InliningGeneratorInstructionTranslatorÚInliningInstructionTranslatorÚInstructionTranslatorBase)ÚContextWrappingVariable)ÚTritonGridTypeÚTritonKernelType)ÚDunderDictVariable)ÚBaseListVariableÚListVariable)ÚTensorVariableÚ_F.)Úboundé   é   >   Úis_leafÚ	namespaceÚnone_is_leafrT   zihttps://github.com/pytorch/pytorch/issues/new?&labels=oncall%3A+pt2&projects=&template=pt2-bug-report.ymlÚ_spec_cachec                   ó   — e Zd Zy)ÚClosureConversionErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    úl/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_dynamo/variables/functions.pyrY   rY   Š   s   „ Ør^   rY   Úreturnc            	      óT   — t        t        t        t        d«      d«      d«      d«      S )NÚtorchÚutilsÚ_pytreeÚSUPPORTED_NODES)r'   r-   r]   r^   r_   Ú!get_pytree_SUPPORTED_NODES_sourcerf   Ž   s(   € äÜ”:œl¨7Ó3°WÓ=¸yÓIØóð r^   c                   ó,   — e Zd Zdeddfd„Zdeddfd„Zy)ÚFunctionSpecÚfuncr`   Nc                 óp  — |j                   }|j                  }|j                  | _        |j                  | _        |j                  | _        |d | j                   | _        || j                  | j
                   | _	        | j                  | j                  z   | _
        || j
                  | j
                  | j                  z    | _        | j
                  | j                  z   }|j                  t        z  r||   nd | _        || j                  rdndz  }|j                  t        z  r||   | _        y d | _        y ©Nr<   r   )Ú__code__Úco_varnamesÚco_posonlyargcountÚposonly_countÚco_argcountÚ	arg_countÚco_kwonlyargcountÚkwonly_countÚposonly_namesÚpos_or_kw_namesÚall_pos_namesÚkwonly_namesÚco_flagsÚ
CO_VARARGSÚvarargs_nameÚCO_VARKEYWORDSÚ
varkw_name)Úselfri   ÚcodeÚvnÚoffs        r_   Ú__init__zFunctionSpec.__init__—   s  € Ø�}‰}ˆØ×Ñˆà!×4Ñ4ˆÔØ×)Ñ)ˆŒØ ×2Ñ2ˆÔàÐ 4 $×"4Ñ"4Ð5ˆÔØ! $×"4Ñ"4°t·~±~ÐFˆÔØ!×/Ñ/°$×2FÑ2FÑFˆÔØ˜tŸ~™~°·±À×ARÑARÑ0RÐSˆÔà�n‰n˜t×0Ñ0Ñ0ˆØ'+§}¡}´zÒ'A˜B˜sšGÀtˆÔØ�D×%Ò%‰q¨1Ñ,ˆØ%)§]¡]´^Ò%C˜"˜S™'ˆ�Èˆ�r^   c           
      ó  — |j                   xs d| _        |j                  xs i | _        t	        t        | j                  t        | j                  «       d  t        t        | j                  «      «      «      «      | _	        y ©Nr]   )
Ú__defaults__ÚdefaultsÚ__kwdefaults__Ú
kwdefaultsÚdictÚziprv   ÚlenÚrangeÚpos_default_map)r}   ri   s     r_   Úupdate_defaultszFunctionSpec.update_defaults©   si   € ð ×)Ñ)Ò/¨RˆŒØ×-Ñ-Ò3°ˆŒô  $Ü�×"Ñ"¤C¨¯©Ó$6Ð#6Ð#8Ð9¼5ÄÀTÇ]Á]ÓASÓ;TÓUó 
ˆÕr^   )rZ   r[   r\   r   r�   r�   r]   r^   r_   rh   rh   –   s+   „ ðN˜\ð N¨dó Nð$	
 Lð 	
°Tô 	
r^   rh   ri   c                 ó\   — t         j                  | «      }|€t        | «      }|t         | <   |S ©N)rW   Úgetrh   )ri   Úspecs     r_   Ú	_get_specr’   µ   s.   € Ü�?‰?˜4Ó €DØ€|Ü˜DÓ!ˆØ Œ�DÑØ€Kr^   ÚtxrH   Ú	fn_sourceÚargsÚkwargsc           
      ó8  — t        | «      }t        |«      |j                  k(  rh| j                  s\|sZ|j                  sN|j
                  sB|j                  s6t        |j                  «      D ��ci c]  \  }}|t        |||   «      “Œ c}}S |j                  | «       i }t        |«      }	d}
t        |j                  «      D �]  \  }}|t        |«      k  rt        |||   «      ||<   Œ(||	v r-||j                  vrt        ||	j                  |«      «      ||<   ŒY||j                  v r¨|j                  |   }|r6|
s4t        t!        |d«      j#                  t$        j&                  «      «       d}
d }|r>t)        j*                  |j,                  |   «      rt.        j0                  st3        ||«      }t        ||j,                  |   |«      ||<   �Œt5        d|› �«      ‚ |t        |j                  «      d  }|j                  r#t        |t7        |«      «      ||j                  <   n/|r-t5        dt        |«      › dt        |j                  «      › �«      ‚|j                  D ]p  }||	v rt        ||	j                  |«      «      ||<   Œ&||j8                  v r0d }|rt3        ||d¬«      }t        ||j8                  |   |«      ||<   Œdt5        d|› �«      ‚ |j
                  rt        ||	«      ||j
                  <   |S |	rt5        d	t;        |	«      › �«      ‚|S c c}}w )
NFr„   Tz&missing required positional argument: z#Too many positional arguments: got z, expected )Úis_kwz(Missing required keyword-only argument: zUnexpected keyword arguments: )r’   rŠ   rq   r„   rz   r|   rw   Ú	enumeraterv   Úwrap_bound_argr�   rˆ   rt   ÚpoprŒ   r&   r'   Ú
make_guardr%   ÚSEQUENCE_LENGTHrB   Ú
is_literalr…   r   Ú%skip_guards_on_constant_func_defaultsr+   Ú	TypeErrorÚtupler‡   Úlist)ri   r“   r”   r•   r–   r‘   ÚiÚnameÚbaÚrem_kwÚguarded_pos_defaults_lenÚidxÚdefault_sourceÚextraÚkwdefault_sources                  r_   Úbind_args_cachedr¬   ½   s  € ô �T‹?€Dô
 	ˆD‹	�T—^‘^Ò#Ø×!Ò!ÙØ×!Ò!Ø—’Ø×!Ò!ô % T×%7Ñ%7Ó8÷
á��4ð ”.  T¨!¡WÓ-Ñ-ó
ð 	
ð 	×Ñ˜ÔØ	€BÜ�&‹\€FØ$Ðô ˜T×/Ñ/Ó0ó  M‰ˆˆ4ØŒs�4‹yŠ=Ü% b¨$¨q©'Ó2ˆBˆtŠHØ�V‰^ð ˜×*Ñ*Ñ*ä% b¨&¯*©*°TÓ*:Ó;ˆBˆtŠHØ�T×)Ñ)Ñ)Ø×&Ñ& tÑ,ˆCÙÑ!9ô Ü˜y¨.Ó9×DÑDÜ$×4Ñ4óôð
 ,0Ð(Ø!ˆNÙÜ ×+Ñ+¨D¯M©M¸#Ñ,>Ô?Ü×@Ò@ä!/°	¸3Ó!?�Ü% b¨$¯-©-¸Ñ*<¸nÓMˆBˆt‹HäÐDÀTÀFÐKÓLÐLðA MðF ”�T×'Ñ'Ó(Ð*Ð+€EØ×ÒÜ .¨r´5¸³<Ó @ˆˆ4×ÑÒÙ	ÜØ1´#°d³)°¸KÌÈD×L^ÑL^ÓH_ÐG`Ðaó
ð 	
ð
 ×!Ñ!ò 	OˆØ�6‰>Ü% b¨&¯*©*°TÓ*:Ó;ˆBˆtŠHØ�T—_‘_Ñ$Ø#ÐÙÜ#1°)¸TÈÔ#NÐ Ü% b¨$¯/©/¸$Ñ*?ÐAQÓRˆBˆtŠHäÐFÀtÀfÐMÓNÐNð	Oð ‡‚Ü,¨R°Ó8ˆˆ4�?‰?Ñð €Iñ 
ÜÐ8¼¸f»¸ÐGÓHÐHà€IùóS
s   Á.LÚvalÚsourcec                 óš   — t        |t        «      r|S |st        j                  | |«      S t        j                  j                  ||| ¬«      S )N©r“   )Ú
isinstancer@   Úbuildr   ÚLazyVariableTrackerÚcreate)r“   r­   r®   s      r_   rš   rš     sI   € ô �#”Ô'Øˆ
ÙÜ×$Ñ$ R¨Ó-Ð-ô ×,Ñ,×3Ñ3°C¸ÀBÐ3ÓGÐGr^   Úresultc                 ó’   — t        |j                  «       «      D ]+  \  }}t        |t        t        f«      sŒt        | |«      ||<   Œ- y r�   )r¢   Úitemsr±   r¡   rˆ   rš   )r“   rµ   ÚkÚvs       r_   Úwrap_args_kwargsrº   *  s>   € Ü�V—\‘\“^Ó$ò .‰ˆˆ1Ü�aœ%¤˜Õ'ä& r¨1Ó-ˆF�1ŠIñ.r^   Úparentr~   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 a local cell is
    already in `result` (cell argument).
    N)ÚoutputÚside_effectsÚco_cellvarsÚtrack_cell_newÚ
store_cellr›   )r»   rµ   r~   r¾   r¤   Únew_cells         r_   Úinit_cellvarsrÃ   1  sa   € ð —=‘=×-Ñ-€Là× Ñ ò  ˆØ×.Ñ.Ó0ˆØ�6‰>ð ×#Ñ# H¨f¯j©j¸Ó.>Ô?ØˆˆtŠñ r^   Ú	f_globalsr¤   r…   Úclosurer‡   Úannotationsc                 óæ   — ddl m}  || ||||«      }||_        t        |t        «      rddlm}	 t         |	|«      «      }|�'t        |t        «      st        dt        |«      › �«      ‚||_
        |S )Nr   ©r   ©Úpairwisez(annotations must be None or a dict, got )Útypesr   r†   r±   r¡   Ú	itertoolsrÊ   rˆ   ÚAssertionErrorÚtypeÚ__annotations__)
r~   rÄ   r¤   r…   rÅ   r‡   rÆ   r   ri   rÊ   s
             r_   Ú_create_nested_fnrÐ   F  sz   € õ #á˜˜i¨¨x¸ÓA€DØ$€DÔä�+œuÔ%Ý&ä™8 KÓ0Ó1ˆð Ð¤:¨k¼4Ô#@ÜØ6´t¸KÓ7HÐ6IÐJó
ð 	
ð '€DÔà€Kr^   >
   Ú__doc__rl   rZ   r[   Ú__closure__Ú__globals__Ú__builtins__r„   r†   rÏ   Úfnc                 óR  — |xr t        ||«      }|r|dk(  rt        |«      }d }	 t        j                  ||«      }|t        v rt        ||«      }|r"t        j                  j                  ||| ¬«      S t        j                  | |«      S # t        $ r t        t        | «       Y Œiw xY w)NrÏ   r°   )r'   r.   ÚinspectÚgetattr_staticÚAttributeErrorr    Úfn_known_dunder_attrsÚgetattrr   r³   r´   r@   r²   )r“   rÕ   r®   r¤   Úsubobjs        r_   Úfn_var_getattrrÝ   q  s°   € ð Ò0œ
 6¨4Ó0€Fá�$Ð+Ò+ô ! Ó(ˆà€Fð5Ü×'Ñ'¨¨DÓ1ˆð Ô$Ñ$Ü˜˜TÓ"ˆÙÜ×,Ñ,×3Ñ3°F¸FÀrÐ3ÓJÐJÜ× Ñ   VÓ,Ð,øô ò 5ô 	!¤°Ö4ð5ús   ¦B
 Â
B&Â%B&c            
       ó¸  ‡ — e Zd Z	 d dddeddfˆ fd„Zd„ Zdee   fd„Zde	dz  fd	„Z
d!d„Zd
eddfd„Zd
ddedee   deeef   def
ˆ fd„Zdefd„Zdefd„Zdefd„Zdedz  fd„Zdeeef   fd„Zdej,                  fd„Zdefd„Zdej4                  fd„Zdefd„Zd
ddefd„Zd
ddee   deeef   defd„Zd
ddedefd„Z d
ddeeef   fd„Z!defd„Z"ˆ xZ#S )"ÚBaseUserFunctionVariableNÚdict_vtzDunderDictVariable | Noner–   r`   c                 ó2   •— t        ‰| �  di |¤Ž || _        y rƒ   )Úsuperr�   rà   )r}   rà   r–   Ú	__class__s      €r_   r�   z!BaseUserFunctionVariable.__init__�  s   ø€ ô 	‰ÑÑ"˜6Ò"Ø29ˆ�r^   c                 ó$   — ddl m}  || |||«      S ©Nr<   )Úobject_richcompare©Úobject_protocolræ   ©r}   r“   ÚotherÚopræ   s        r_   Úrichcompare_implz)BaseUserFunctionVariable.richcompare_impl•  ó   € Ý7á! $¨¨E°2Ó6Ð6r^   c                 ó   — g S r�   r]   ©r}   s    r_   Ú	self_argsz"BaseUserFunctionVariable.self_argsš  ó   € Øˆ	r^   c                 ó   — | j                   S r�   ©r®   rï   s    r_   Ú
get_sourcez#BaseUserFunctionVariable.get_source�  ó   € Ø�{‰{Ðr^   r“   rH   c                 ó|   — | j                   €%t        j                  j                  || «      | _         | j                   S r�   )rà   r   rL   r´   ©r}   r“   s     r_   Úget_dict_vtz$BaseUserFunctionVariable.get_dict_vt   s0   € Ø�<‰<ÐÜ$×7Ñ7×>Ñ>¸rÀ4ÓHˆDŒLØ�|‰|Ðr^   r@   c                 ó\   — t        j                  |t        | j                  «       «      «      S r�   )r@   r²   ÚreprÚas_python_constantr÷   s     r_   Ú	repr_implz"BaseUserFunctionVariable.repr_impl¥  s#   € ä×$Ñ$ R¬¨d×.EÑ.EÓ.GÓ)HÓIÐIr^   r¤   r•   c                 óþ   •— |dk(  r,| j                  |«      j                  |dt        |«      |«      S |dk(  r,| j                  |«      j                  |dt        |«      i «      S t        ‰| �  ||t        |«      |«      S )NÚ__setattr__Ú__setitem__Ú__delattr__Ú__delitem__)rø   Úcall_methodr¢   râ   ©r}   r“   r¤   r•   r–   rã   s        €r_   r  z$BaseUserFunctionVariable.call_method©  sƒ   ø€ ð �=Ò Ø×#Ñ# BÓ'×3Ñ3Ø�M¤4¨£:¨vóð ð �]Ò"Ø×#Ñ# BÓ'×3Ñ3°B¸ÄtÈDÃzÐSUÓVÐVÜ‰wÑ" 2 t¬T°$«Z¸Ó@Ð@r^   c                 ó6   — | j                  «       j                  S r�   ©Úget_codeÚco_filenamerï   s    r_   Úget_filenamez%BaseUserFunctionVariable.get_filename¸  ó   € Ø�}‰}‹×*Ñ*Ð*r^   c                 ó6   — | j                  «       j                  S r�   ©r  Úco_namerï   s    r_   Úget_namez!BaseUserFunctionVariable.get_name»  ó   € Ø�}‰}‹×&Ñ&Ð&r^   c                 ó|   — t         j                  dk\  r| j                  «       j                  S | j	                  «       S )N©é   é   )ÚsysÚversion_infor  Úco_qualnamer  rï   s    r_   Úget_qualnamez%BaseUserFunctionVariable.get_qualname¾  s.   € Ü×Ñ˜wÒ&Ø—=‘=“?×.Ñ.Ð.à—=‘=“?Ð"r^   c                 ó<   — | j                  «       j                  d   S )Nr   )r  Ú	co_constsrï   s    r_   Úget_docz BaseUserFunctionVariable.get_docÄ  s   € à�}‰}‹×(Ñ(¨Ñ+Ð+r^   c                 ó   — t         ‚r�   ©ÚNotImplementedErrorrï   s    r_   Úget_globalsz$BaseUserFunctionVariable.get_globalsÈ  ó   € Ü!Ð!r^   c                 ó   — t         ‚r�   r  rï   s    r_   r  z!BaseUserFunctionVariable.get_codeË  r  r^   c                 ó   — t         ‚r�   r  rï   s    r_   Úhas_selfz!BaseUserFunctionVariable.has_selfÎ  r  r^   c                 ó   — t         ‚r�   r  rï   s    r_   Úget_functionz%BaseUserFunctionVariable.get_functionÑ  r  r^   c                 ó(   — | j                  «       d   S )NrZ   )r  rï   s    r_   Ú
get_modulez#BaseUserFunctionVariable.get_moduleÔ  s   € Ø×ÑÓ! *Ñ-Ð-r^   c                 óä  — | j                  |«      }|dv rr t        | d|dd › �«      «       }|j                  |«      r|j                  |«      S t	        j
                  || j                  xr t        | j                  |«      ¬«      S |dk(  r|S |dk(  r|j                  |d„ «      S |d	k(  r|j                  |d
„ «      S |j                  |«      r|j                  |«      S t        t        |«       y )N)rZ   r\   rÑ   r[   rl   Úget_r   éþÿÿÿró   Ú__dict__rÏ   c                  ó@   — t        j                  i t        «       ¬«      S ©N©Úmutation_type)r   ÚConstDictVariabler?   r]   r^   r_   ú<lambda>z6BaseUserFunctionVariable.var_getattr.<locals>.<lambda>ç  s   € œ	×3Ñ3ØÜ"2Ó"4ô€ r^   Ú__type_params__c                  ó@   — t        j                  g t        «       ¬«      S r+  )r   ÚTupleVariabler?   r]   r^   r_   r/  z6BaseUserFunctionVariable.var_getattr.<locals>.<lambda>ï  s   € œ	×/Ñ/ØÜ"2Ó"4ô€ r^   )rø   rÛ   ÚcontainsÚgetitemrB   r´   r®   r'   Úgetitem_or_defaultr    rÙ   )r}   r“   r¤   Úfn_dictr­   s        r_   Úvar_getattrz$BaseUserFunctionVariable.var_getattr×  s  € Ø×"Ñ" 2Ó&ˆð ÐTÑTØ4”'˜$ $ t¨A¨b z lÐ 3Ó4Ó6ˆCØ×Ñ Ô%Ø—‘ tÓ,Ð,Ü#×*Ñ*Ø˜DŸK™KÒI¬J°t·{±{ÀDÓ,Iôð ð �ZÒØˆNØÐ&Ò&Ø×-Ñ-Øñóð ð Ð&Ò&Ø×-Ñ-Øñóð ð ×Ñ Ô%Ø—‘ tÓ,Ð,ä(¬¸Õ<r^   c                 óÞ   — | j                  «       dk(  r4| j                  «       j                  d«      rt        j                  d «      S |j                  | g | j                  «       ¢|¢|d¬«      S )NÚpatch_track_step_calledztorch/optim/lr_scheduler.pyT)Úallow_nested_graph_breaks)r  r  ÚendswithrB   r´   Úinline_user_function_returnrð   ©r}   r“   r•   r–   s       r_   Úcall_functionz&BaseUserFunctionVariable.call_functionú  sq   € ð �M‰M‹OÐ8Ò8Ø×!Ñ!Ó#×,Ñ,Ð-JÔKä#×*Ñ*¨4Ó0Ð0Ø×-Ñ-ØØ&ˆd�n‰nÓÐ& Ð&ØØ&*ð	 .ó 
ð 	
r^   c                 óª   — d}|t         v s|dk(  rd}n	 t        | j                  «       |«      }t	        j
                  ||«      S # t        $ r d}Y Œ#w xY w)NFr)  T)rÚ   Úhasattrr#  r  r@   r²   ©r}   r“   r¤   rµ   s       r_   Úcall_obj_hasattrz)BaseUserFunctionVariable.call_obj_hasattr  sc   € ð ˆàÔ(Ñ(¨D°JÒ,>Ø‰FðÜ  ×!2Ñ!2Ó!4°dÓ;�ô ×$Ñ$ R¨Ó0Ð0øô 'ò Ø’ðús   ”A ÁAÁAc                 ó   — i S r�   r]   r÷   s     r_   Úclosure_varsz%BaseUserFunctionVariable.closure_vars  ó	   € ð ˆ	r^   c                  ó   — y©NTr]   rï   s    r_   Ú should_allow_nested_graph_breaksz9BaseUserFunctionVariable.should_allow_nested_graph_breaks$  ó   € Ør^   r�   )r“   rH   r`   rL   )$rZ   r[   r\   r   r�   rì   r¢   r@   rð   r   rô   rø   rü   Ústrrˆ   r  r  r  r  r  r  rË   ÚCodeTyper  Úboolr!  r   r#  r%  r7  r>  rB   rB  rD  rH  Ú__classcell__©rã   s   @r_   rß   rß   Ž  sÈ  ø„ à59ñ:Ø2ð:ØEHð:à	õ:ò7ð
˜4 Ñ0ó ð˜F T™Mó óð
J˜Cð JÐ$5ó JðAà'ðAð ðAð �?Ñ#ð	Að
 �S˜/Ð)Ñ*ðAð 
õAð+˜có +ð'˜#ó 'ð#˜có #ð,˜˜t™ó ,ð"˜T # s (™^ó "ð"˜%Ÿ.™.ó "ð"˜$ó "ð"˜e×0Ñ0ó "ð.˜Có .ð!=Ð9ð !=Àó !=ðF
à'ð
ð �?Ñ#ð
ð �S˜/Ð)Ñ*ð	
ð
 
ó
ð(1Ø-ð1Ø58ð1à	ó1ðØ-ðà	ˆc�?Ð"Ñ	#óð°$÷ r^   rß   c                   óR  ‡ — e Zd ZdZej
                  Zddhej                  £Z e	h d£«      Z
edededd fd„«       Z	 d/dej
                  ej                  j                   z  ded	edd
fˆ fd„Zdefˆ fd„Zd„ Zdefˆ fd„Zdee   fd„Zdej
                  fd„Zdej4                  fd„Zdefd„Zdefd„Zdee ef   fd„Z!defd„Z"de#fd„Z$dddee   d	ee ef   dee ef   fd„Z%ddde defˆ fd„Z&ddde de'fd„Z(ddded edefd!„Z)dddee   d	ee ef   defˆ fd"„Z*dddee   d	ee ef   ded
z  fd#„Z+defd$„Z,defd%„Z-defd&„Z.dddee   d	ee ef   de/d ee   ee ef   f   d
z  fd'„Z0dej
                  d
z  fd(„Z1d)ede/ed*f   d
z  fd+„Z2dedee   d
z  fd,„Z3d-e4defd.„Z5ˆ xZ6S )0ÚUserFunctionVariablez-Some unsupported user-defined global functionrÕ   Úis_constant>   ú
optree.opsútorch.utils._pytreeútorch.utils._cxx_pytreeÚoptreeÚvaluer®   r`   c                 óf   — t        |j                  t        j                  «      «        | ||¬«      S ©Nró   ©r&   rœ   r%   ÚCLOSURE_MATCH©ÚclsrV  r®   s      r_   Úcreate_with_sourcez'UserFunctionVariable.create_with_source=  s(   € ä�f×'Ñ'¬×(BÑ(BÓCÔDÙ�5 Ô(Ð(r^   r–   Nc                 óB  •— t        ‰| �  d	i |¤Ž t        |dd«      rd| _        nd| _        t	        |t
        j                  t        j                  j                  f«      s!t        d|› ddgt        j                  ¢¬«       t        j                  |d|«      }|| _        y )
NÚ_dynamo_marked_constantFTz1can't handle functions not implemented in python z2Dynamo can only handle functions defined in pythonz9Move usage of this function out of `torch.compile` region©Úgb_typeÚcontextÚexplanationÚhintsÚ_torchdynamo_inliner]   )râ   r�   rÛ   rQ  r±   rË   r   rb   ÚjitÚScriptFunctionr#   r   ÚINFERENCE_MODEr×   rØ   rÕ   )r}   rÕ   rQ  r–   rã   s       €r_   r�   zUserFunctionVariable.__init__B  sš   ø€ ô 	‰ÑÑ"˜6Ò"Ü�2Ð0°%Ô8à#ˆDÕà$ˆDÔô ˜"œu×1Ñ1´5·9±9×3KÑ3KÐLÔMÜØKØ˜$ØPàOðä&×5Ñ5ðõ	ô ×#Ñ# BÐ(=¸rÓBˆØˆ�r^   c                 óX   •— t        | t        «      r| j                  S t        ‰| �  «       S r�   )r9   rP  rÕ   râ   rû   ©r}   rã   s    €r_   rû   z'UserFunctionVariable.as_python_constanta  s%   ø€ Ü�$Ô,Ô-Ø—7‘7ˆNä‰wÑ)Ó+Ð+r^   c                 óf   — | j                   r| j                   j                  |«      S t        d«      ‚)NzBPython codegen not implemented for sourceless UserFunctionVariable©r®   Úreconstruct_pycoder  ©r}   Úcodegens     r_   rm  z'UserFunctionVariable.reconstruct_pycodeg  ó.   € Ø�;Š;Ø—;‘;×1Ñ1°'Ó:Ð:Ü!ØPó
ð 	
r^   c                 óX   •— t        | t        «      r| j                  S t        ‰| �  «       S r�   )r9   rP  rÕ   râ   Úget_real_python_backed_valuerj  s    €r_   rr  z1UserFunctionVariable.get_real_python_backed_valuen  s%   ø€ Ü�$Ô,Ô-Ø—7‘7ˆNÜ‰wÑ3Ó5Ð5r^   c                 ó   — g S r�   r]   rï   s    r_   rð   zUserFunctionVariable.self_argss  rñ   r^   c                 ó   — | j                   S r�   ©rÕ   rï   s    r_   r#  z!UserFunctionVariable.get_functionv  ó   € Ø�w‰wˆr^   c                 ó.   — | j                   j                  S r�   )rÕ   rl   rï   s    r_   r  zUserFunctionVariable.get_codey  s   € Ø�w‰w×ÑÐr^   c                 ó"   — t         j                  S r�   ©rË   r   rï   s    r_   Úpython_typez UserFunctionVariable.python_type|  ó   € Ü×!Ñ!Ð!r^   c                 ó4   — t        | j                  dd «      d uS )NÚ__self__)rÛ   rÕ   rï   s    r_   r!  zUserFunctionVariable.has_self  s   € Ü�t—w‘w 
¨DÓ1¸Ð=Ð=r^   c                 ó.   — | j                   j                  S r�   )rÕ   rÓ   rï   s    r_   r  z UserFunctionVariable.get_globals‚  s   € Ø�w‰w×"Ñ"Ð"r^   c                 ó\   ‡— ddl m} | j                  «       Št        ˆfd„|D «       «      ryy)Nr   )ÚBUILTIN_INLINE_WHEN_CALLEDc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr�   )Ú
startswith)Ú.0ÚdÚfilenames     €r_   ú	<genexpr>zHUserFunctionVariable.should_allow_nested_graph_breaks.<locals>.<genexpr>‰  s   øè ø€ ÒJ¨!ˆx×"Ñ" 1×%ÑJùs   ƒFT)Útorch._dynamo.trace_rulesr€  r  Úany)r}   r€  r…  s     @r_   rH  z5UserFunctionVariable.should_allow_nested_graph_breaks…  s)   ø€ ÝHà×$Ñ$Ó&ˆÜÓJÐ/IÔJÔJØØr^   c                 ón   — | j                   }|r&t        | t        j                  «      r| j                  }|S r�   )r®   r±   r   ÚUserMethodVariableÚ	source_fn)r}   r®   s     r_   rô   zUserFunctionVariable.get_source�  s+   € Ø—‘ˆá”j ¤y×'CÑ'CÔDØ—^‘^ˆFØˆr^   r»   rH   r•   c                 óº  — | j                   rt        d«      ‚| j                  }t        |t        «      st        d«      ‚|j                  j                  }| j                  «       }t        |||||«      }t        |||j                  «       | j                  j                  xs d}t        |«      t        | j                  j                  j                  «      k7  rAt        dt        |«      › dt        | j                  j                  j                  «      › �«      ‚t        t!        j"                  «       | j                  j                  j                  |«      D ]º  \  }	}
}|j                  j$                  }||v r||   }n�|rYt'        t)        |«      |	«      }t+        |d|
¬«      }	 t-        j.                  ||j0                  |«      }|j9                  |||«      }n4	 t-        j.                  ||j0                  «      }|j9                  d||«      }|||
<   Œ¼ |S # t2        $ r t5        j6                  «       }Y Œpw xY w# t2        $ r t5        j6                  «       }Y Œ^w xY w)	z—
        Assume `args` and `kwargs` are VariableTracker arguments for a call to
        this function, create new bindings for initial locals.
        z5bind_args should not be called on a constant functionz'Only supports regular Python functions.r]   zclosure length z# does not match co_freevars length Úcell_contents)Úfreevar_nameN)rQ  rÍ   rÕ   r±   r   r    r½   Úroot_txrô   r¬   rÃ   rl   rÒ   rŠ   Úco_freevarsr‰   rÌ   Úcountr¾   r,   r)   r(   r@   r²   r�  Ú
ValueErrorr   ÚDeletedVariableÚtrack_cell_existing)r}   r»   r•   r–   rÕ   r�  r®   rµ   rÅ   r¨   r¤   Úcellr¾   Úcell_varÚclosure_cellÚclosure_cell_contentsÚcontents_vars                    r_   Ú	bind_argszUserFunctionVariable.bind_args”  s/  € ð ×ÒÜ ØGóð ð "&§¡ˆä˜"œlÔ+ÜÐEÓFÐFØ—-‘-×'Ñ'ˆà—‘Ó"ˆÜ! " g¨v°t¸VÓDˆä�f˜f b§k¡kÔ2Ø—'‘'×%Ñ%Ò+¨ˆÜˆw‹<œ3˜tŸw™w×/Ñ/×;Ñ;Ó<Ò<Ü Ø!¤# g£, ð 0&Ü&)¨$¯'©'×*:Ñ*:×*FÑ*FÓ&GÐ%HðJóð ô  #Ü�O‰OÓ˜tŸw™w×/Ñ/×;Ñ;¸Wó 
ò "	$‰OˆC��tð "Ÿ=™=×5Ñ5ˆLØ�|Ñ#Ø'¨Ñ-‘áÜ,¬]¸6Ó-BÀCÓH�Ü(:Ø  /Àô)Ð%ð?Ü#2×#8Ñ#8Ø × 2Ñ 2Ð4Ió$�Lð (×;Ñ;Ø  $¨ó‘ð?Ü#2×#8Ñ#8¸À×ASÑASÓ#T�Lð (×;Ñ;¸DÀ$ÈÓU�à#ˆF�4ŠLðE"	$ðH ˆøô' "ò ?ä#,×#<Ñ#<Ó#>’Lð?ûô "ò ?ä#,×#<Ñ#<Ó#>’Lð?ús$   Æ%!HÇ H:ÈH7È6H7È:IÉIr“   r¤   c           
      ó˜  •— |dk(  rt         ‰| �  ||«      S |dk(  rK| j                  «       }|xr t        |d«      }t	        j
                  || j                  j                  |«      S |t        v r5t        j                  | |t        t        | j                  |«      «      ¬«      S | j                  «       }t        || j                  ||«      S )Nr)  Ú__get__©Úpy_type)râ   r7  rô   r'   r@   r²   rÕ   rœ  r3   r   ÚGetAttrVariablerÎ   rÛ   rÝ   ©r}   r“   r¤   r®   rã   s       €r_   r7  z UserFunctionVariable.var_getattrÙ  s·   ø€ ð �:ÒÜ‘7Ñ& r¨4Ó0Ð0Ø�YÒØ—_‘_Ó&ˆFØÒ=¤
¨6°9Ó =ˆFÜ"×(Ñ(¨¨T¯W©W¯_©_¸fÓEÐEØÔ+Ñ+Ü×,Ñ,Ø�d¤D¬°·±¸$Ó)?Ó$@ôð ð —‘Ó"ˆÜ˜b $§'¡'¨6°4Ó8Ð8r^   c                 óZ   — t        | j                  |«      }t        j                  ||«      S r�   )r@  rÕ   r@   r²   rA  s       r_   rB  z%UserFunctionVariable.call_obj_hasattré  s'   € ô ˜Ÿ™ $Ó'ˆÜ×$Ñ$ R¨Ó0Ð0r^   ÚobjÚownerc                 ó¸   — |j                   xr* t        |j                   | j                  j                  «      }t	        | j                  || j                   |¬«      S )N©r‹  r®   )r®   r'   rÕ   rZ   rŠ  )r}   r“   r¢  r£  r®   s        r_   Útp_descr_get_implz&UserFunctionVariable.tp_descr_get_implï  s@   € ð —‘ÒH¤
¨3¯:©:°t·w±w×7GÑ7GÓ HˆÜ! $§'¡'¨3¸$¿+¹+ÈfÔUÐUr^   c           
      óT  •— | j                   t        j                  j                  u r�	 |D �cg c]  }|j	                  «       ‘Œ }}|j                  «       D ��ci c]  \  }}||j	                  «       “Œ }}}t        j                  j                  |i |¤Žj                  }	t        j                  |	«      S | j                   t        j                  j                  u r‰	  t        j                  | j                   «      j                  |i |¤Ž}|j                  d   j	                  «       }t!        |t"        «      st%        dt'        |«      › �«      ‚t        j(                  |«      S | j                   t        j                  j,                  u r´	  t        j                  | j                   «      j                  |i |¤Ž}|j/                  «        |j                  d   }|j                  d   }t!        |t0        «      r|j	                  «       }t!        |t0        «      r|j	                  «       }t        j2                  ||«      S | j                   t        j                  j4                  j6                  u r0d	|j8                  _        t        j<                  j?                  d «      S | j                   t        j                  j@                  u �r" t        j                  | j                   «      j                  |i |¤Ž}|jB                  d
   }t!        |tD        «      sS|jG                  «       }d|jH                  › d�}tK        dd| jL                  › d|› d|› d�|g tN        jP                  ¢¬«       t!        |tR        «      s,|jU                  «       }d|› d�}tK        d| › |d|› d�dg¬«       |j                   }t        jV                  |t        j                  jX                  jZ                  ¬«      S | j\                  r't_        || j                   | jU                  «       ||«      S |j8                  j`                  jb                  st| j                   t        j                  jd                  jf                  u rDt        j                  jh                  jk                  |«      5  tl        ‰| �Ý  |||«      cd d d «       S tq        |j8                  j`                  dd «      dk(  r‘|j8                  j`                  jr                  sq	 d
dl:m;} |�h| j                   |jx                  |jz                  fv rDt        j                  jh                  js                  |«      5  tl        ‰| �Ý  |||«      cd d d «       S | j}                  |||«      }|�|S tl        ‰| �Ý  |||«      S c c}w c c}}w # t        $ r}
t        d|› d|› �«      |
‚d }
~
ww xY w# t*        $ r}
t        d|› d|› �«      |
‚d }
~
ww xY w# t*        $ r}
t        d|› d|› �«      |
‚d }
~
ww xY w# 1 sw Y   �Œ[xY w# t*        $ r d }Y �Œ!w xY w# 1 sw Y   ŒÄxY w)NzˆCannot convert patch_dynamo_config args/kwargs to constants. Please fix your call to patch_dynamo_config by using simpler inputs. args: ú
, kwargs: Úerror_on_graph_breakz)error_on_graph_break must be a bool, got z\Improper error_on_graph_break() call. Please fix your call to error_on_graph_break(). args: ÚfwdÚbwdzZImproper override_cudagraphs() call. Please fix your call to override_cudagraphs(). args: Tr   z=`nonstrict_trace` expects a callable, but got value of type <ú>zTypeError from user codezcall_function(ú, ú)r`  z(Applying `nonstrict_trace` to function <zk>; however, `nonstrict_trace` currently requires the function to be defined outside `torch.compile` region.zLimitation of `nonstrict_tracezmake sure definition of z is outside z`torch.compile` region©ÚkindÚdescriptionz!torch.utils.checkpoint.checkpoint)Ú	FSDPState)?rÕ   rb   Ú_dynamoÚpatch_dynamo_configrû   r·   Úchangesr   ÚDynamoConfigPatchVariabler=   ÚRuntimeErrorr©  r×   Ú	signatureÚbindÚ	argumentsr±   rL  rÍ   rÎ   ÚErrorOnGraphBreakVariableÚ	ExceptionÚoverride_cudagraphsÚapply_defaultsr@   ÚCudagraphOverrideVariableÚbytecode_debuggerÚ
breakpointr½   Ú_emit_debugger_breakpointrB   r´   Únonstrict_tracer•   rß   rz  rZ   r#   rV  r   Ú
USER_ERRORrP  r  ÚTorchInGraphFunctionVariableÚAllowInGraphKindÚNONSTRICT_TRACErQ  Úinvoke_and_store_as_constantÚcurrent_tracerÚ,unsafe_allow_externally_visible_side_effectsrc   Ú8_disable_side_effect_safety_checks_for_current_subtracerr¾   Ú2allow_externally_visible_side_effects_in_subtracerrâ   r>  rÛ   Úallow_side_effects_in_hopÚ/torch.distributed.fsdp._fully_shard._fsdp_stater²  Ú_pre_forwardÚ_post_forwardÚ_maybe_call_tree_map_fastpath)r}   r“   r•   r–   ÚargÚ
args_constÚkeyr­   Úkwargs_constrµ  ÚerQ   r©  rª  r«  Úfn_varÚtypÚmsgÚfn_namerÕ   r²  Útree_map_resultrã   s                         €r_   r>  z"UserFunctionVariable.call_functionû  sÓ  ø€ ð �7‰7”e—m‘m×7Ñ7Ñ7ðØBFÖG¸3˜c×4Ñ4Õ6ÐG�
ÐGàBHÇ,Á,Ã.÷ Ù6>°c¸3�C˜×/Ñ/Ó1Ñ1ð �ñ  ô  Ÿ-™-×;Ñ;ØðØ#/ñç‘'ð ô !×:Ñ:¸7ÓCÐCð �W‰WœŸ™×:Ñ:Ñ:ðØ7œ×)Ñ)¨$¯'©'Ó2×7Ñ7¸ÐHÀÑH�Ø',§¡Ø*ñ(ç$Ñ$Ó&ð %ô "Ð"6¼Ô=Ü(ØCÄDÐI]ÓD^ÐC_Ð`óð ô !×:Ñ:Ð;OÓPÐPð �W‰WœŸ™×9Ñ9Ñ9ðØ7œ×)Ñ)¨$¯'©'Ó2×7Ñ7¸ÐHÀÑH�Ø×$Ñ$Ô&Ø—o‘o eÑ,�Ø—o‘o eÑ,�Ü˜c¤?Ô3Ø×0Ñ0Ó2�CÜ˜c¤?Ô3Ø×0Ñ0Ó2�CÜ ×:Ñ:¸3ÀÓDÐDð �W‰WœŸ™×7Ñ7×BÑBÑBØ26ˆB�I‰IÔ/Ü×-Ñ-×4Ñ4°TÓ:Ð:à�W‰WœŸ™×5Ñ5Ò5Ø3”G×%Ñ% d§g¡gÓ.×3Ñ3°TÐD¸VÑDˆEØ—Z‘Z ‘]ˆFÜ˜fÔ&>Ô?Ø×(Ñ(Ó*�ØUÐVY×VbÑVbÐUcÐcdÐe�ÜØ6Ø,¨T¯Z©Z¨L¸¸4¸&ÀÀ6À(È!ÐLØ #ðÜ*×5Ñ5ðõ	ô ˜fÔ&:Ô;Ø Ÿ/™/Ó+�Ø@ÀÀ	ð  Juð  v�ÜØ<Ø#˜fØ #à2°7°)¸<ÐHØ0ðõ	ð —‘ˆBÜ×9Ñ9ØœŸ™×9Ñ9×IÑIôð ð ×ÒÜ/Ø�D—G‘G˜TŸ]™]›_¨d°Fóð ð
 —	‘	×(Ñ(×UÒUØ—‘Ü�}‰}×"Ñ"×[Ñ[ñ\ô —‘×+Ñ+×^Ñ^Øóñ ?ô ‘wÑ,¨R°°vÓ>÷?ñ ?ô �B—I‘I×,Ñ,¨m¸TÓBØ2ò3à—I‘I×,Ñ,×FÒFð!ÝUð Ð$¨¯©Ø×&Ñ&Ø×'Ñ'ð5ñ *ô —]‘]×/Ñ/×IÑIÈ"ÓMñ CÜ ™7Ñ0°°T¸6ÓB÷Cñ Cð ×<Ñ<¸RÀÀvÓNˆØÐ&Ø"Ð"ä‰wÑ$ R¨¨vÓ6Ð6ùòm Hùó øô 7ò Ü"ðà!˜F *¨V¨Hð6óð ð	ûðûô" ò Ü"ðØ!˜F *¨V¨Hð6óð ðûðûô  ò Ü"ðØ!˜F *¨V¨Hð6óð ðûðú÷h?ñ ?ûô ò !Ø “	ð!ú÷Cð Cús‘   ©V ­VÁV ÁVÁ4A V ÃBV9 ÆB2W ÒW?Ó3X ÕXÖV Ö	V6ÖV1Ö1V6Ö9	W×W×W×	W<×%W7×7W<×?X	ØXØXØX'c                 óˆ  — | j                  |||«      }|�|\  }}}n| }|}|}t        |t        «      xr |j                  «       }t        |t        «      xr |j	                  «       }	|s|	sy h |£t
        z
  ry t        |«      dk  ry |d   }
|d   }|dd  }|	r|j                  |||
||d¬«      S |j                  |||
||«      S )Nr   r   r<   r]   )Úkeypath)	Ú_rewrite_tree_map_only_callr±   rP  Ú_is_tree_map_functionÚ_is_tree_map_with_path_functionÚ_SUPPORTED_TREE_MAP_KWARGSrŠ   Úcall_tree_map_with_pathÚcall_tree_map)r}   r“   r•   r–   ÚrewriteÚtree_map_fnÚtree_map_argsÚtree_map_kwargsÚis_tree_mapÚis_tree_map_with_pathÚmap_fnÚ
first_treeÚrests                r_   rÑ  z2UserFunctionVariable._maybe_call_tree_map_fastpath|  s  € ð ×2Ñ2°2°t¸VÓDˆØÐØ:AÑ7ˆK˜©àˆKØ ˆMØ$ˆOô �{Ô$8Ó9ò 4Ø×1Ñ1Ó3ð 	ô
 �{Ô$8Ó9ò >Ø×;Ñ;Ó=ð 	ñ
 Ñ4ØØˆ_ÐÔ :Ò:ØÜˆ}Ó Ò!Øà˜qÑ!ˆØ" 1Ñ%ˆ
Ø˜Q˜RÐ ˆá Ø×5Ñ5ØØØØØØð 6ó ð ð ×+Ñ+ØØØØØóð r^   c                 ó€   — t        | j                  dd «      dk(  xr# t        | j                  dd «      | j                  v S )NrZ   Útree_mapr[   ©rÛ   rÕ   Ú_TREE_MAP_MODULESrï   s    r_   rß  z*UserFunctionVariable._is_tree_map_function°  s=   € ä�D—G‘G˜Z¨Ó.°*Ñ<ò OÜ˜Ÿ™ ¨tÓ4¸×8NÑ8NÐNð	
r^   c                 ó€   — t        | j                  dd «      dk(  xr# t        | j                  dd «      | j                  v S )NrZ   Útree_map_with_pathr[   rï  rï   s    r_   rà  z4UserFunctionVariable._is_tree_map_with_path_function¶  s>   € ä�D—G‘G˜Z¨Ó.Ð2FÑFò OÜ˜Ÿ™ ¨tÓ4¸×8NÑ8NÐNð	
r^   c                 ó€   — t        | j                  dd «      dk(  xr# t        | j                  dd «      | j                  v S )NrZ   Útree_map_onlyr[   rï  rï   s    r_   Ú_is_tree_map_only_functionz/UserFunctionVariable._is_tree_map_only_function¼  s=   € ä�D—G‘G˜Z¨Ó.°/ÑAò OÜ˜Ÿ™ ¨tÓ4¸×8NÑ8NÐNð	
r^   c           	      ó2  — | j                  «       sy t        |«      dk7  ry h |£t        z
  ry |\  }}}| j                  |«      }|€y | j	                  «       }|€y t        ||t        |dd «      ¬«      }	t        j                  ||«      }
|
|	|gt        |«      fS )Nr  r®   ró   )
rõ  rŠ   Ú_TREE_MAP_ONLY_SUPPORTED_KWARGSÚ_extract_tree_map_only_typesÚ_lookup_tree_map_functionÚTreeMapOnlyFunctionVariablerÛ   r@   r²   rˆ   )r}   r“   r•   r–   Útype_selectorrê  Útree_argÚallowed_typesÚtree_map_callableÚwrapped_map_fnÚtree_map_variables              r_   rÞ  z0UserFunctionVariable._rewrite_tree_map_only_callÂ  s¶   € ð ×.Ñ.Ô0Øäˆt‹9˜Š>ØØˆVˆ9Ô6Ò6Øà*.Ñ'ˆ�v˜xØ×9Ñ9¸-ÓHˆØÐ Øà ×:Ñ:Ó<ÐØÐ$Øä4ØØÜ˜6 8¨TÓ2ô
ˆô
 ,×1Ñ1°"Ð6GÓHÐØ  >°8Ð"<¼dÀ6»lÐJÐJr^   c                 óÎ   — t        | j                  dd «      }|sy t        j                  j	                  |«      }|€y t        |dd «      }t        |t        j                  «      r|S y )Nr[   rî  )rÛ   rÕ   r  Úmodulesr�   r±   rË   r   )r}   Úmodule_nameÚmodulerî  s       r_   rù  z.UserFunctionVariable._lookup_tree_map_functionè  sZ   € Ü˜dŸg™g |°TÓ:ˆÙØÜ—‘—‘ Ó-ˆØˆ>ØÜ˜6 :¨tÓ4ˆÜ�h¤× 2Ñ 2Ô3ØˆOØr^   Úselector.c                 óî   — |j                  «       sy 	 |j                  «       }| j                  |«      }|sy t	        d„ |D «       «      sy t        t        j                  |«      «      S # t        $ r Y y w xY w)Nc              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr�   )r±   rÎ   )rƒ  rØ  s     r_   r†  zDUserFunctionVariable._extract_tree_map_only_types.<locals>.<genexpr>  s   è ø€ Ò>¨S”:˜c¤4×(Ñ>ùó   ‚)Úis_python_constantrû   r  Ú_flatten_type_specÚallr¡   rˆ   Úfromkeys)r}   r  Ú	raw_valueÚ	flatteneds       r_   rø  z1UserFunctionVariable._extract_tree_map_only_typesô  sw   € ð ×*Ñ*Ô,Øð	Ø ×3Ñ3Ó5ˆIð ×+Ñ+¨IÓ6ˆ	ÙØÜÑ>°IÔ>Ô>ØÜ”T—]‘] 9Ó-Ó.Ð.øô #ò 	Ùð	ús   “A( Á(	A4Á3A4c                 ór  — t        |t        «      r|gS t        |t        «      r1g }|D ](  }| j                  |«      }|€ y |j	                  |«       Œ* |S t        t        dd «      }|�Pt        ||«      rDg }t        j                  |«      D ](  }| j                  |«      }|€ y |j	                  |«       Œ* |S y )NÚ	UnionType)	r±   rÎ   r¡   r
  ÚextendrÛ   rË   ÚtypingÚget_args)r}   rV  Ú	collectedÚentryÚflatÚ
union_types         r_   r
  z'UserFunctionVariable._flatten_type_spec  sÊ   € Ü�eœTÔ"Ø�7ˆNÜ�eœUÔ#Ø$&ˆIØò '�Ø×.Ñ.¨uÓ5�Ø�<ÙØ× Ñ  Õ&ð	'ð
 ÐÜœU K°Ó6ˆ
ØÐ!¤j°¸
Ô&CØˆIÜŸ™¨Ó/ò '�Ø×.Ñ.¨uÓ5�Ø�<ÙØ× Ñ  Õ&ð	'ð
 ÐØr^   rê   c                 ój   — t        |t        j                  «      xr | j                  |j                  u S r�   )r±   r   rP  rÕ   ©r}   rê   s     r_   Úis_python_equalz$UserFunctionVariable.is_python_equal  s*   € Ü˜%¤×!?Ñ!?Ó@ÒXÀTÇWÁWÐPU×PXÑPXÐEXÐXr^   )F)7rZ   r[   r\   rÑ   rË   r   Ú_cpython_typerß   Ú_nonvar_fieldsÚ	frozensetrð  Úclassmethodr   r]  rb   rf  rg  rL  r�   rû   rm  rr  r¢   r@   rð   r#  rK  r  rÎ   rz  r!  rˆ   rJ  r  rH  r   rô   rš  r7  rB   rB  r¦  r>  rÑ  rß  rà  rõ  r¡   rÞ  rù  rø  r
  Úobjectr  rM  rN  s   @r_   rP  rP  (  sw  ø„ Ù7ð ×&Ñ&€Mð 	Øðð 
"×	0Ñ	0ð€Nñ "ò	
óÐð ð) sð )°Cð )Ð<Rò )ó ð)ð "ñà×Ñ §¡×!9Ñ!9Ñ9ðð ðð ð	ð
 
õð>, Cõ ,ò
ð6¨cõ 6ð
˜4 Ñ0ó ð˜e×0Ñ0ó ð ˜%Ÿ.™.ó  ð"˜Tó "ð>˜$ó >ð#˜T # s (™^ó #ð°$ó ð˜Fó ðCà+ðCð �?Ñ#ðCð �S˜/Ð)Ñ*ð	Cð
 
ˆc�?Ð"Ñ	#óCðJ9Ø-ð9Ø58ð9à	õ9ð 1Ø-ð1Ø58ð1à	ó1ð
Và'ð
Vð ð
Vð ð	
Vð
 
ó
Vð7à'ð7ð �?Ñ#ð7ð �S˜/Ð)Ñ*ð	7ð
 
õ7ðB2à'ð2ð �?Ñ#ð2ð �S˜/Ð)Ñ*ð	2ð
 
˜4Ñ	ó2ðh
 tó 
ð
°ó 
ð
¨Dó 
ð$Kà'ð$Kð �?Ñ#ð$Kð �S˜/Ð)Ñ*ð	$Kð 	Ø"Ø�Ñ!Ø��oÐ%Ñ&ð(ñ	
ð
 ñ	ó$KðL
¨5×+=Ñ+=ÀÑ+Dó 
ð/Ø'ð/à	ˆt�SˆyÑ	˜DÑ	 ó/ð"¨ð °°T±
¸TÑ0Aó ð,Y Vð Y°÷ Yr^   rP  c                   óD   ‡ — e Zd ZdZdddee   deeef   defˆ fd„Zˆ xZ	S )ÚInspectSignatureVariablea¿  
    Variable tracker for inspect.signature with caching support.

    inspect.Signature is expensive to trace. When inspect.signature is called
    repeatedly on the same function during tracing, we cache the result to avoid
    retracing the signature construction each time. Although this is different
    from CPython behavior, it is safe to do so because inspect.signature does
    not change across different calls to the same function.
    r“   rH   r•   r–   r`   c                 ó^  •— t        |«      dk(  rŽ|sŒ|d   }d }t        |t        t        f«      r|j	                  «       }|�]||j
                  j                  v r|j
                  j                  |   S t        ‰| �!  |||«      }||j
                  j                  |<   |S t        ‰| �!  |||«      S rk   )	rŠ   r±   rP  rŠ  r#  r½   Úsignature_cacherâ   r>  )r}   r“   r•   r–   Ú
target_argÚ	cache_keyrµ   rã   s          €r_   r>  z&InspectSignatureVariable.call_function*  s¬   ø€ ô ˆt‹9˜Š>¡&Ø˜a™ˆJØˆIä˜*Ô';Ô=OÐ&PÔQØ&×3Ñ3Ó5�	àÐ$Ø §	¡	× 9Ñ 9Ñ9ØŸ9™9×4Ñ4°YÑ?Ð?ä™Ñ.¨r°4¸Ó@�Ø7=�—	‘	×)Ñ)¨)Ñ4Ø�ä‰wÑ$ R¨¨vÓ6Ð6r^   ©
rZ   r[   r\   rÑ   r¢   r@   rˆ   rJ  r>  rM  rN  s   @r_   r!  r!    sG   ø„ ñð7à'ð7ð �?Ñ#ð7ð �S˜/Ð)Ñ*ð	7ð
 
÷7ñ 7r^   r!  c                   óœ   ‡ — e Zd Zdhej                  £Zdeedf   dededdfˆ fd„Z	defd„Z
d	edefd
„Zdddee   deeef   defd„Zˆ xZS )rú  rý  .rê  r–   r`   Nc                 ó@   •— t        ‰| �  di |¤Ž || _        || _        y rƒ   )râ   r�   rý  rê  )r}   rý  rê  r–   rã   s       €r_   r�   z$TreeMapOnlyFunctionVariable.__init__I  s$   ø€ ô 	‰ÑÑ"˜6Ò"Ø*ˆÔØˆ�r^   c                 ó   — t         S r�   rÈ   rï   s    r_   rz  z'TreeMapOnlyFunctionVariable.python_typeS  ó   € ÜÐr^   Únodec                 ó€   ‡— 	 |j                  «       Št        ˆfd„| j                  D «       «      S # t        $ r Y yw xY w)NFc              3   ó6   •K  — | ]  }t        ‰|«      –— Œ y ­wr�   )Ú
issubclass)rƒ  ÚallowedÚ	node_types     €r_   r†  zDTreeMapOnlyFunctionVariable._matches_allowed_type.<locals>.<genexpr>[  s   øè ø€ ÒT°g”:˜i¨×1ÑTùs   ƒ)rz  r  rˆ  rý  )r}   r+  r0  s     @r_   Ú_matches_allowed_typez1TreeMapOnlyFunctionVariable._matches_allowed_typeV  sC   ø€ ð	Ø×(Ñ(Ó*ˆIô ÓTÀ×ASÑASÔTÓTÐTøô #ò 	Ùð	ús   ƒ1 ±	=¼=r“   rH   r•   c                 ó  — |s| j                   j                  |||«      S |d   }| j                  |«      r| j                   j                  |||«      S t        |«      dk7  s|r| j                   j                  |||«      S |S )Nr   r<   )rê  r>  r1  rŠ   )r}   r“   r•   r–   Úleafs        r_   r>  z)TreeMapOnlyFunctionVariable.call_function]  s}   € ñ Ø—;‘;×,Ñ,¨R°°vÓ>Ð>Ø�A‰wˆØ×%Ñ% dÔ+Ø—;‘;×,Ñ,¨R°°vÓ>Ð>Üˆt‹9˜Š>™Vð —;‘;×,Ñ,¨R°°vÓ>Ð>Øˆr^   )rZ   r[   r\   rß   r  r¡   rÎ   r@   r   r�   rz  rL  r1  r¢   rˆ   rJ  r>  rM  rN  s   @r_   rú  rú  C  s«   ø„ àðà	!×	0Ñ	0ð€Nð
à˜T 3˜YÑ'ðð  ðð ð	ð
 
õð˜Tó ðU¨/ð U¸dó Uðà'ðð �?Ñ#ðð �S˜/Ð)Ñ*ð	ð
 
÷r^   rú  c            
       ó¶  ‡ — e Zd Zej                  Zdej                  deee	f   ddde	ddf
ˆ fd„Z
dej                  fd	„Zdefd
„Zdefd„Zdefd„Zdefd„Zdefd„Z defd„ZeZd#d„Zdeee	f   fd„Zdefd„Zdddedefd„Zdddefd„Zdddedefd„Zdddefd„Zded   fd„Zdddeddfd„Z defd„Z!defd „Z"ddded!e#e   deeef   def
ˆ fd"„Z$ˆ xZ%S )$ÚLocalGeneratorObjectVariabler~   rÄ   Úinline_tracerrF   r–   r`   Nc                 óN   •— t        ‰| �  di |¤Ž || _        || _        || _        y rƒ   )râ   r�   r~   rÄ   r6  )r}   r~   rÄ   r6  r–   rã   s        €r_   r�   z%LocalGeneratorObjectVariable.__init__s  s+   ø€ ô 	‰ÑÑ"˜6Ò"ØˆŒ	Ø"ˆŒØ*ˆÕr^   c                 ó   — | j                   S r�   )r~   rï   s    r_   r  z%LocalGeneratorObjectVariable.get_code  s   € Ø�y‰yÐr^   c                 ó6   — | j                  «       j                  S r�   r  rï   s    r_   r  z)LocalGeneratorObjectVariable.get_filename‚  r	  r^   c                 ó6   — | j                  «       j                  S r�   r  rï   s    r_   r  z%LocalGeneratorObjectVariable.get_name…  r  r^   c                 ó   — t        d«      ‚)Nr#  r  rï   s    r_   r#  z)LocalGeneratorObjectVariable.get_functionˆ  s   € Ü! .Ó1Ð1r^   c                  ó   — y©NFr]   rï   s    r_   r!  z%LocalGeneratorObjectVariable.has_self‹  ó   € Ør^   c                 ó"   — | j                  «       S r�   )r  rï   s    r_   rZ   z%LocalGeneratorObjectVariable.__name__Ž  s   € Ø�}‰}‹Ðr^   c                 óV   — | j                   j                  › d| j                  «       › d�S )Nú(r®  )rã   rZ   r  rï   s    r_   Ú__str__z$LocalGeneratorObjectVariable.__str__‘  s'   € Ø—.‘.×)Ñ)Ð*¨!¨D¯M©M«OÐ+<¸AÐ>Ð>r^   c                 ó   — ddl m} ddlm}m} |j
                  } ||«      } ||«      } ||«      }|5  |5  |5  | j                  }	|	j                  st        || «      | _	        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)Ú save_and_restart_speculation_logÚ(temporarely_allow_writes_to_output_graph)Útorch._dynamo.side_effectsrD  Útorch._dynamo.symbolic_convertrE  rF  r“   r6  Úgenerator_exhaustedr;   Úremaining_itemsr   ÚListIteratorVariableÚreconstruct)
r}   ro  rD  rE  rF  r“   ÚsaveÚdisallowÚtempÚtracers
             r_   rL  z(LocalGeneratorObjectVariable.reconstruct–  sÇ   € ÝQ÷	
ð
 �Z‰ZˆÙ/°Ó3ˆÙ5°bÓ9ˆÙ7¸Ó;ˆàñ 	V�8ñ 	V˜Tñ 	VØ×'Ñ'ˆFØ×-Ò-Ü'6°r¸4Ó'@�Ô$Ü×*Ñ*¨4×+?Ñ+?Ó@×LÑLÈWÔU÷		V÷ 	V÷ 	V÷ 	Vñ 	Vú÷ 	Vð 	Vú÷ 	Vð 	Vús:   µC¸B8»AB,ÂB8ÂCÂ,B5Â1B8Â8C	Â=CÃCc                 ó   — | j                   S r�   ©rÄ   rï   s    r_   r  z(LocalGeneratorObjectVariable.get_globals¨  ó   € Ø�~‰~Ðr^   c                 ó"   — t         j                  S r�   )rË   ÚGeneratorTyperï   s    r_   rz  z(LocalGeneratorObjectVariable.python_type«  s   € Ü×"Ñ"Ð"r^   r“   rH   rÒ  c           	      ó&  — | j                   }| j                  «       rt        t        |«       	 |j	                  |«       |j                  «       S # t        $ r}d|_        |‚d }~wt        $ r+ t        ddddt        › d�gt        j                  ¢¬«       Y y t        $ rq}t        j                  j                   j#                  | j%                  «       «       d|_        |j(                  s!|j*                  s|xj,                  dz  c_        ‚ d }~ww xY w)	NTzinfinite generator detectedÚ z}Dynamo traced the YIELD_VALUE bytecode too many times. This could mean that we have attempted to trace an infinite generator.zLIf you are sure that your generator is not infinite, please report a bug at ú.r`  zA

Skipping frame due to graph break in a generator's next() call.)r6  Ú_is_generator_exhaustedr    ÚStopIterationÚpushÚinline_call_r   rI  r   r#   ÚPT2_ISSUE_TRACKER_URLr   rÄ  r$   rb   r³  Ú
eval_frameÚ	skip_coder  Ú
skip_frameÚ	one_graphr©  rÙ  )r}   r“   rÒ  rP  rÖ  s        r_   Úgen_send_ex2z)LocalGeneratorObjectVariable.gen_send_ex2®  sö   € ð ×#Ñ#ˆà×'Ñ'Ô)Ü$¤]°BÔ7ð	ð �K‰K˜ÔØ×&Ñ&Ó(Ð(øÜ ò 	Ø)-ˆFÔ&ØˆGûÜ%ò 	äØ5ØðIð cÔcxÐbyÐyzÐ{ðä&×1Ñ1ð÷	ô ò 	Ü�M‰M×$Ñ$×.Ñ.¨t¯}©}«Ô?ØˆAŒLØ—<’<¨×(?Ò(?Ø—’Ð^Ñ^•Øûð	ús*   ® A Á	DÁ	A!Á!4DÂDÂA,DÄDc                 óL   — | j                  |t        j                  d «      «      S r�   )rb  rB   r´   r÷   s     r_   Útp_iternext_implz-LocalGeneratorObjectVariable.tp_iternext_implÓ  s!   € à× Ñ  Ô%5×%<Ñ%<¸TÓ%BÓCÐCr^   r¤   c                 óŽ   — || j                  «       j                  v rt        j                  d«      S t        j                  d«      S ©NTF)rz  r)  rB   r´   ©r}   r“   r¤   s      r_   rB  z-LocalGeneratorObjectVariable.call_obj_hasattr×  s=   € ð �4×#Ñ#Ó%×.Ñ.Ñ.Ü#×*Ñ*¨4Ó0Ð0Ü×&Ñ& uÓ-Ð-r^   c                 ó   — | S r�   r]   r÷   s     r_   Útp_iter_implz)LocalGeneratorObjectVariable.tp_iter_implÞ  s   € àˆr^   Fc                  ó   — yr=  r]   rï   s    r_   rH  z=LocalGeneratorObjectVariable.should_allow_nested_graph_breaksã  r>  r^   Úexcc                 ó’   — | j                   }	 |j                  |d¬«       y # t        $ r}|j                  |«       Y d }~y d }~ww xY w)NT)Úset_context)r6  Ú_raise_exception_variabler   Úexception_handler)r}   r“   rk  rP  rÖ  s        r_   Ú_setup_exceptionz-LocalGeneratorObjectVariable._setup_exceptionæ  sJ   € ð ×#Ñ#ˆð	(Ø×,Ñ,¨S¸dÐ,ÕCøÜ ò 	(ð ×$Ñ$ Q×'Ñ'ûð	(ús   Ž" ¢	A«AÁAc                 ó„   — t         j                  dk  rd}nd}| j                  d u xs | j                  j                  |k(  S )Nr  r   r<   )r  r  r6  Úinstruction_pointer)r}   Ú
first_insts     r_   Ú_is_generator_just_startedz7LocalGeneratorObjectVariable._is_generator_just_startedñ  sG   € Ü×Ñ˜gÒ%Ø‰JàˆJà×Ñ $Ð&ò DØ×!Ñ!×5Ñ5¸ÑCð	
r^   c                 ó0   — t        | j                  dd«      S )NrI  F)rÛ   r6  rï   s    r_   rY  z4LocalGeneratorObjectVariable._is_generator_exhaustedû  s   € Ü�t×)Ñ)Ð+@À%ÓHÐHr^   r•   c                 ó‚  •— |dk(  rR| j                  «       r-t        |«      r"t        d„ |D «       «      st        t        |«       | j                  ||d   «      S |dk(  rñ| j                  }| j                  «       s| j                  «       r&d|_        t        j                  j                  d «      S 	 | j                  |t        j                  t        g «      «       t        j                   dk\  r?|j"                  j$                  dk(  r&d|_        t        j                  j                  d «      S 	 |j)                  «       rt        t*        |«       n¥|d	k(  r | j                  }	 | j                  |t        |«      d
k(  r|d   n|d   «       |j)                  «       }t5        dt6        fi «      }	 | j                  |t        j                  |g «      «       |j)                  «        t        t*        |«       |S t:        ‰| �y  ||||«      S # t&        $ r) d|_        t        j                  j                  d «      cY S w xY w# t&        $ r) d|_        t        j                  j                  d «      cY S t,        $ r' |j.                  €t1        d«      d ‚|j.                  cY S w xY w# t2        $ r ‚ w xY w# t9        |«      $ r Y |S w xY w)NÚsendc              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr�   )Úis_constant_none)rƒ  rÒ  s     r_   r†  z;LocalGeneratorObjectVariable.call_method.<locals>.<genexpr>  s   è ø€ ÒB°c˜3×/Ñ/×1ÑBùr  r   ÚcloseT)r  é   ÚCALL_INTRINSIC_1z6expected symbolic_result to be set after StopIterationÚthrowr  r<   Ú__InternalThrowException)rt  rŠ   r  r    r    rb  r6  rY  rI  r   rB   r´   rp  ÚExceptionVariableÚGeneratorExitr  r  Únext_instructionÚopnamer   r\  r·  r   Úsymbolic_resultrÍ   r   rÎ   r¼  r   râ   r  )	r}   r“   r¤   r•   r–   rP  ÚretvalÚexc_typerã   s	           €r_   r  z(LocalGeneratorObjectVariable.call_methodþ  s§  ø€ ð �6Š>ð ×.Ñ.Ô0´S¸´Yô ÑB¸TÔBÔBÜ,¬Y¸Ô;Ø×$Ñ$ R¨¨a©Ó1Ð1Ø�WŠ_ð ×'Ñ'ˆFØ×.Ñ.Ô0°D×4PÑ4PÔ4RØ-1�Ô*Ü ×1Ñ1×8Ñ8¸Ó>Ð>ð?Ø×%Ñ%Øœ	×3Ñ3´MÀ2ÓFôô( ×$Ñ$¨Ò/Ø×/Ñ/×6Ñ6Ð:LÒLà15�FÔ.Ü$×5Ñ5×<Ñ<¸TÓBÐBð.ð ×&Ñ&Ô(Ü,¬\¸2Ô>øð �WŠ_ð ×'Ñ'ˆFðð
 ×%Ñ% b´S¸³YÀ!²^¨$¨qª'ÈÈaÉÔQð
 ×(Ñ(Ó*ˆFô| Ð6¼¸ÀbÓIˆHð?Ø×%Ñ% b¬)×*EÑ*EÀhÐPRÓ*SÔTØ×#Ñ#Ô%ô
 )¬°vÔ>ØˆMä‰wÑ" 2 t¨T°6Ó:Ð:øôi )ò ?à-1�Ô*Ü ×1Ñ1×8Ñ8¸Ó>Ò>ð?ûô )ò ?Ø-1�Ô*Ü ×1Ñ1×8Ñ8¸Ó>Ò>Ü,ò 	.ð
 ×)Ñ)Ð1Ü(ØPóàð ð ×-Ñ-Ò-ð	.ûô2 %ò àðûôN 1°Ó:ò àð ˆMðúsI   Â1A;H Ä. H; Å!(J Æ,6J, È/H8È7H8È;/JÉ,,JÊJÊJ)Ê,J>Ê=J>©ro  rE   r`   N)&rZ   r[   r\   rË   rU  r  rK  rˆ   rJ  r   r�   r  r  r  r   r#  rL  r!  rB  Ú__repr__rL  r  rÎ   rz  r@   rb  rd  rB   rB  ri  r	   rH  rp  rt  rY  r¢   r  rM  rN  s   @r_   r5  r5  o  sÒ  ø„ à×'Ñ'€Mð
+à�n‰nð
+ð ˜˜S˜‘>ð
+ð @ð	
+ð
 ð
+ð 
õ
+ð˜%Ÿ.™.ó ð+˜có +ð'˜#ó 'ð2˜eó 2ð˜$ó ð˜#ó ð?˜ó ?ð €HóVð$˜T # s (™^ó ð#˜Tó #ð#Ø-ð#Ø4Cð#à	ó#ðJDÐ#>ð DÀ?ó Dð.Ø-ð.Ø58ð.à	ó.ðÐ:ð ¸ó ð
°'¸%±.ó ð	(Ø-ð	(Ø4Cð	(à	ó	(ð
¨Dó 
ðI¨ó Iðt;à'ðt;ð ðt;ð �?Ñ#ð	t;ð
 �S˜/Ð)Ñ*ðt;ð 
÷t;ñ t;r^   r5  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)rZ   r[   r\   rÑ   r]   r^   r_   r‰  r‰  µ  s   „ òr^   r‰  c            	       óô   ‡ — e Zd ZdZdefd„Zedœdedededdfˆ fd	„Z	d
e
defd„Zdej                  fd„Zdee
ef   fd„Zdefd„Zdddee   dee
ef   ddfd„Zdddee   dee
ef   defd„Zdefd„Zˆ xZS )ÚLocalGeneratorFunctionVariablezxfunctions that behaves like iterators

    .. note::

        This is a wrapper around (Nested)UserFunctionVariable
    r`   c                 ó"   — t         j                  S r�   ry  rï   s    r_   rz  z*LocalGeneratorFunctionVariable.python_typeÊ  r{  r^   )Úgenerator_clsÚvtr�  r–   Nc                ó@   •— t        ‰| �  di |¤Ž || _        || _        y rƒ   )râ   r�   rŽ  r�  )r}   rŽ  r�  r–   rã   s       €r_   r�   z'LocalGeneratorFunctionVariable.__init__Í  s$   ø€ ô 	‰ÑÑ"˜6Ò"ØˆŒØ*ˆÕr^   r¤   c                 óv   — || j                   j                  v rt        | |«      S t        | j                  |«      S r�   )rã   r)  rÛ   rŽ  )r}   r¤   s     r_   Ú__getattr__z*LocalGeneratorFunctionVariable.__getattr__Ø  s2   € Ø�4—>‘>×*Ñ*Ñ*Ü˜4 Ó&Ð&Ü�t—w‘w Ó%Ð%r^   c                 ó6   — | j                   j                  «       S r�   )rŽ  r  rï   s    r_   r  z'LocalGeneratorFunctionVariable.get_codeÞ  ó   € Ø�w‰w×ÑÓ!Ð!r^   c                 ó6   — | j                   j                  «       S r�   )rŽ  r  rï   s    r_   r  z*LocalGeneratorFunctionVariable.get_globalsá  s   € Ø�w‰w×"Ñ"Ó$Ð$r^   c                 ó6   — | j                   j                  «       S r�   )rŽ  r!  rï   s    r_   r!  z'LocalGeneratorFunctionVariable.has_selfä  r“  r^   r“   rH   r•   rG   c                 ó8   — ddl m}  |j                  || ||«      S )Nr   )rG   )rH  rG   Úbuild_inline_tracer)r}   r“   r•   r–   rG   s        r_   Ú_build_inline_tracerz3LocalGeneratorFunctionVariable._build_inline_tracerç  s*   € õ 	Qà@Ð,×@Ñ@ØØØØó	
ð 	
r^   c                 óÐ  — t        | j                  j                  «       «      s2t        dt	        | j                  j                  «       «      dddg¬«       | j                  |t        |«      |«      }| j                  j                  «       }| j                  j                  «       }t        j                  dk\  r|j                  «        | j                  |||| j                  ¬«      S )Nz'non-generator contextlib.contextmanagerzvCannot compile function decorated with `@contextlib.contextmanager` that is not a generator, i.e. does not use `yield`z5Use `yield` in the function body instead of `return`.z2Remove the `@contextlib.contextmanager` decorator.r`  r  ró   )r   rŽ  r  r#   rJ  r˜  r¢   r  r  r  r\  r�  r®   )r}   r“   r•   r–   r6  r~   rÄ   s          r_   r>  z,LocalGeneratorFunctionVariable.call_functionö  sÌ   € ô ˜DŸG™G×,Ñ,Ó.Ô/ÜØAÜ˜DŸG™G×,Ñ,Ó.Ó/ð.ð LØHðõ	ð ×1Ñ1°"´d¸4³jÀ&ÓIˆØ�w‰w×ÑÓ!ˆØ—G‘G×'Ñ'Ó)ˆ	ä×Ñ˜wÒ&Ø×&Ñ&Ô(à×!Ñ!ØØØØ—;‘;ð	 "ó 
ð 	
r^   c                 ó6   — | j                   j                  «       S r�   )rŽ  rr  rï   s    r_   rr  z;LocalGeneratorFunctionVariable.get_real_python_backed_value  s   € Ø�w‰w×3Ñ3Ó5Ð5r^   )rZ   r[   r\   rÑ   rÎ   rz  r5  rß   r   r�   rJ  r‘  rË   rK  r  rˆ   r  rL  r!  r¢   r@   r˜  r>  r  rr  rM  rN  s   @r_   r‹  r‹  Â  s  ø„ ñð"˜Tó "ð ;ò		+à$ð	+ð ð		+ð
 ð	+ð 
õ	+ð& ð &¨ó &ð"˜%Ÿ.™.ó "ð%˜T # s (™^ó %ð"˜$ó "ð
à'ð
ð �?Ñ#ð
ð �S˜/Ð)Ñ*ð	
ð
 
)ó
ð
à'ð
ð �?Ñ#ð
ð �S˜/Ð)Ñ*ð	
ð
 
ó
ð@6¨f÷ 6r^   r‹  c                   ó\   ‡ — e Zd ZdZdededdfˆ fd„Zddd	ee   de	e
ef   dd
fˆ fd„Zˆ xZS )Ú3FunctionDecoratedByContextlibContextManagerVariablezm
    .. note::

        This is only used when the function is annotated with @contextlib.contextmanager
    rŽ  r–   r`   Nc                 ó2   •— t        ‰| �  |fdt        i|¤Ž y )Nr�  )râ   r�   r‰  )r}   rŽ  r–   rã   s      €r_   r�   z<FunctionDecoratedByContextlibContextManagerVariable.__init__#  s%   ø€ Ü‰ÑØñ	
äNð	
ð ó	
r^   r“   rH   r•   rF   c                 óÂ   •— t         ‰| �  |||«      }t        |t        j                  j
                  j                  «      st        dt        |«      › �«      ‚d|_	        |S )Nz5expected InliningGeneratorInstructionTranslator, got T)
râ   r˜  r±   rb   r³  Úsymbolic_convertrF   rÍ   rÎ   Úis_generator_from_ctx_manager)r}   r“   r•   r–   rP  rã   s        €r_   r˜  zHFunctionDecoratedByContextlibContextManagerVariable._build_inline_tracer*  sb   ø€ ô ‘Ñ-¨b°$¸Ó?ˆÜØÜ�M‰M×*Ñ*×QÑQô
ô !ØGÌÈVËÀ~ÐVóð ð 04ˆÔ,Øˆr^   )rZ   r[   r\   rÑ   rß   r   r�   r¢   r@   rˆ   rJ  r˜  rM  rN  s   @r_   rœ  rœ    sb   ø„ ñð
Ð3ð 
¸sð 
Àtõ 
ðà'ðð �?Ñ#ðð �S˜/Ð)Ñ*ð	ð
 
2÷ñ r^   rœ  c                   ó  ‡ — e Zd ZdZej
                  Z	 ddedef   de	de
dz  deddf
ˆ fd	„Zdefd
„Zdedeeef   fd„Zdee	   fd„Zdeej
                     fd„Zdddee	   deee	f   de	fˆ fd„Zdddede	fˆ fd„Zdefd„Zˆ xZS )rŠ  z$Some unsupported user-defined methodNrÕ   .r¢  r‹  r–   r`   c                 ó®   •— t        ‰| �  dd|i|¤Ž || _        || _        |€3|j	                  d«      �!t        |j	                  d«      d«      | _        y y y )NrÕ   r®   Ú__func__r]   )râ   r�   r¢  r‹  r�   r'   )r}   rÕ   r¢  r‹  r–   rã   s        €r_   r�   zUserMethodVariable.__init__F  s^   ø€ ô 	‰ÑÑ)˜BÐ) &Ò)ØˆŒØ"ˆŒð Ð §¡¨HÓ!5Ð!AÜ'¨¯
©
°8Ó(<¸jÓIˆD�Nð "BÐr^   c                 óh   — | j                   j                  › d| j                  › d| j                  › d�S )NrA  r­  r®  )rã   rZ   rÕ   r¢  rï   s    r_   r‡  zUserMethodVariable.__repr___  s.   € Ø—.‘.×)Ñ)Ð*¨!¨D¯G©G¨9°B°t·x±x°jÀÐBÐBr^   r“   c                 ó   — | j                   r2|j                  j                  | j                   «      }t        |«      dfS ddlm}  ||| j                  «      \  }}t        | j                  «      }||z  }|dk(  rd}||fS )NFr<   )Úgeneric_hash_impléÿÿÿÿr(  )r®   r½   Úresolve_source_valueÚhashrè   r¦  r¢  rÕ   )r}   r“   Úreal_valr¦  Ú	self_hashÚ	self_fakeÚ	func_hashÚhs           r_   Ú	hash_implzUserMethodVariable.hash_implb  sw   € ð �;Š;Ø—y‘y×5Ñ5°d·k±kÓBˆHÜ˜“> 5Ð(Ð(å6á0°°T·X±XÓ>Ñˆ	�9Ü˜Ÿ™“Mˆ	Ø˜	Ñ!ˆØ�Š7ØˆAØ�)ˆ|Ðr^   c                 ó   — | j                   gS r�   ©r¢  rï   s    r_   rð   zUserMethodVariable.self_argsr  ó   € Ø—‘ˆzÐr^   c                 ó"   — t         j                  S r�   ©rË   Ú
MethodTyperï   s    r_   rz  zUserMethodVariable.python_typeu  ó   € Ü×ÑÐr^   rH   r•   c                 ó2  •— ddl m}m}  || j                  «      rjg | j	                  «       ¢|¢}t        j                  | j                  t
        j                  j                  j                  ¬«      }|j                  |||«      S  || j                  «      rjg | j	                  «       ¢|¢}t        j                  | j                  t
        j                  j                  j                  ¬«      }|j                  |||«      S |j                  j                  «       r¦t        | j                  t
        j                   «      r‚t#        | j                  dd«      }|�|j%                  d«      r|dk7  s| j&                  r°| j                  j)                  || j                  j*                  t-        |«      || j&                  ¬«      S t.        �c| j                  t.        j0                  j2                  u r=t        j4                  | j                  «      j                  || j                  g|¢|«      S | j&                  rQt#        | j                  j6                  | j                  j*                  «      }	t9        ||	| j;                  «       ||«      S t<        ‰
| �)  |||«      S )	Nr   )Úis_leaf_functionÚis_nonstrict_trace_callabler¯  r[   rW  z	torch.nn.ztorch.nn.utils.parametrize)Úconstant)Útrace_rulesr¸  r¹  rÕ   rð   r   rÅ  rb   rÆ  rÇ  r>  ÚLEAF_FUNCTIONr½   Úis_root_tracerr±   r¢  ÚNNModuleVariablerÛ   r‚  rQ  r  rZ   r¢   rD   ÚFSDPParamGroupÚuse_training_stateÚTorchCtxManagerClassVariablerV  rÈ  r  râ   )r}   r“   r•   r–   r¸  r¹  Ú	call_argsÚvarÚmodule_attrrÕ   rã   s             €r_   r>  z UserMethodVariable.call_functionx  s  ø€ ÷ 	Pá& t§w¡wÔ/Ø2˜$Ÿ.™.Ó*Ð2¨TÐ2ˆIÜ×8Ñ8Ø—‘œiŸo™o×>Ñ>×NÑNôˆCð ×$Ñ$ R¨°FÓ;Ð;á˜DŸG™GÔ$Ø2˜$Ÿ.™.Ó*Ð2¨TÐ2ˆIÜ×8Ñ8Ø—‘œiŸo™o×>Ñ>×LÑLôˆCð ×$Ñ$ R¨°FÓ;Ð;ð �9‰9×#Ñ#Ô%¬*Ø�H‰H”i×0Ñ0ô+
ô " $§'¡'¨<¸Ó<ˆKð Ð'Ø×*Ñ*¨;Ô7ØÐ#?Ò?Ø×#Ò#à—x‘x×+Ñ+Ø˜Ÿ™×(Ñ(¬$¨t«*°fÀt×GWÑGWð ,ó ð ô Ð)Ø—‘Ô,×;Ñ;×NÑNÑNä×9Ñ9¸$¿'¹'ÓB×PÑPØ�T—X‘XÐ% Ð% vóð ð ×ÒÜ˜Ÿ™Ÿ™¨¯©×)9Ñ)9Ó:ˆBÜ/°°B¸¿¹»ÈÈvÓVÐVÜ‰wÑ$ R¨¨vÓ6Ð6r^   r¤   c                 ó¦   •— |dk(  r| j                   S |dk(  r+t        j                  || j                  | j                  «      S t
        ‰| �  ||«      S )Nr}  r£  )r¢  r@   r²   rÕ   r‹  râ   r7  ©r}   r“   r¤   rã   s      €r_   r7  zUserMethodVariable.var_getattr¼  sO   ø€ ð �:ÒØ—8‘8ˆOØ�:Òô #×(Ñ(¨¨T¯W©W°d·n±nÓEÐEÜ‰wÑ" 2 tÓ,Ð,r^   c                 ó   — | j                   S r�   ru  rï   s    r_   rr  z/UserMethodVariable.get_real_python_backed_valueÈ  rv  r^   r�   )rZ   r[   r\   rÑ   rË   rµ  r  r   r   r@   r   r�   rJ  r‡  r¡   ÚintrL  r¯  r¢   rð   rÎ   rz  rˆ   r>  r7  rr  rM  rN  s   @r_   rŠ  rŠ  @  s  ø„ Ù.ð ×$Ñ$€Mð $(ñ	Jà�S˜#�XÑðJð ðJð ˜D‘=ð	Jð
 ðJð 
õJð2C˜#ó Cð˜Cð  E¨#¨t¨)Ñ$4ó ð ˜4 Ñ0ó ð ˜T %×"2Ñ"2Ñ3ó  ðB7à'ðB7ð �?Ñ#ðB7ð �S˜/Ð)Ñ*ð	B7ð
 
õB7ðH
-Ø-ð
-Ø58ð
-à	õ
-ð¨c÷ r^   rŠ  c                   ód   ‡ — e Zd Zdedddeddfˆ fd„Zdd	d
ee   dee	ef   defˆ fd„Z
dd„Zˆ xZS )ÚWrappedUserMethodVariableÚwrappedrb  rI   r–   r`   Nc                 ó´   •— |j                  dd «       |j                  dd «       t        ‰| �  |j                  |j                  fi |¤Ž || _        || _        y )NrÕ   r¢  )r›   râ   r�   rÕ   r¢  rË  rb  ©r}   rË  rb  r–   rã   s       €r_   r�   z"WrappedUserMethodVariable.__init__Í  sK   ø€ ð 	�
‰
�4˜ÔØ�
‰
�5˜$ÔÜ‰Ñ˜Ÿ™ W§[¡[Ñ;°FÒ;ØˆŒØˆ�r^   r“   rH   r•   c                 óR  •— t         j                  rNt        t        j                  «      }|j                  || j                  | j                  gt        |«      z   |«      S | j                  j                  |«       t        ‰| �  |||«      }| j                  j                  |«       |S r�   ©r   Únested_graph_breaksrP  r   Ú_fn_with_ctxr>  rb  rË  r¢   Úenterrâ   Úexit©r}   r“   r•   r–   Ú
wrapper_fnrµ   rã   s         €r_   r>  z'WrappedUserMethodVariable.call_functionÙ  óŒ   ø€ ô ×%Ò%Ü-¬i×.DÑ.DÓEˆJØ×+Ñ+Ø�T—\‘\ 4§<¡<Ð0´4¸³:Ñ=¸vóð ð 	�‰×Ñ˜2ÔÜ‘Ñ& r¨4°Ó8ˆØ�‰×Ñ˜"ÔØˆr^   c                 óŒ   ‡ ‡— ‰j                  ˆˆ fd„«        ‰‰ j                  «       ‰j                  t        dd«      «       y )Nc                  ó(   •—  ‰ ‰j                   «      S r�   ©rb  ©ro  r}   s   €€r_   r/  z7WrappedUserMethodVariable.reconstruct.<locals>.<lambda>ê  ó   ø€ ¡g¨d¯l©lÓ&;€ r^   r<   F©Úadd_push_nullrË  Úextend_outputr   rn  s   ``r_   rL  z%WrappedUserMethodVariable.reconstructé  ó4   ù€ Ø×ÑÔ;Ô<Ù�—‘ÔØ×ÑÔ2°1°eÓ<Õ=r^   r†  )rZ   r[   r\   rŠ  r   r�   r¢   r@   rˆ   rJ  r>  rL  rM  rN  s   @r_   rÊ  rÊ  Ì  sm   ø„ ð
à#ð
ð +ð
ð ð	
ð
 
õ
ðà'ðð �?Ñ#ðð �S˜/Ð)Ñ*ð	ð
 
õ÷ >r^   rÊ  c                   ód   ‡ — e Zd Zdedddeddfˆ fd„Zdd	d
ee   dee	ef   defˆ fd„Z
dd„Zˆ xZS )ÚWrappedUserFunctionVariablerË  rb  rI   r–   r`   Nc                 óz   •— |j                  dd «       t        ‰| �  |j                  fi |¤Ž || _        || _        y )NrÕ   )r›   râ   r�   rÕ   rË  rb  rÍ  s       €r_   r�   z$WrappedUserFunctionVariable.__init__ð  s7   ø€ ð 	�
‰
�4˜ÔÜ‰Ñ˜Ÿ™Ñ. vÒ.ØˆŒØˆ�r^   r“   rH   r•   c                 óR  •— t         j                  rNt        t        j                  «      }|j                  || j                  | j                  gt        |«      z   |«      S | j                  j                  |«       t        ‰| �  |||«      }| j                  j                  |«       |S r�   rÏ  rÔ  s         €r_   r>  z)WrappedUserFunctionVariable.call_functionû  rÖ  r^   c                 óŒ   ‡ ‡— ‰j                  ˆˆ fd„«        ‰‰ j                  «       ‰j                  t        dd«      «       y )Nc                  ó(   •—  ‰ ‰j                   «      S r�   rÙ  rÚ  s   €€r_   r/  z9WrappedUserFunctionVariable.reconstruct.<locals>.<lambda>  rÛ  r^   r<   FrÜ  rn  s   ``r_   rL  z'WrappedUserFunctionVariable.reconstruct  rß  r^   r†  )rZ   r[   r\   rP  r   r�   r¢   r@   rˆ   rJ  r>  rL  rM  rN  s   @r_   rá  rá  ï  sm   ø„ ð	à%ð	ð +ð	ð ð		ð
 
õ	ðà'ðð �?Ñ#ðð �S˜/Ð)Ñ*ð	ð
 
õ÷ >r^   rá  c                 ó  ‡— dt         dt        fˆfd„}|D �cg c]
  } ||«      ‘Œ }}|j                  «       D ��ci c]  \  }}| ||«      “Œ }}} ||i |¤Ž}	| j                  j	                  |	‰t        ‰«      ¬«      S c c}w c c}}w )NÚxr`   c           
      óÀ  •— | j                  «       rt        d| «      j                  «       S t        | t        «      r@| j
                  �(t        | j                  t        j                  «      «       | j                  S 	 | j                  «       S # t        $ rG t        dd‰› dt        | «      j                  › �dt        | «      j                  › d‰› d�dd	g¬
«       Y y w xY w)NrO   z1assume_constant_result argument conversion failedz	function z, variable type z Cannot convert argument of type z# to a Python constant for function zm marked with torch._dynamo.assume_constant_result. The variable tracker does not support constant conversion.z>Remove torch._dynamo.assume_constant_result from this functionzIEnsure all arguments passed to the function can be converted to constantsr`  )Ú	is_tensorr   Úget_real_valuer±   rC   r®   r&   rœ   r%   ÚID_MATCHrV  rû   r=   r#   rÎ   rZ   )rç  r¤   s    €r_   Úconvertz-invoke_and_store_as_constant.<locals>.convert  sÙ   ø€ Ø�;‰;Œ=ÜÐ(¨!Ó,×;Ñ;Ó=Ð=Ü�aÔ2Ô3Ø�x‰xÐ#Ü˜aŸl™l¬<×+@Ñ+@ÓAÔBØ—7‘7ˆNð	Ø×'Ñ'Ó)Ð)øÜ2ò 	ÜØKØ# D 6Ð)9¼$¸q»'×:JÑ:JÐ9KÐLØ>¼tÀA»w×?OÑ?OÐ>Pð Q Ø $˜vð &MðNð UØ_ð÷
ð	ús   Á=B ÂACÃCró   )r@   r   r·   r½   Úregister_attr_or_moduler*   )
r“   rÕ   r¤   r•   r–   rì  rç  r¸   r¹   Úress
     `       r_   rÈ  rÈ    s•   ø€ ð”?ð ¤sõ ð, !%Ö%˜1‰G�A�JÐ%€DÐ%Ø(.¯©«×7¡  1ˆa‘˜“‰mÐ7€FÑ7Ù
ˆdÐ
�fÑ
€CØ�9‰9×,Ñ,ØØÜ˜dÓ#ð -ó ð ùò &ùÛ7s
   ˜B¼Bc                   ó,  ‡ — e Zd Zdhej                  £Z	 d#dededeeef   dedz  dedz  dedz  dedz  d	ed
dfˆ fd„Z	d
e
e   fd„Zd
ej                  fd„Zded
dfˆ fd„Zd
ej                   fd„Zd
eej                     fd„Zd#dee   dz  d
ej                  fd„Zd
efd„Zdee   d
ej                  fd„Zddded
efˆ fd„Zd
efd„Zddded
efˆ fd„Zddded
efˆ fd„Zd
efd„Zd
eeef   fd„Z ddd e
e   d	eeef   d
eeef   fd!„Z!d$d"„Z"ˆ xZ#S )%ÚNestedUserFunctionVariablerÄ   NrÚ  r~   r…   r‡   rÅ   Ú
wrapped_fnr–   r`   c                 óJ  •— |j                  d«      €|j                  t        «       ¬«       t        ‰	| �  di |¤Ž t        |j                  «       t        «      s%t        dt        |j                  «       «      › �«      ‚t        |j                  «       t        j                  «      s%t        dt        |j                  «       «      › �«      ‚t        |t        «      st        dt        |«      › �«      ‚|| _        || _        || _        || _        || _        || _        || _        y )Nr-  r,  zfn_name must be a str, got zcode must be a CodeType, got zf_globals must be a dict, got r]   )r�   Úupdater>   râ   r�   r±   rû   rJ  rÍ   rÎ   rË   rK  rˆ   rÚ  r~   rÄ   r…   r‡   rÅ   rñ  )
r}   rÚ  r~   rÄ   r…   r‡   rÅ   rñ  r–   rã   s
            €r_   r�   z#NestedUserFunctionVariable.__init__>  s  ø€ ð �:‰:�oÓ&Ð.Ø�M‰MÔ(<Ó(>ˆMÔ?Ü‰ÑÑ"˜6Ò"Ü˜'×4Ñ4Ó6¼Ô<Ü Ø-¬d°7×3MÑ3MÓ3OÓ.PÐ-QÐRóð ô ˜$×1Ñ1Ó3´U·^±^ÔDÜ Ø/´°T×5LÑ5LÓ5NÓ0OÐ/PÐQóð ô ˜)¤TÔ*Ü Ð#AÄ$ÀyÃ/ÐARÐ!SÓTÐTØˆŒØˆŒ	Ø"ˆŒØ ˆŒØ$ˆŒØˆŒØ2<ˆ�r^   c                 ó   — g S r�   r]   rï   s    r_   rð   z$NestedUserFunctionVariable.self_args`  rñ   r^   c                 ó"   — | j                  «       S r�   )r#  rï   s    r_   rû   z-NestedUserFunctionVariable.as_python_constantc  s   € Ø× Ñ Ó"Ð"r^   r“   r@   c                 óÊ   •— 	 t         ‰| �  |«      S # t        $ rG}t        dd| j                  j                  «       › d|› �dg t        j                  ¢¬«       Y d }~y d }~ww xY w)Nz8repr() on nested function with non-constructible closurezrepr() on nested function z: z‚Dynamo could not safely evaluate repr() for this nested function because it could not reconstruct its closure as Python constants.r`  )râ   rü   rY   r#   rÚ  rû   r   ÚSUPPORTABLE)r}   r“   rÖ  rã   s      €r_   rü   z$NestedUserFunctionVariable.repr_implf  so   ø€ ð
	Ü‘7Ñ$ RÓ(Ð(øÜ%ò 	ÜØRØ4°T·\±\×5TÑ5TÓ5VÐ4WÐWYÐZ[ÐY\Ð]ð'ð 7Ô)×5Ñ5Ð6÷ò ûð	ús   ƒ ’	A"›=AÁA"c                 ó6   — | j                   j                  «       S r�   )r~   rû   rï   s    r_   r  z#NestedUserFunctionVariable.get_codes  s   € Ø�y‰y×+Ñ+Ó-Ð-r^   c                 ó"   — t         j                  S r�   ry  rï   s    r_   rz  z&NestedUserFunctionVariable.python_typev  r{  r^   Ú_convertingc                 ó   — ddl m} t        | «      }|€
t        «       }||v rt	        d«      ‚|j                  |«       	 | j                  |«      |j                  |«       S # |$ r}t	        d«      |‚d }~ww xY w# |j                  |«       w xY w)Nr<   )r=   z-cycle detected in mutually recursive closuresz1failed to convert closure cell to Python constant)Úbaser=   ÚidÚsetrY   ÚaddÚ_get_function_implÚdiscard)r}   rú  r=   Úself_idrÖ  s        r_   r#  z'NestedUserFunctionVariable.get_functiony  sœ   € õ 	>ä�T“(ˆØÐÜ›%ˆKØ�kÑ!Ü(Ø?óð ð 	�‰˜Ô ð	)Ø×*Ñ*¨;Ó7ð ×Ñ Õ(øð 3ò 	Ü(ØCóàðûð	ûð
 ×Ñ Õ(ús#   ¿A! Á!A7Á&A2Á2A7Á7A: Á:Bc                 óP   — 	 | j                  «        y# t        t        f$ r Y yw xY wrf  )rû   r  r$   rï   s    r_   r	  z-NestedUserFunctionVariable.is_python_constant�  s-   € ð	Ø×#Ñ#Ô%ØøÜ#¤[Ð1ò 	Ùð	ús   ‚ “%¤%c                 ó<  — d }| j                   r¾ddlm} |j                  «       }g }| j                   j                  D ]‚  }|j
                  j                  j                  |«      }|| u rt        d«      ‚t        |t        «      r|j                  |«      }n|j                  «       }|j                  t        |«      «       Œ„ t        |«      }t!        j"                  | j$                  j                  «       | j&                  | j(                  j                  «       d |¬«      }	| j*                  r| j*                  j                  «       |	_        | j.                  r| j.                  j                  «       |	_        | j2                  r™| j2                  j5                  d«      r~| j2                  j7                  d«      j                  «       }
t        |
t        «      rddlm} t=         ||
«      «      }
t        |
t<        «      st?        dtA        |
«      › �«      ‚|
|	_!        |	S )Nr   )ÚInstructionTranslatorz self-referential nested function)ÚargdefsrÅ   rÏ   rÉ   z annotations must be a dict, got )"rÅ   rH  r  Ú
current_txr·   r½   r¾   Ú	load_cellrY   r±   rð  r#  rû   Úappendr:   r¡   rË   r   r~   rÄ   rÚ  r…   r„   r‡   r†   rà   r3  r4  rÌ   rÊ   rˆ   rÍ   rÎ   rÏ   )r}   rú  Úclosure_cellsr  r“   Úcellsr–  r�  rV  ri   rÆ   rÊ   s               r_   r   z-NestedUserFunctionVariable._get_function_impl–  s¸  € ØˆØ�<Š<ÝLà&×1Ñ1Ó3ˆBØˆEà ŸL™L×.Ñ.ò /�ð !#§	¡	× 6Ñ 6× @Ñ @ÀÓ J�ð ! DÑ(Ü0Ð1SÓTÐTô ˜mÔ-GÔHØ)×6Ñ6°{ÓC‘Eà)×<Ñ<Ó>�EØ—‘œY uÓ-Õ.ð-/ô. " %›LˆMä×!Ñ!Ø�I‰I×(Ñ(Ó*Ø�N‰NØ�L‰L×+Ñ+Ó-ØØ!ô
ˆð �=Š=Ø $§¡× @Ñ @Ó BˆDÔØ�?Š?Ø"&§/¡/×"DÑ"DÓ"FˆDÔØ�<Š<˜DŸL™L×1Ñ1Ð2CÔDØŸ,™,×.Ñ.Ð/@ÓA×TÑTÓVˆKÜ˜+¤uÔ-Ý.ä"¡8¨KÓ#8Ó9�ô ˜k¬4Ô0Ü$Ø6´t¸KÓ7HÐ6IÐJóð ð $/ˆDÔ Øˆr^   rH   r¤   c           
      ó@  •— |dv rt         ‰| �  ||«      S |dk(  r4t        | dd «      }|r|j                  «       S t	        j
                  d «      S |t        v r9t        j                  | |t        t        t        j                  |«      «      ¬«      S t         ‰| �  ||«      S )N)rÏ   r)  rÑ   rl   r[   rZ   r\   r0  r„   r…   r�  )râ   r7  rÛ   rû   rB   r´   r3   r   rŸ  rÎ   rË   r   ©r}   r“   r¤   r„  rã   s       €r_   r7  z&NestedUserFunctionVariable.var_getattrÑ  s§   ø€ ð ð 	
ñ 	
ô ‘7Ñ& r¨4Ó0Ð0Ø�>Ò!Ü˜˜j¨$Ó/ˆAÙ-.�1×'Ñ'Ó)ÐQÔ4D×4KÑ4KÈDÓ4QÐQØÔ+Ñ+Ü×,Ñ,Ø�d¤D¬´×1CÑ1CÀTÓ)JÓ$Kôð ô ‘7Ñ& r¨4Ó0Ð0r^   c                 ó   — | j                   d uS r�   )rÅ   rï   s    r_   Úhas_closurez&NestedUserFunctionVariable.has_closureé  s   € Ø�|‰| 4Ð'Ð'r^   c                 óÄ   •— |dk(  r| j                  «       S |dk(  r| j                  «       S |dk(  r!t        | dd «      }|r|j                  «       S d S t        ‰| �  ||«      S )NrZ   rl   r„   r…   )r  r  rÛ   rû   râ   Úconst_getattrr  s       €r_   r  z(NestedUserFunctionVariable.const_getattrì  si   ø€ Ø�:ÒØ—=‘=“?Ð"Ø�:ÒØ—=‘=“?Ð"Ø�>Ò!Ü˜˜j¨$Ó/ˆAÙ-.�1×'Ñ'Ó)Ð8°DÐ8Ü‰wÑ$ R¨Ó.Ð.r^   c                 ó2  •— |dk(  r t        j                  |t        | d«      «      S |dk(  r t        j                  |t        | d«      «      S t        j                  |«      }|| j                  |«      v rt        j                  d«      S t        ‰| �  ||«      S )Nrl   r~   r„   r…   T)r@   r²   r@  rB   r´   rø   râ   rB  )r}   r“   r¤   rŽ  rã   s       €r_   rB  z+NestedUserFunctionVariable.call_obj_hasattrö  s�   ø€ ð �:ÒÜ"×(Ñ(¨¬W°T¸6Ó-BÓCÐCØ�>Ò!Ü"×(Ñ(¨¬W°T¸:Ó-FÓGÐGÜ×$Ñ$ TÓ*ˆØ�×!Ñ! "Ó%Ñ%Ü#×*Ñ*¨4Ó0Ð0Ü‰wÑ'¨¨DÓ1Ð1r^   c                  ó   — yr=  r]   rï   s    r_   r!  z#NestedUserFunctionVariable.has_self  r>  r^   c                 ó   — | j                   S r�   rR  rï   s    r_   r  z&NestedUserFunctionVariable.get_globals  rS  r^   r»   r•   c                 ób  — | 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 ]6  \  }}	|	|v rt5        d|	›d�«      ‚| j6                  j                  |   }
|
||	<   Œ8 |S )Nc              3   ó2   K  — | ]  }t        d «      –— Œ y ­wr�   )r:   )rƒ  Ú_s     r_   r†  z7NestedUserFunctionVariable.bind_args.<locals>.<genexpr>  s   è ø€ ÒS a”)˜D—/ÑSùs   ‚zfree variable z already in result)r  rË   r   rÄ   rÚ  rû   r…   r¡   r·   r‹   rŠ   r�  r‡   Úkeys_as_python_constantr†   r×   r¸  r¹  r¾  rˆ   rº  rº   r½   r�  rÃ   r™   rÍ   rÅ   )r}   r»   r•   r–   r~   ri   rQ   rµ   r¨   r¤   r•  s              r_   rš  z$NestedUserFunctionVariable.bind_args  sX  € ð �}‰}‹ˆÜ×!Ñ!ØØ�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‰~Ü$ ~°d°XÐ=OÐ%PÓQÐQØ—<‘<×%Ñ% cÑ*ˆDØˆF�4ŠLð		 ð ˆr^   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                  ri| j                  j                  d«      rN| j                  j                  d«      }	 |j!                  «       }‰j                  ‰j                  |«      g«       n!‰j                  ‰j                  d «      g«       ‰j                  t%        dd«      «       | j&                  rv‰j                  ˆfd„«        ‰| j&                  «       ‰j                  t%        dd«      «       ‰j                  t)        d«      «       ‰j                  t%        dd«      «       ‰j*                  }|j,                  j.                  j1                  | «      r}|j,                  j.                  j2                  |    j5                  «       D ]H  \  }}‰j7                  «         ‰|«       ‰j                  t)        d«      «       ‰j9                  |«       ŒJ y y # t"        $ r  ‰|«       Y �Œ`w xY w)	Nc                  ó0   •— ‰ j                  t        d«      S )NrÐ   )Úload_import_fromrZ   ©ro  s   €r_   r/  z8NestedUserFunctionVariable.reconstruct.<locals>.<lambda>(  s   ø€ �G×,Ñ,¬XÐ7JÓK€ r^   rÏ   é   Fc                  ó(   •— ‰ j                  dd«      S )NÚ	functoolsÚwraps©r  r  s   €r_   r/  z8NestedUserFunctionVariable.reconstruct.<locals>.<lambda>M  s   ø€ ˜×0Ñ0°¸gÓF€ r^   r<   r   T)rÝ  r~   rÞ  Úcreate_load_const_uncheckedrÄ   rB   r´   rV  r  r…   Úcreate_load_constrÅ   r‡   rà   r3  r4  rû   r  r   rñ  r   r“   r½   r¾   Úhas_pending_mutationÚstore_attr_mutationsr·   Údup_topÚ
store_attr)r}   ro  rÆ   r“   r¤   rV  s    `    r_   rL  z&NestedUserFunctionVariable.reconstruct&  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à�<Š<˜DŸL™L×1Ñ1Ð2CÔDØŸ,™,×.Ñ.Ð/@ÓAˆKð%Ø)×<Ñ<Ó>�Ø×%Ñ%Ø×8Ñ8¸ÓEÐFõð ×!Ñ! 7×#<Ñ#<¸TÓ#BÐ"CÔDà×ÑÔ2°1°eÓ<Ô=à�?Š?Ø×!Ñ!ÛFôñ �D—O‘OÔ$Ø×!Ñ!Ô"6°q¸%Ó"@ÔAØ×!Ñ!¤,¨q£/Ô2Ø×!Ñ!Ô"6°q¸$Ó"?Ô@ð �Z‰ZˆØ�9‰9×!Ñ!×6Ñ6°tÔ<Ø!Ÿy™y×5Ñ5×JÑJØñ ç‰e‹gò)‘��eð —‘Ô!Ù˜”Ø×%Ñ%¤l°1£oÔ6Ø×"Ñ" 4Õ(ñ)ð =øô% 'ò %Ù˜×$ð%ús   Æ1L. Ì.MÍMr�   r†  )$rZ   r[   r\   rß   r  r@   rˆ   rJ  r   r�   r¢   rð   rË   r   rû   rü   rK  r  rÎ   rz  rþ  rÈ  r#  rL  r	  r   r7  r  r  rB   rB  r!  r  rš  rL  rM  rN  s   @r_   rð  rð  8  s  ø„ àðà	!×	0Ñ	0ð€Nð .2ñ =à ð =ð ð =ð ˜˜S˜‘>ð	 =ð
 " DÑ(ð =ð $ dÑ*ð =ð ! 4Ñ'ð =ð $ dÑ*ð =ð ð =ð 
õ =ðD˜4 Ñ0ó ð# E×$6Ñ$6ó #ð˜Cð Ð$5õ ð.˜%Ÿ.™.ó .ð"˜T %×"4Ñ"4Ñ5ó "ñ)¨¨C©°4©ð )À5×CUÑCUó )ð, Dó ð9¨c°#©hð 9¸5×;MÑ;Mó 9ðv1Ø-ð1Ø58ð1à	õ1ð0(˜Tó (ð/Ð ;ð /À3ð /È3õ /ð
2Ø-ð
2Ø58ð
2à	õ
2ð˜$ó ð˜T # s (™^ó ðà+ðð �?Ñ#ðð �S˜/Ð)Ñ*ð	ð
 
ˆc�?Ð"Ñ	#ó÷<7)r^   rð  c                   ód   ‡ — e Zd Zdedddeddfˆ fd„Zdd	d
ee   dee	ef   defˆ fd„Z
dd„Zˆ xZS )Ú!WrappedNestedUserFunctionVariablerË  rb  rI   r–   r`   Nc           	      óø  •— |j                  dd «       |j                  dd «       |j                  dd «       |j                  dd «       |j                  dd «       |j                  dd «       |j                  dd «       |j                  dd «       t        ‰| �	  |j                  |j                  |j
                  |j                  |j                  |j                  |j                  «       || _
        || _        y )	NrÚ  r~   rÄ   r…   r‡   rÆ   rÅ   rñ  )r›   râ   r�   rÚ  r~   rÄ   r…   r‡   rÅ   rñ  rË  rb  rÍ  s       €r_   r�   z*WrappedNestedUserFunctionVariable.__init__a  sË   ø€ ð 	�
‰
�9˜dÔ#Ø�
‰
�6˜4Ô Ø�
‰
�; Ô%Ø�
‰
�:˜tÔ$Ø�
‰
�< Ô&Ø�
‰
�= $Ô'Ø�
‰
�9˜dÔ#Ø�
‰
�< Ô&Ü‰ÑØ�O‰OØ�L‰LØ×ÑØ×ÑØ×ÑØ�O‰OØ×Ñô	
ð ˆŒØˆ�r^   r“   rH   r•   c                 óR  •— t         j                  rNt        t        j                  «      }|j                  || j                  | j                  gt        |«      z   |«      S | j                  j                  |«       t        ‰| �  |||«      }| j                  j                  |«       |S r�   rÏ  rÔ  s         €r_   r>  z/WrappedNestedUserFunctionVariable.call_function{  rÖ  r^   c                 óŒ   ‡ ‡— ‰j                  ˆˆ fd„«        ‰‰ j                  «       ‰j                  t        dd«      «       y )Nc                  ó(   •—  ‰ ‰j                   «      S r�   rÙ  rÚ  s   €€r_   r/  z?WrappedNestedUserFunctionVariable.reconstruct.<locals>.<lambda>Œ  rÛ  r^   r<   FrÜ  rn  s   ``r_   rL  z-WrappedNestedUserFunctionVariable.reconstruct‹  rß  r^   r†  )rZ   r[   r\   rð  r   r�   r¢   r@   rˆ   rJ  r>  rL  rM  rN  s   @r_   r)  r)  `  sm   ø„ ðà+ðð +ðð ð	ð
 
õð4à'ðð �?Ñ#ðð �S˜/Ð)Ñ*ð	ð
 
õ÷ >r^   r)  c            	       óú   ‡ — e Zd Zddhej                  £Zddededz  deddfˆ fd„Zd„ Zdefd„Z	defd	„Z
eded
edd fd„«       Zdddee   deeef   defd„Zd„ Zdddedefd„Zdddedefd„Zdedefd„Zˆ xZS )ÚSkipFunctionVariablerV  ÚreasonNr–   r`   c                 ó@   •— t        ‰| �  di |¤Ž || _        || _        y rƒ   )râ   r�   rV  r0  )r}   rV  r0  r–   rã   s       €r_   r�   zSkipFunctionVariable.__init__¥  s!   ø€ Ü‰ÑÑ"˜6Ò"ØˆŒ
Øˆ�r^   c                 ó$   — ddl m}  || |||«      S rå   rç   ré   s        r_   rì   z%SkipFunctionVariable.richcompare_implª  rí   r^   c                 ó   — | j                   S r�   ©rV  rï   s    r_   rû   z'SkipFunctionVariable.as_python_constant¯  ó   € Ø�z‰zÐr^   c                 ó   — | j                   S r�   r4  rï   s    r_   rr  z1SkipFunctionVariable.get_real_python_backed_value²  r5  r^   r®   c                 ó4  — t        j                  |dd«      rW|}|}t        |dd«      r&|j                  }t	        |d«      }t        |dd«      rŒ&|j                  t        j                  «       n¡t        j                  |«      rYt        |d«      r$t        |j                  t        j                  «      r\t        |j                  t        j                  «      «       n3t!        |«      s(t        |j                  t        j                  «      «        | ||¬«      S )NÚ_torchdynamo_disableFÚ_torchdynamo_orig_callabler}  ró   )r×   rØ   rÛ   r9  r'   rœ   r%   rZ  Ú	isbuiltinr@  r±   r}  rË   Ú
ModuleTyper&   ÚBUILTIN_MATCHr8   )r\  rV  r®   Úguard_on_sourceÚguard_on_values        r_   r]  z'SkipFunctionVariable.create_with_sourceµ  së   € ô ×!Ñ! %Ð)?ÀÔGð %ˆOØ"ˆNä˜.Ð*FÈÔNØ!/×!JÑ!J�Ü",Ø#Ð%Aó#�ô ˜.Ð*FÈÕNð ×&Ñ&¤|×'AÑ'AÕBÜ×Ñ˜uÔ%ô
 ˜5 *Ô-´Ø—‘¤× 0Ñ 0ô2ô ˜f×/Ñ/´×0JÑ0JÓKÕLÜ0°Ô7ô ˜&×+Ñ+¬L×,FÑ,FÓGÔHÙ�5 Ô(Ð(r^   r“   rH   r•   c                 óØ
  — | j                   t        j                  j                  t        j                  j
                  fv r<t        d„ |D «       «      r*t        j                  | | j                   d„ |D «       Ž «      S | j                   t        v r‘t        d„ |D «       «      rt        d„ |j                  «       D «       «      r_ | j                   d„ |D «       i |j                  «       D ��ci c]  \  }}||j                  «       “Œ c}}¤Ž}t        j                  ||«      S t        j                  | j                   dd«      rVt        j                  | j                   dd «      }t        d	t!        | j                   «      d
| j                   › d|› d�dg¬«       y | j                   t"        j$                  j&                  u r>|j)                  d«      }|r|j                  «       }t        dd|› d|› d�d|› �dg¬«       y | j                   t"        j$                  j*                  u rX|j)                  d«      }	|	r|	j                  «       }	nd}	t        dd|› d|› dt-        |j.                  «      › d�d|	› �dgd¬«       y | j                   t"        j$                  j0                  u r	 t        ddd d!g¬«       y | j                   t8        j:                  j<                  u rtt?        |«      d"v r>|s<|d#   }|d$   }tA        |tB        «      r"tE        |jF                  ||jH                  ¬%«      S t        d&d'| › d(|› d)|› �d*g tJ        jL                  ¢¬«       y tN        jP                  rEd$d+l)m*} |jW                  || j                   «      }tA        |tX        «      s|j[                  |||«      S t]        | j                   d,d-«      }t]        | j                   d.d «      }|€d/n
t!        |«      }	 t        j^                  | j                   «      }d0|› d1|› d2�}d3|› d4�g}d5|vr|d6|› d7�d8gz  }|dFk(  rdG}dHg}| jj                  r| jj                  }ndIdJl6m7}  || j                   «      }t        dKdL|› dM|› dN|› �||¬«       y c c}}w # t2        $ r}
t5        |
j6                  «      d ‚d }
~
ww xY w# t`        $ rÃ d9d:h}||v rd;|› d|› d4�}d<d=g}n©|�\|jc                  d>«      rKd?|› d|› d�}d@g}t"        j$                  jd                  jg                  |dAz   dAji                  |«      z   «       nKdB|› d|› dC�}dDdEg}t"        j$                  jd                  jg                  |dAz   dAji                  |«      z   «       Y �ŒLw xY w)ONc              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr�   ©r	  ©rƒ  Úas     r_   r†  z5SkipFunctionVariable.call_function.<locals>.<genexpr>à  s    è ø€ ò X
Ø'(ˆA× Ñ ×"ñX
ùr  c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr�   ©rû   rB  s     r_   r†  z5SkipFunctionVariable.call_function.<locals>.<genexpr>ä  s   è ø€ Ò F¸A ×!5Ñ!5×!7Ñ Fùr  c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr�   rA  rB  s     r_   r†  z5SkipFunctionVariable.call_function.<locals>.<genexpr>é  s   è ø€ Ò9¨q�A×(Ñ(×*Ñ9ùr  c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr�   rA  )rƒ  r¹   s     r_   r†  z5SkipFunctionVariable.call_function.<locals>.<genexpr>ê  s   è ø€ ÒD¨q�A×(Ñ(×*ÑDùr  c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr�   rE  rB  s     r_   r†  z5SkipFunctionVariable.call_function.<locals>.<genexpr>í  s   è ø€ Ò7¨Q�!×&Ñ&×(Ñ7ùr  r8  FÚ_torchdynamo_disable_msgz1Skip calling `torch.compiler.disable()`d functionzSkip calling function `z>` since it was wrapped with `torch.compiler.disable` (reason: r®  z(Remove the `torch.compiler.disable` callr`  rÙ  z%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.rW  z$Call to `torch._dynamo.skip_frame()`z/Called `torch._dynamo.skip_frame()` with args `z`. Skipping frame rX  z#User-inserted skip frame. Message: z-Remove the `torch._dynamo.skip_frame()` call.T)ra  rb  rc  rd  r`  z*Call to `torch._dynamo.step_unsupported()`zUser-inserted step_unsupported.z3Remove the `torch._dynamo.step_unsupported()` call.)r   r  r   r<   )r‹  z!unsupported function.__get__ callzcall_function z, args: r¨  z^Dynamo only supports function.__get__(func, obj[, cls]) where func is a user-defined function.©ÚSourcelessBuilderr\   z<unknown qualname>r[   z<unknown module>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:Apply `@torch._dynamo.dont_skip_tracing` to the function `zw` to force tracing into the function. 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. rU  z*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°torch.compiler.allow_in_graph (or torch._dynamo.allow_in_graph) was called inside a compiled region. Dynamically annotating functions inside a compiled region is not supported.ziApply @torch.compiler.allow_in_graph as a decorator before compilation, not inside the compiled function.r   )Úget_skip_reasonz,Attempted to call function marked as skippedzmodule: z, qualname: z, skip reason: )8rV  Ú	importlibÚutilÚ	find_specÚmetadataÚversionr  r@   r²   ÚRE_CONSTANT_FOLD_FNSÚvaluesr·   rû   r×   rØ   r#   rJ  rb   r³  Úgraph_breakr�   r`  r   Úf_codeÚstep_unsupportedr$   r"   rÙ  rË   r   rœ  rŠ   r±   rP  rŠ  rÕ   r®   r   r÷  r   Údont_skip_tracingÚbuilderrL  r´   r/  r>  rÛ   Úgetfiler    r‚  rc   Ú	warn_onceÚjoinr0  r»  rQ  )r}   r“   r•   r–   r¸   r¹   rµ   rÙ  Úgraph_break_msgÚskip_frame_msgrÖ  Úfunc_varÚobj_varrL  Ú
rebuilt_fnÚqualnameÚ	module_orr  Úpathrc  rd  Úknown_python_builtin_modulesr0  rQ  s                           r_   r>  z"SkipFunctionVariable.call_function×  sé  € ð �:‰:œ)Ÿ.™.×2Ñ2´I×4FÑ4F×4NÑ4NÐOÑOÔTWñ X
Ø,0ôX
ô U
ô #×(Ñ(Ø�J�D—J‘JÑ FÀÔ FÐGóð ð
 �J‰JÔ.Ñ.ÜÑ9°DÔ9Ô9ÜÑD°F·M±M³OÔDÔDà�T—Z‘ZÙ7°$Ô7ðà9?¿¹»×H±°°A�1�a×*Ñ*Ó,Ñ,ÓHñˆFô #×(Ñ(¨¨VÓ4Ð4ä×!Ñ! $§*¡*Ð.DÀeÔLÜ×(Ñ(¨¯©Ð5OÐQUÓVˆCÜØKÜ˜DŸJ™J›Ø5°d·j±j°\ð B:Ø:=¸¸aðAð ?ðöð �Z‰Zœ5Ÿ=™=×4Ñ4Ñ4Ø$Ÿj™j¨Ó/ˆOÙØ"1×"DÑ"DÓ"F�ÜØ?ØJÈ4È&ÐP[Ð\bÐ[cÐcdÐeØBÀ?ÐBSÐTàDðö	ð �Z‰Zœ5Ÿ=™=×3Ñ3Ñ3Ø#ŸZ™Z¨Ó.ˆNÙØ!/×!BÑ!BÓ!D‘à!#�ÜØ>ØIÈ$ÈÈ{Ð[aÐZbð c"Ü"3°B·I±IÓ">Ð!?¸qðBàAÀ.ÐAQÐRàCðð  ö	ð �Z‰Zœ5Ÿ=™=×9Ñ9Ñ9ð
7ÜØHØØ AàMðö	ð �Z‰Zœ5×-Ñ-×5Ñ5Ñ5ô �4‹y˜FÑ"©6Ø ™7�Ø˜q™'�Ü˜hÔ(<Ô=Ü-Ø Ÿ™ W¸¿¹ôð ô Ø;Ø(¨¨¨h°t°f¸JÀvÀhÐOð9à6Ô)×5Ñ5Ð6öô ×'Ò'Ý6ð /×5Ñ5°b¸$¿*¹*ÓE�
ä! *Ô.BÔCØ%×3Ñ3°B¸¸fÓEÐEÜ˜tŸz™z¨>Ð;OÓPˆHÜ §
¡
¨L¸$Ó?ˆIØ09Ð0AÑ,ÄsÈ9Ã~ˆKð8YÜ—‘ t§z¡zÓ2�àUÐV^ÐU_ð ` Ø $˜vÐ%<ð>ð ð
 3°8°*¸BÐ?ð�ð  DÑ(ØØTÐU]ÐT^ð _lð lð ;ð	ñ �EðX Ð+Ò+ðAð ð8ð�ð �{Š{ØŸ™‘å9á(¨¯©Ó4�ÜØFØ" ; -¨|¸H¸:À_ÐU[ÐT\Ð]Ø'Øö	ùóE Iøôj ò 7Ü% a§e¡eÓ,°$Ð6ûð7ûôn ò %YØ06¸Ð/DÐ,ØÐ <Ñ<ðØ'˜=¨¨(¨°2ð7ð  ð
iðGð‘Eð Ð*¨y×/CÑ/CÀHÔ/MØ$NÈ{ÈmÐ[\Ð]eÐ\fÐfgÐ"h�Kð^ð�Eô
 —M‘M×'Ñ'×1Ñ1°+ÀÑ2DÀtÇyÁyÐQVÓGWÑ2WÕXð JÈ+ÈÐVWÐX`ÐWað bað bð  ðmð;ð�Eô —M‘M×'Ñ'×1Ñ1°+ÀÑ2DÀtÇyÁyÐQVÓGWÑ2WÔXúðK%Yús1   Ã)Q0Ê Q6 Ï>R Ñ6	RÑ?RÒRÒCU)Õ(U)c                 óf   — | j                   r| j                   j                  |«      S t        d«      ‚)NzBPython codegen not implemented for sourceless SkipFunctionVariablerl  rn  s     r_   rm  z'SkipFunctionVariable.reconstruct_pycode—	  rp  r^   r¤   c                 óV   — t        j                  |t        | j                  |«      «      S r�   )r@   r²   r@  rV  rg  s      r_   rB  z%SkipFunctionVariable.call_obj_hasattrž	  s"   € ô ×$Ñ$ R¬°·±¸TÓ)BÓCÐCr^   c           
      óÀ   — |t         v r5t        j                  | |t        t	        | j
                  |«      «      ¬«      S t        || j
                  | j                  |«      S )Nr�  )r3   r   rŸ  rÎ   rÛ   rV  rÝ   r®   rg  s      r_   r7  z SkipFunctionVariable.var_getattr£	  sR   € ð Ô)Ñ)Ü×,Ñ,Ø�d¤D¬°·±¸TÓ)BÓ$Côð ô ˜b $§*¡*¨d¯k©k¸4Ó@Ð@r^   rê   c                 óh   — t        |t        «      xr! | j                  «       |j                  «       k(  S r�   )r±   r@   rû   r  s     r_   r  z$SkipFunctionVariable.is_python_equal­	  s1   € ä�uœoÓ.ò HØ×'Ñ'Ó)¨U×-EÑ-EÓ-GÑGð	
r^   r�   )rZ   r[   r\   r@   r  r   rJ  r�   rì   rû   rr  r  r   r]  r¢   rˆ   r>  rm  rB   rB  r7  r  rL  r  rM  rN  s   @r_   r/  r/  ž  s(  ø„ àØðð 
×	'Ñ	'ð€Nñ˜cð ¨3°©:ð Èð ÐPTõ ò
7ð
 Có ð¨có ð ð) sð )°Fð )Ð?Uò )ó ð)ðB~à'ð~ð �?Ñ#ð~ð �S˜/Ð)Ñ*ð	~ð
 
ó~ò@
ðDØ-ðDØ58ðDà	óDð
AØ-ðAØ58ðAà	óAð
 Vð 
°÷ 
r^   r/  c                   ód   ‡ — e Zd Zdedddeddfˆ fd„Zdd	d
ee   dee	ef   defˆ fd„Z
dd„Zˆ xZS )ÚWrappedSkipFunctionVariablerË  rb  rI   r–   r`   Nc                 ó¶   •— |j                  dd «       |j                  dd «       t        ‰| �  |j                  fd|j                  i|¤Ž || _        || _        y )NrV  r0  )r›   râ   r�   rV  r0  rË  rb  rÍ  s       €r_   r�   z$WrappedSkipFunctionVariable.__init__µ	  sN   ø€ ð 	�
‰
�7˜DÔ!Ø�
‰
�8˜TÔ"Ü‰Ñ˜Ÿ™ÑH¨w¯~©~ÐHÀÒHØˆŒØˆ�r^   r“   rH   r•   c                 óR  •— t         j                  rNt        t        j                  «      }|j                  || j                  | j                  gt        |«      z   |«      S | j                  j                  |«       t        ‰| �  |||«      }| j                  j                  |«       |S r�   rÏ  rÔ  s         €r_   r>  z)WrappedSkipFunctionVariable.call_functionÁ	  rÖ  r^   c                 óŒ   ‡ ‡— ‰j                  ˆˆ fd„«        ‰‰ j                  «       ‰j                  t        dd«      «       y )Nc                  ó(   •—  ‰ ‰j                   «      S r�   rÙ  rÚ  s   €€r_   r/  z9WrappedSkipFunctionVariable.reconstruct.<locals>.<lambda>Ò	  rÛ  r^   r<   FrÜ  rn  s   ``r_   rL  z'WrappedSkipFunctionVariable.reconstructÑ	  rß  r^   r†  )rZ   r[   r\   r/  r   r�   r¢   r@   rˆ   rJ  r>  rL  rM  rN  s   @r_   ro  ro  ´	  sm   ø„ ð
à%ð
ð +ð
ð ð	
ð
 
õ
ðà'ðð �?Ñ#ðð �S˜/Ð)Ñ*ð	ð
 
õ÷ >r^   ro  c                   óÜ   ‡ — e Zd ZdZdefd„Zdedededdfˆ fd„Zdefd	„Z	defd
„Z
dej                  fd„Zdddedefˆ fd„Zd„ Zdee   fd„Zdddee   deeef   defd„Zdef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".
    r`   c                 ó"   — t         j                  S r�   ry  rï   s    r_   rz  z'WrapperUserFunctionVariable.python_typeß	  r{  r^   Úwrapper_objÚattr_to_tracer–   Nc                 ó@   •— t        ‰| �  di |¤Ž || _        || _        y rƒ   )râ   r�   rw  rx  )r}   rw  rx  r–   rã   s       €r_   r�   z$WrapperUserFunctionVariable.__init__â	  s#   ø€ Ü‰ÑÑ"˜6Ò"Ø&ˆÔØ*ˆÕr^   c                 ó.   — | j                   j                  S r�   )rw  r[   rï   s    r_   r%  z&WrapperUserFunctionVariable.get_moduleç	  s   € Ø×Ñ×*Ñ*Ð*r^   c                 ó.   — | j                   j                  S r�   )rw  rZ   rï   s    r_   r  z$WrapperUserFunctionVariable.get_nameê	  s   € Ø×Ñ×(Ñ(Ð(r^   c                 ó6   — | j                  «       j                  S r�   )r#  rl   rï   s    r_   r  z$WrapperUserFunctionVariable.get_codeí	  s   € Ø× Ñ Ó"×+Ñ+Ð+r^   r“   rH   r¤   c                 óø   •— || j                   k(  r[t        | j                  | j                   «      }| j                  xr t	        | j                  |«      }t        j                  |||«      S t        ‰| �!  ||«      S r�   )	rx  rÛ   rw  r®   r'   r@   r²   râ   r7  )r}   r“   r¤   r­   r®   rã   s        €r_   r7  z'WrapperUserFunctionVariable.var_getattrð	  sk   ø€ ð �4×%Ñ%Ò%Ü˜$×*Ñ*¨D×,>Ñ,>Ó?ˆCØ—[‘[ÒB¤Z°·±¸TÓ%BˆFÜ"×(Ñ(¨¨S°&Ó9Ð9Ü‰wÑ" 2 tÓ,Ð,r^   c                 óB   — t        | j                  | j                  «      S r�   ©rÛ   rw  rx  rï   s    r_   r#  z(WrapperUserFunctionVariable.get_functionù	  ó   € Ü�t×'Ñ'¨×);Ñ);Ó<Ð<r^   c                 ó   — g S r�   r]   rï   s    r_   rð   z%WrapperUserFunctionVariable.self_argsü	  rñ   r^   r•   c           
      ó  — t        | j                  d«      �r÷t        | j                  | j                  d «      }t        |dd«      xs d}t	        | j                  «      }|j                  dd¬«      d   dk7  �r–|�s“|j                  «       }t        j                  j                  |j                  «      }|j                  }	d	|› d
|	› ddj                  t        j                  |g«      «      › �}
t        j                   j"                  j%                  |
«       t        j                   j"                  j&                  j)                  d«      }|j+                  t&        j,                  «      r¥t        j.                  j0                  j3                  «       }t5        «       |z   }|d   j                  |d   j                  f}dj                  t        j                  |«      «      }d|d   › d
|d   › d�}|t7        |«      z  }|j9                  |«       | j;                  «       t=        |«      z   }| j                  dk(  xr[ t        | j                  dd«      xrB t        t        | j                  dd «      dd «      |j>                  j@                  jB                  u}|rtD        jF                  ntD        jH                  }tK        jL                  ||«      jO                  || tK        jL                  || j                  «      g|¢|«      S )NÚ
cache_infor[   rW  rX  r<   )Úmaxsplitr   rb   zGDynamo detected a call to a `functools.lru_cache`-wrapped function at 'ú:zî'. Dynamo ignores the cache wrapper and directly traces the wrapped function. Silent incorrectness is only a *potential* risk, not something we have observed. Enable TORCH_LOGS=+dynamo for a DEBUG stack trace.

This call originates from:
ztorch._dynamor§  z)call to a lru_cache wrapped function at: rO  re  Ú_is_torch_compileFr9  rl   )(r@  rw  rÛ   rx  r6   ÚsplitÚframe_summaryÚosrh  Úbasenamer…  Úlinenor`  Ú	tracebackÚformat_listrb   r³  rc   r_  ÚloggingÚ	getLoggerÚisEnabledForÚDEBUGÚ_guardsÚTracingContextÚextract_stackr   rJ  Údebugrð   r¢   r½   r�  rZ  r   Ú(getattr_and_trace_no_nested_graph_breaksÚgetattr_and_tracer@   r²   r>  )r}   r“   r•   r–   Ú	target_fnr  Úis_allowed_lru_cache_wrapperrˆ  r…  r‹  rÙ  Údynamo_loggerÚ
user_stackÚ	frame_locÚuser_stack_formattedÚuser_stack_traceÚall_argsÚis_inner_torch_compileÚpolyfills                      r_   r>  z)WrapperUserFunctionVariable.call_functionÿ	  sÅ  € ô �4×#Ñ# \Õ2Ü × 0Ñ 0°$×2DÑ2DÀdÓKˆIÜ! )¨\¸2Ó>ÒDÀ"ˆKäBÀ4×CSÑCSÓTð )ð
 ×!Ñ! #°Ð!Ó2°1Ñ5¸Ó@Ú4à "× 0Ñ 0Ó 2�ÜŸ7™7×+Ñ+¨M×,BÑ,BÓC�Ø&×-Ñ-�ð$Ø$, :¨Q¨v¨hð 73ð —w‘wœy×4Ñ4°m°_ÓEÓFÐGðIð ô —‘×#Ñ#×-Ñ-¨cÔ2ä %§¡× 3Ñ 3× ;Ñ ;× EÑ EÀoÓ V�Ø ×-Ñ-¬g¯m©mÔ<Ü!&§¡×!=Ñ!=×!KÑ!KÓ!M�JÜ!7Ó!9¸JÑ!F�JØ!+¨B¡×!8Ñ!8¸*ÀR¹.×:OÑ:OÐ P�IØ+-¯7©7´9×3HÑ3HÈÓ3TÓ+UÐ(Ø)RÐS\Ð]^ÑS_ÐR`Ð`aÐbkÐlmÑbnÐaoÐoqÐ'rÐ$Ø$¬Ð,@Ó(AÑAÐ$Ø!×'Ñ'Ð(8Ô9à—>‘>Ó#¤d¨4£jÑ0ˆð ×ÑÐ"7Ñ7ò ,Ü˜×(Ñ(Ð*=¸uÓEò,äÜ˜×(Ñ(Ð*FÈÓMØØóð
 —9‘9×$Ñ$×+Ñ+ð,ð 	ñ &ô ×>Ò>ä×,Ñ,ð 	ô
 ×$Ñ$ØØó
÷ ‰-ØØ”?×(Ñ(¨¨T×-?Ñ-?Ó@ÐLÀ8ÐLØó
ð	
r^   c                 óB   — t        | j                  | j                  «      S r�   r  rï   s    r_   rr  z8WrapperUserFunctionVariable.get_real_python_backed_valueI
  r€  r^   )rZ   r[   r\   rÑ   rÎ   rz  r   rJ  r�   r%  r  rË   rK  r  r@   r7  r#  r¢   rð   rˆ   r>  r  rr  rM  rN  s   @r_   ru  ru  ×	  sÜ   ø„ ñð"˜Tó "ð+ Cð +¸ð +Àsð +Ètõ +ð
+˜Có +ð)˜#ó )ð,˜%Ÿ.™.ó ,ð-Ø-ð-Ø58ð-à	õ-ò=ð˜4 Ñ0ó ðH
à'ðH
ð �?Ñ#ðH
ð �S˜/Ð)Ñ*ð	H
ð
 
óH
ðT=¨f÷ =r^   ru  c            
       óV   ‡ — e Zd ZdZdefd„Zdededededdf
ˆ fd	„Z	de
e   fd
„Zˆ xZS )ÚWrapperUserMethodVariablez×
    Similar to WrapperUserFunctionVariable, but for methods. The only delta is
    saving the vt for `self` object of the method which is then used by
    WrapperUserFunctionVariable in `call_function` method.
    r`   c                 ó"   — t         j                  S r�   r´  rï   s    r_   rz  z%WrapperUserMethodVariable.python_typeT
  r¶  r^   rw  rx  Úself_objr–   Nc                 ó6   •— t        ‰| �  ||fi |¤Ž || _        y r�   )râ   r�   r¢  )r}   rw  rx  r¦  r–   rã   s        €r_   r�   z"WrapperUserMethodVariable.__init__W
  s    ø€ ô 	‰Ñ˜ mÑ>°vÒ>Øˆ�r^   c                 ó   — | j                   gS r�   r±  rï   s    r_   rð   z#WrapperUserMethodVariable.self_argsa
  r²  r^   )rZ   r[   r\   rÑ   rÎ   rz  r   rJ  r@   r�   r¢   rð   rM  rN  s   @r_   r¤  r¤  M
  sZ   ø„ ñð ˜Tó  ðàðð ðð "ð	ð
 ðð 
õð˜4 Ñ0÷ r^   r¤  c                  óR   — t         j                  j                  «       rddlm}  | S i S )Nr   ©Útraceable_collective_remaps)rb   ÚdistributedÚis_availableÚ)torch.distributed._functional_collectivesr«  rª  s    r_   Ú_traceable_collective_remapsr¯  e
  s&   € ä×Ñ×%Ñ%Ô'õ	
ð +Ð*Ø€Ir^   c                 óö   — t         j                  j                  «       st        d«      ‚|t	        «       j                  «       vrt        |› d�«      ‚|j                  }| j                  d«      }t        ||«      S )NzIllegal invocation.z$ is not a traceable collective remapz)torch.distributed._functional_collectives)	rb   r¬  r­  rÍ   r¯  rX  rZ   Úimport_sourcer'   )r“   rÕ   Ú
inner_nameÚpath_sources       r_   Ú_traceable_collectives_sourcer´  p
  sq   € ô ×Ñ×)Ñ)Ô+ÜÐ2Ó3Ð3Ø	Ô-Ó/×6Ñ6Ó8Ñ8Ü ˜tÐ#GÐHÓIÐIà—‘€JØ×"Ñ"Ð#NÓO€KÜ�k :Ó.Ð.r^   c                   óâ   ‡ — e Zd ZdZdedef   dededdfˆ fd„Zed	d
dedef   de	dedd f
d„«       Z
ededefd„«       Zed	d
dedef   deeef   fd„«       Zd	d
dee   deeef   def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.
    rÕ   .Úreplacement_varr–   r`   Nc                ó‚   •— t        ‰| �  |fi |¤Ž t        |t        «      st	        dt        |«      › �«      ‚|| _        y )Nz4replacement_var must be a UserFunctionVariable, got )râ   r�   r±   rP  rÍ   rÎ   r·  )r}   rÕ   r·  r–   rã   s       €r_   r�   z*CollectiveFunctionRewriteVariable.__init__ˆ
  sI   ø€ ô 	‰Ñ˜Ñ&˜vÒ&Ü˜/Ô+?Ô@Ü ØFÄtÈOÓG\ÐF]Ð^óð ð  /ˆÕr^   r“   rH   Úold_fnr®   Úoptionsc                 ój   — t         j                  | |«      \  }}t        |ft        |fd|i|¤Ž|dœ|¤ŽS )Nr®   )r·  r®   )r¶  rä  rP  )r“   r¹  r®   rº  Únew_fnÚ
new_sources         r_   r´   z(CollectiveFunctionRewriteVariable.create–
  sO   € ô ?×FÑFÀrÈ6ÓRÑˆ�
Ü0Øð
ä0°ÑVÀ
ÐVÈgÑVØñ
ð ñ	
ð 	
r^   Úvariablec                 óH   — t        j                  | «      xr | t        «       v S r�   )r×   Ú
isfunctionr¯  )r¾  s    r_   Úcan_rewritez-CollectiveFunctionRewriteVariable.can_rewrite¥
  s%   € ô ×Ñ˜xÓ(ÒW¨XÔ9UÓ9WÐ-Wð	
r^   c                 ó8   — t        «       |   }|t        | |«      fS r�   )r¯  r´  )r“   rÕ   r¼  s      r_   rä  z)CollectiveFunctionRewriteVariable.rewrite«
  s$   € ô .Ó/°Ñ3ˆØÔ4°R¸Ó@Ð@Ð@r^   r•   c                 óä	  — dd l m} ddlm} t	        j
                  | j                  «      }t         |j                  |i |¤Žj                  «      }g }d|v rQ|d   j                  «       r>t        d| j                  › d|›d|›�d| j                  › �g t        j                  ¢¬«       | j                  |j                  k(  �rt        j                   st        d	| j                  › d
dg¬«       |d   }t#        |t$        j&                  «      s)t(        j*                  j,                  j/                  d«      ‚t1        «       }t1        «       }	t1        «       }
t1        «       }d }|j2                  D �]Ú  }|j5                  «       |j6                  ur)t(        j*                  j,                  j/                  d«      ‚|j9                  |d«      }|j;                  «       r€|j                  «       }||j<                  |j>                  fvr,t(        j*                  j,                  j/                  d|› �«      ‚t$        j@                  jC                  |jD                  «      }nftG        |d«      r.t$        j@                  jC                  |jI                  «       «      }n,t(        j*                  j,                  j/                  d|› �«      ‚|jK                  |«       |jK                  |j9                  |d«      «       |	jK                  |j9                  |d«      «       |
jK                  |j9                  |d«      «       |��ŒÉ|j9                  |d«      }�ŒÝ |€tM        d«      ‚g }t%        j&                  |«      t%        j&                  |	«      t%        j&                  |
«      t%        j&                  |«      |dœ}| jN                  jQ                  |||«      S | j                  |j<                  |j>                  fv rHt        j                   st        d| j                  › d
dg¬«       | jN                  jQ                  |||«      S | j                  |jR                  |jT                  |jV                  |jX                  fv rf|j[                  d«      }|�|j\                  n|j^                  d   j`                  }||vrtc        d|› �«      ‚te        jf                  |||   «      |d<   | jN                  jQ                  |||«      S )Nr   )ÚREDUCE_OP_TO_STRÚasync_opz)async_op=True for distributed collectivesz, args=ú	, kwargs=z3`torch.compile` doesn't support `async_op=True for r`  z.P2P compilation disabled for batch_isend_irecvzP2P compilation is disabled.z3Set TORCHDYNAMO_ENABLE_P2P_COMPILATION=1 to enable.Úp2p_op_listz`P2POp` used incorrectlyrë   zunexpected P2POp op r  zunexpected P2POp op variable ÚtensorÚpeerÚtagÚgroupz&group_var must be set from P2POp items)Úop_listÚ	peer_listÚtag_listÚtensorsÚ
group_namez(P2P compilation disabled for isend/irecvzUnsupported all_reduce op: )4Útorch.distributedr¬  r®  rÄ  r×   r¸  rÕ   rˆ   r¹  rº  rû   r#   r   r÷  Úbatch_isend_irecvr   Úenable_p2p_compilationr±   r   rN   rb   r³  rk  ÚInternalTorchDynamoErrorr¢   r·   rz  ÚP2POpr7  r	  ÚisendÚirecvrB   r´   rZ   r@  r  r	  rÍ   r·  r>  Ú
all_reduceÚreduce_scatter_singleÚreduce_scatter_tensorÚ_reduce_scatter_baser�   rV  Ú
parametersÚdefaultr’  r@   r²   )r}   r“   r•   r–   ÚdistrÄ  r¸  Úp2p_opsÚopsÚpeersÚtagsrÏ  Ú	group_varÚitemÚop_varrë   Únew_argsÚ
new_kwargsÚreduce_op_varÚ	reduce_ops                       r_   r>  z/CollectiveFunctionRewriteVariable.call_function²
  sg  € õ 	)ÝNô ×%Ñ% d§g¡gÓ.ˆ	Ü�n�i—n‘n dÐ5¨fÑ5×?Ñ?Ó@ˆØˆà˜Ñ F¨:Ñ$6×$IÑ$IÔ$KÜØCØŸ7™7˜) 8 d W¨J¨v¨iÐ8ØQÐRV×RYÑRYÐQZÐ[ðÜ&×2Ñ2ðõ	ð �7‰7�d×,Ñ,Ó,Ü×0Ò0ÜØLØ#Ÿw™w˜iØ >àMðõ	ð ˜]Ñ+ˆGÜ˜g¤y×'=Ñ'=Ô>Ü—m‘m×'Ñ'×@Ñ@Ø.óð ô *.«ˆCÜ“FˆEÜ“6ˆDÜ“fˆGØ04ˆIàŸ™ó >�Ø×#Ñ#Ó%¨T¯Z©ZÑ7ÜŸ-™-×+Ñ+×DÑDØ2óð ð ×)Ñ)¨"¨dÓ3�Ø×,Ñ,Ô.Ø×2Ñ2Ó4�BØ $§*¡*¨d¯j©jÐ!9Ñ9Ü#Ÿm™m×/Ñ/×HÑHØ2°2°$Ð7óð ô '×7Ñ7×>Ñ>¸r¿{¹{ÓK‘FÜ˜V ZÔ0Ü&×7Ñ7×>Ñ>¸v¿¹Ó?PÓQ‘FäŸ-™-×+Ñ+×DÑDØ7¸°xÐ@óð ð —
‘
˜6Ô"Ø—‘˜t×/Ñ/°°HÓ=Ô>Ø—‘˜T×-Ñ-¨b°&Ó9Ô:Ø—‘˜D×,Ñ,¨R°Ó7Ô8ØÒ$Ø $× 0Ñ 0°°WÓ =’Ið5>ð8 Ð Ü$Ð%MÓNÐNØ.0ˆHä$×1Ñ1°#Ó6Ü&×3Ñ3°EÓ:Ü%×2Ñ2°4Ó8Ü$×1Ñ1°'Ó:Ø'ñ6ˆJð ×'Ñ'×5Ñ5°b¸(ÀJÓOÐOà�7‰7�t—z‘z 4§:¡:Ð.Ñ.Ü×0Ò0ÜØFØ#Ÿw™w˜iØ >àMðõ	ð ×'Ñ'×5Ñ5°b¸$ÀÓGÐGà�7‰7Ø�O‰OØ×&Ñ&à×&Ñ&à×%Ñ%ð
ñ 
ð #ŸJ™J tÓ,ˆMð !Ð,ð ×#Ò#à×)Ñ)¨$Ñ/×7Ñ7ð ð
 Ð 0Ñ0Ü Ð#>¸y¸kÐ!JÓKÐKÜ*×0Ñ0°Ð5EÀiÑ5PÓQˆF�4‰LØ×#Ñ#×1Ñ1°"°d¸FÓCÐCr^   )rZ   r[   r\   rÑ   r   r   rP  r�   Ústaticmethodr   r´   rL  rÁ  r¡   r'   rä  r¢   r@   rˆ   rJ  r>  rM  rN  s   @r_   r¶  r¶  }
  s0  ø„ ñð/à�S˜#�XÑð/ð .ð	/ð
 ð/ð 
õ/ð ð
Ø'ð
à˜˜c˜Ñ"ð
ð ð
ð ð	
ð
 
-ò
ó ð
ð ð
˜cð 
 dò 
ó ð
ð
 ðAØ'ðAØ-5°c¸3°hÑ-?ðAà	ˆs�JˆÑ	òAó ðAðyDà'ðyDð �?Ñ#ðyDð �S˜/Ð)Ñ*ð	yDð
 
÷yDr^   r¶  c                   ó@   — e Zd Zdefd„Zdddee   deeef   defd„Z	y)	ÚCollectionsNamedTupleFunctionr`   c                 ó   — | j                   S r�   ru  rï   s    r_   rû   z0CollectionsNamedTupleFunction.as_python_constant/  rv  r^   r“   rH   r•   r–   c                 óü  — t        ||«      }|r~	  | j                  |D �cg c]  }|j                  «       ‘Œ c}i |j                  «       D ��ci c]  \  }}||j                  «       “Œ c}}¤Ž}t        j                  t        «       ¬«      S t        dd|›d|›�dg t        j                  ¢¬«       y c c}w c c}}w # t        $ r4}	t        t        |	«      |t        |	j                  «      ¬«       Y d }	~	Œˆd }	~	ww xY w)N©r•   r,  znamedtuple constructionzargs=rÆ  z?`torch.compile` only support certain input types for namedtupler`  )r1   rÕ   rû   r·   r    r    rÎ   r¢   r•   r   ÚUserDefinedClassVariabler?   r#   r   r÷  )
r}   r“   r•   r–   Úconstant_argsrç  r¸   r¹   rV  rk  s
             r_   r>  z+CollectionsNamedTupleFunction.call_function2  sõ   € ô ,¨D°&Ó9ˆÙð
Ø˜Ÿ™Ø6:Ö;°�a×*Ñ*Õ,Ò;ðà=C¿\¹\»^×L±T°Q¸�q˜!×.Ñ.Ó0Ñ0ÓLñ�ô ×5Ñ5ØÜ.Ó0ôð ô 	Ø-Ø�t�g˜Z ˜yÐ)ØYðÜ"×.Ñ.ðö		
ùò <ùÛLøäò Ü(Ü˜“IØÜ˜cŸh™h›÷ò ûðús3   �B>  B3·B> ÁB8Á(B> Â3B> Â>	C;Ã*C6Ã6C;N)
rZ   r[   r\   r   rû   r¢   r@   rˆ   rJ  r>  r]   r^   r_   rì  rì  .  sH   „ ð Có ð
à'ð
ð �?Ñ#ð
ð �S˜/Ð)Ñ*ð	
ð
 
ô
r^   rì  c                   ó   ‡ — e Zd Zej                  Zdhej                  £Z	 ddedee   de	e
ef   dededdfˆ fd„Zd	„ Zdefd
„Zdd„Zdefd„Zdddee   de	e
ef   defd„Zddde
defd„Zddde
defd„Zdefd„Zdefd„Zdedefd„Zˆ xZS )ÚFunctoolsPartialVariableÚoriginal_cache_hashNri   r•   Úkeywordsr–   r`   c                 óø   •— t        ‰| �  di |¤Ž || _        t        |t        «      st        dt        |«      › �«      ‚|| _        t        |t        «      st        dt        |«      › �«      ‚|| _	        || _
        y )Nzargs must be a list, got zkeywords must be a dict, got r]   )râ   r�   ri   r±   r¢   rÍ   rÎ   r•   rˆ   rõ  rô  )r}   ri   r•   rõ  rô  r–   rã   s         €r_   r�   z!FunctoolsPartialVariable.__init__\  su   ø€ ô 	‰ÑÑ"˜6Ò"ØˆŒ	Ü˜$¤Ô%Ü Ð#<¼TÀ$»Z¸LÐ!IÓJÐJØˆŒ	Ü˜(¤DÔ)Ü Ð#@ÄÀhÃÐ@PÐ!QÓRÐRØ ˆŒà#6ˆÕ r^   c                 ó$   — ddl m}  || |||«      S rå   rç   ré   s        r_   rì   z)FunctoolsPartialVariable.richcompare_implo  rí   r^   c                 ó"   — t         j                  S r�   )r  Úpartialrï   s    r_   rz  z$FunctoolsPartialVariable.python_typet  s   € Ü× Ñ Ð r^   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>x  s   ø€  g×&>Ñ&>¸{ÈIÓ&V€ r^   r<   F)rÝ  ri   r•   Úforeachrõ  rÞ  r   rŠ   rX  r¡   ÚkeysÚcreate_call_function_kw)r}   ro  rý  s    ` r_   rL  z$FunctoolsPartialVariable.reconstructw  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õ	
r^   c                 ó"   — | j                  «       S r�   rE  rï   s    r_   r#  z%FunctoolsPartialVariable.get_function†  ó   € Ø×&Ñ&Ó(Ð(r^   r“   rH   c                 óz   — | j                   |z   }i | j                  ¥|¥}| j                  j                  |||«      S r�   )r•   rõ  ri   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ÐFr^   r¤   c                 óp   — t        j                  |t        t        j                  t
        «      |«      «      S r�   )r@   r²   r@  r  rù  r4   rg  s      r_   rB  z)FunctoolsPartialVariable.call_obj_hasattr“  s)   € ô ×$Ñ$ R¬´×1BÑ1BÄ8Ó1LÈdÓ)SÓTÐTr^   c           
      ó"  — | j                   xr t        | j                   |«      }|dk(  r| j                  S |dk(  r!t        j                  | j
                  |¬«      S |dk(  rX| j                  j                  «       D ��ci c]  \  }}t        j                  ||«      |“Œ }}}t        j                  ||¬«      S |t        v r9t        j                  | |t        t        t        j                   |«      «      ¬«      S t#        t$        |«       y c c}}w )Nri   r•   ró   rõ  r�  )r®   r'   ri   r   r2  r•   rõ  r·   r@   r²   r.  r3   rŸ  rÎ   rÛ   r  rù  r    rÙ   )r}   r“   r¤   r®   r¸   r¹   r·   s          r_   r7  z$FunctoolsPartialVariable.var_getattr™  sä   € ð —‘Ò>¤¨D¯K©K¸Ó!>ˆà�6Š>Ø—9‘9ÐØ�6Š>Ü×*Ñ*¨4¯9©9¸VÔDÐDØ�:ÒØAEÇÁ×ATÑATÓAV×W¹¸¸A”_×*Ñ*¨2¨qÓ1°1Ñ4ÐWˆEÑWÜ×.Ñ.¨u¸VÔDÐDØÔ)Ñ)Ü×,Ñ,Ø�d¤D¬´×1BÑ1BÀDÓ)IÓ$Jôð ô 	!¤°Õ4ùó Xs   Á>!D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 r�   )r  rù  ri   rû   r•   rõ  r·   )r}   rÒ  r¸   r¹   s       r_   rû   z+FunctoolsPartialVariable.as_python_constant«  s   € Ü× Ñ Ø�I‰I×(Ñ(Ó*ð
à26·)±)Ö<¨3ˆc×$Ñ$Õ&Ò<ò
ð 6:·]±]×5HÑ5HÓ5J×K©T¨Q°ˆq�!×&Ñ&Ó(Ñ(ÓKñ
ð 	
ùâ<ùÛKs   ¸B
Á1Bc                 óx  — t        j                  | j                  j                  «       g| j                  D �cg c]  }|j                  «       ‘Œ c}¢­i | j
                  j                  «       D ��ci c]  \  }}||j                  «       “Œ c}}¤Ž}| j                  �| j                  |_        |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ù  ri   Úguard_as_python_constantr•   rõ  r·   rô  Ú
cache_hash)r}   r¹   r¸   rµ   s       r_   r  z1FunctoolsPartialVariable.guard_as_python_constant²  s    € ä×"Ñ"Ø�I‰I×.Ñ.Ó0ð
à48·I±IÖ>¨qˆa×(Ñ(Õ*Ò>ò
ð <@¿=¹=×;NÑ;NÓ;P×Q±4°1°aˆq�!×,Ñ,Ó.Ñ.ÓQñ
ˆð ×#Ñ#Ð/Ø $× 8Ñ 8ˆFÔØˆùò ?ùÛQs   ¸B1
Á1B6rê   c                 óp  — t        |t        «      xr¥ | j                  j                  |j                  «      xr~ t	        d„ t        | j                  |j                  «      D «       «      xrL t	        d„ t        | j                  j                  «       |j                  j                  «       «      D «       «      S )Nc              3   óD   K  — | ]  \  }}|j                  |«      –— Œ y ­wr�   ©r  )rƒ  Úarg_aÚarg_bs      r_   r†  z;FunctoolsPartialVariable.is_python_equal.<locals>.<genexpr>Â  s'   è ø€ ò á"�U˜Eð ×%Ñ% e×,ñùó   ‚ c              3   óD   K  — | ]  \  }}|j                  |«      –— Œ y ­wr�   r  )rƒ  Úvalue_aÚvalue_bs      r_   r†  z;FunctoolsPartialVariable.is_python_equal.<locals>.<genexpr>Æ  s'   è ø€ ò á&�W˜gð ×'Ñ'¨×0ñùr  )	r±   ró  ri   r  r  r‰   r•   rõ  rX  r  s     r_   r  z(FunctoolsPartialVariable.is_python_equal¾  s–   € ä�uÔ6Ó7ò Ø—	‘	×)Ñ)¨%¯*©*Ó5òäñ ä&)¨$¯)©)°U·Z±ZÓ&@ôó òô ñ ä*-Ø—M‘M×(Ñ(Ó*¨E¯N©N×,AÑ,AÓ,Có+ôó ð	
r^   r�   r†  )rZ   r[   r\   r  rù  r  r@   r  r¢   rˆ   rJ  r   r�   rì   rÎ   rz  rL  r#  r>  rB   rB  r7  rû   r  r  rL  r  rM  rN  s   @r_   ró  ró  S  sE  ø„ à×%Ñ%€Mð 	ðà	×	'Ñ	'ð€Nð $(ñ7àð7ð �?Ñ#ð7ð �s˜OÐ+Ñ,ð	7ð
 !ð7ð ð7ð 
õ7ò&7ð
!˜Tó !ó
ð)˜có )ðGà'ðGð �?Ñ#ðGð �S˜/Ð)Ñ*ð	Gð
 
óGðUØ-ðUØ58ðUà	óUð5Ø-ð5Ø58ð5à	ó5ð$
 Có 
ð
¨#ó 
ð
 Vð 
°÷ 
r^   ró  c            
       ó`  ‡ — e Zd Zdddhej                  £Zeej                  dee	de
f   ej                  f   fd„«       «       Zede
dedd fd	„«       Zded
e
ddfˆ fd„Zede	de
f   fd„«       Zdefd„Zde
fd„Zdddee   d
eeef   defd„Zdddedee   d
eeef   def
d„Zde
fd„Zˆ xZS )ÚPolyfilledFunctionVariablerÕ   rñ  Útraceable_fnr`   .c                 ó   — i S r�   r]   )r\  s    r_   Ú_get_polyfill_handlersz1PolyfilledFunctionVariable._get_polyfill_handlers×  rE  r^   rV  r®   c                 óf   — t        |j                  t        j                  «      «        | ||¬«      S rX  rY  r[  s      r_   r]  z-PolyfilledFunctionVariable.create_with_sourceÜ  s*   € ô 	�f×'Ñ'¬×(BÑ(BÓCÔDá�5 Ô(Ð(r^   r–   Nc                 óP  •— t        ‰| �  di |¤Ž || _        | j                  «       j	                  ||«      }d }t        |«      st        d|› d|› �«      ‚dD ]/  }t        ||d «      }|sŒt        |«      st        d|› d�«      ‚|} n t        d|› d�«      ‚|| _	        || _
        y )NzPolyfill handler z is not callable for )Ú__torch_dynamo_polyfill__Ú__python_implementation__zPolyfill candidate z is not callablez# does not have a traceable functionr]   )râ   r�   rÕ   r  r�   ÚcallablerÍ   rÛ   r·  rñ  r  )r}   rÕ   r–   Úhandlerr  Úcandidate_attrÚ	candidaterã   s          €r_   r�   z#PolyfilledFunctionVariable.__init__ä  sÛ   ø€ Ü‰ÑÑ"˜6Ò"àˆŒà×-Ñ-Ó/×3Ñ3°B¸Ó;ˆØˆÜ˜Ô Ü Ð#4°W°IÐ=RÐSUÐRVÐ!WÓXÐXð
ò 	ˆNô   ¨¸Ó>ˆIÚÜ 	Ô*Ü(Ø-¨i¨[Ð8HÐIóð ð  )�Ùð	ô Ø# G 9Ð,OÐPóð ð "ˆŒà ,ˆÕr^   c                 ó   — | j                   S r�   )r  rï   s    r_   Úpolyfill_fnz&PolyfilledFunctionVariable.polyfill_fn  s   € à× Ñ Ð r^   c                 ó0   — t        | j                  dd«      S )NÚ*__torch_dynamo_can_constant_fold_through__F)rÛ   rñ  rï   s    r_   Úcan_constant_fold_throughz4PolyfilledFunctionVariable.can_constant_fold_through  s   € ÜØ�O‰OÐIÈ5ó
ð 	
r^   c                 ó"   — | j                  «       S r�   rE  rï   s    r_   r#  z'PolyfilledFunctionVariable.get_function  r   r^   r“   rH   r•   c                 óF  — | 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].  }|j-                  «       r|j                  «       n|j.                  ‘Œ0 c}«      ¬«      S t        j                  || j0                  «      }|j3                  |t5        |«      t7        |«      «      S c c}w c c}}w c c}w )Nr<   r   c              3   óä   K  — | ]h  }|j                  «       xr t        |j                  «       t        «      xs2 t        |t        j
                  «      xr |j                  «       t        u –— Œj y ­wr�   )r	  r±   rû   rÈ  r   ÚSymNodeVariablerz  )rƒ  rç  s     r_   r†  z;PolyfilledFunctionVariable.call_function.<locals>.<genexpr>%  se   è ø€ ò ð ð ×%Ñ%Ó'ÒS¬J°q×7KÑ7KÓ7MÌsÓ,Sò YÜ˜q¤)×";Ñ";Ó<ÒWÀÇÁÃÔTWÐAWóYñùs   ‚A.A0r>  c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr�   )Úas_proxyrB  s     r_   r†  z;PolyfilledFunctionVariable.call_function.<locals>.<genexpr>0  s   è ø€ Ò?¨A˜1Ÿ:™:Ÿ<Ñ?ùr  )Úsym_num)r$  r2   rÕ   rû   r·   r@   r²   ÚbuiltinsÚsumrŠ   r±   r   rN   r2  r  r(  r´   r½   Úcreate_proxyrb   Úsym_sumr¡   r	  r+  r  r<  r¢   rˆ   )	r}   r“   r•   r–   rç  r¸   r¹   rµ   Ú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¡§¡öð ð  !×3Ñ3Ô5ð ×0Ñ0Ô2à!"§¡ñ+òó	ð 4ó ð ô( '6×&;Ñ&;¸BÀ×@QÑ@QÓ&RÐ#Ø×-Ñ-Ø'Ü�‹JÜ�‹Ló
ð 	
ùòO <ùÛLùò4s   ­HÁHÆ3Hr¤   c                 ó>  — |dk(  r| j                  |||«      S t        | j                  |d «      }|s't        |«      st	        |d|› d| j                  › �«       i }| j
                  rt        | j
                  |«      |d<   t        |fi |¤Ž}|j                  |||«      S )NÚ__call__zCannot find callable z in r®   )r>  rÛ   rÕ   r5   r!   r®   r'   r  )r}   r“   r¤   r•   r–   Úmethodrº  Úpolyfilled_method_variables           r_   r  z&PolyfilledFunctionVariable.call_methodF  sŸ   € ð �:ÒØ×%Ñ% b¨$°Ó7Ð7ä˜Ÿ™ $¨Ó-ˆÙœ+ fÔ-Ü˜RÐ#8¸¸¸dÀ4Ç7Á7À)Ð!LÔMØˆØ�;Š;Ü *¨4¯;©;¸Ó =ˆG�HÑÜ%?ÀÑ%RÈ'Ñ%RÐ"Ø)×7Ñ7¸¸DÀ&ÓIÐIr^   c                 ó   — | j                   S r�   ru  rï   s    r_   rû   z-PolyfilledFunctionVariable.as_python_constantY  rv  r^   )rZ   r[   r\   r@   r  r  r  Úcacherˆ   r   r   rË   r   r  r   r]  rP   r�   Úpropertyr!  rL  r$  r#  r¢   rJ  r>  r  rû   rM  rN  s   @r_   r  r  Ï  sv  ø„ àØØðð 
×	'Ñ	'ð	€Nð Ø‡_�_ð t¨H°S¸#°XÑ,>À×@RÑ@RÐ,RÑ'Sò ó ó ðð ð)Øð)Ø!'ð)à	%ò)ó ð)ð-˜2ð -¨ð -°õ -ð< ð!˜X c¨3 hÑ/ò !ó ð!ð
¨4ó 
ð
)˜có )ð6
à'ð6
ð �?Ñ#ð6
ð �S˜/Ð)Ñ*ð	6
ð
 
ó6
ðpJà'ðJð ðJð �?Ñ#ð	Jð
 �S˜/Ð)Ñ*ðJð 
óJð& C÷ r^   r  c                   óx   ‡ — e Zd Zdededdfˆ fd„Zdefd„Zdd	„Zdddefd
„Z	ddde
e   deeef   defd„Zˆ xZS )ÚSysFunctionVariablerV  r–   r`   Nc                 ó2   •— t        ‰| �  di |¤Ž || _        y rƒ   ©râ   r�   rV  ©r}   rV  r–   rã   s      €r_   r�   zSysFunctionVariable.__init__^  ó   ø€ Ü‰ÑÑ"˜6Ò"Øˆ�
r^   c                 ó"   — t         j                  S r�   )rË   ÚBuiltinFunctionTyperï   s    r_   rz  zSysFunctionVariable.python_typeb  s   € Ü×(Ñ(Ð(r^   r“   rH   c                 ó`  — t        |j                  «      rG|j                  d   }|j                  }|j                  |d«      }t	        j
                  ||«      ||g}n>t        j                  d «      t        j                  d «      t        j                  d «      g}t        j                  |«      S )Nr§  Ú__traceback__)
rŠ   Úexn_vt_stackr…  r7  r@   r²   rB   r´   r   r2  )r}   r“   ÚexnrØ  Útbr·   s         r_   Úexc_infozSysFunctionVariable.exc_infoe  s”   € Üˆr�‰ÔØ—/‘/ "Ñ%ˆCØ—,‘,ˆCØ—‘  _Ó5ˆBÜ$×*Ñ*¨2¨sÓ3°S¸"Ð=‰Eô !×'Ñ'¨Ó-Ü ×'Ñ'¨Ó-Ü ×'Ñ'¨Ó-ðˆEô
 ×&Ñ& uÓ-Ð-r^   c                 ó>   — | j                  |«      j                  d   S )Nr<   )rE  r·   r÷   s     r_   Ú	exceptionzSysFunctionVariable.exceptions  s   € Ø�}‰}˜RÓ ×&Ñ& qÑ)Ð)r^   r•   c                 óæ   — | j                   t        j                  u r| j                  |«      S | j                   t        j                  urt	        d| j                   › �«      ‚| j                  |«      S )Nzexpected sys.exception, got )rV  r  rE  rG  rÍ   r=  s       r_   r>  z!SysFunctionVariable.call_functionv  sY   € ð �:‰:œŸ™Ñ%Ø—=‘= Ó$Ð$à�:‰:œSŸ]™]Ñ*Ü Ð#?ÀÇ
Á
¸|Ð!LÓMÐMØ�~‰~˜bÓ!Ð!r^   )r“   rH   r`   zvariables.TupleVariable)rZ   r[   r\   r   r�   rÎ   rz  rE  r@   rG  r¢   rˆ   rJ  r>  rM  rN  s   @r_   r9  r9  ]  s|   ø„ ð˜cð ¨Sð °Tõ ð)˜Tó )ó.ð*Ð7ð *¸Oó *ð"à'ð"ð �?Ñ#ð"ð �S˜/Ð)Ñ*ð	"ð
 
÷"r^   r9  )Ú create_tma_experimental_metadataÚcreate_tma_stable_metadataÚ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d	deej                  j                  j                  d
f   fd„Zde	deee	f   ddde	fd„Zded
e	f   dee   deeef   ded   de	defd„Zde	ded   de	dedef
d„Zde	ded   dee	   fd„Zdede	fd„Zdddee	   ddfd„Zddde	deee	f   dddd f
d!„Zy")#ÚDynamoTritonHOPifierrÙ  r`   c                 ó(   — t        ddd|› �g ¬«       y )Nz!triton kernel unsupported featurerW  z/Encountered triton kernel unsupported feature: r`  )r#   )r}   rÙ  s     r_   Úraise_unsupportedz&DynamoTritonHOPifier.raise_unsupported�  s   € ÜØ7ØØIÈ#ÈÐOØö		
r^   Úmaybe_callablec                 ó.   — t        |t        t        f«      S r�   )r±   rð  rP  )r}   rQ  s     r_   Úis_callablez DynamoTritonHOPifier.is_callable•  s   € ÜØÔ7Ô9MÐNó
ð 	
r^   r­   c                 ó   — |j                   S r�   r4  )r}   r­   s     r_   Ú	get_valuezDynamoTritonHOPifier.get_valueš  s   € Ø�y‰yÐr^   ÚgridrM   .c                 óž   — ddl m} t        ||«      r|j                  «       S t	        ddt        |«      › �dg t        j                  ¢¬«       y )Nr<   )rM   z/unsupported grid type for triton hop check_gridzgrid type = z;`torch.compile` only supports list-like grid for check_gridr`  )ÚlistsrM   r±   r*  r#   rÎ   r   r÷  )r}   rV  rM   s      r_   Ú
check_gridzDynamoTritonHOPifier.check_grid�  sK   € Ý+ä�dÐ,Ô-Ø—=‘=“?Ð"äØIØ&¤t¨D£z lÐ3ØYðÜ&×2Ñ2ðö	r^   Úmetar“   rH   c                 ó¨   — |j                  «       D ��ci c]  \  }}t        j                  ||«      |“Œ }}}|j                  ||gi «      }|S c c}}w r�   )r·   r@   r²   r>  )r}   rV  rZ  r“   r¸   r¹   Úmeta_vars          r_   Ú	call_gridzDynamoTritonHOPifier.call_grid¬  sV   € ð AEÇ
Á
Ã×M¹¸¸1”O×)Ñ)¨"¨aÓ0°!Ñ3ÐMˆÑMØ×!Ñ! " x j°"Ó5ˆØˆùó Ns   ”!AÚuser_fnr•   r–   r¾  c                 ó\   — ddl m} |j                  ||«      }|j                  |||«      }|S )Nr<   rK  )r]  rL  r´   r>  )	r}   r^  r•   r–   r“   r¾  rL  Úwrapped_user_functionrµ   s	            r_   Úcall_user_defined_fnz)DynamoTritonHOPifier.call_user_defined_fn´  s3   € õ 	/à 1× 8Ñ 8¸¸WÓ EÐØ&×4Ñ4°R¸¸vÓFˆØˆr^   Úuser_objr¤   c                 ót   — ddl m} |€t        d«      ‚  ||t        |j                  |› «      «      |«      }|S )Nr<   )ÚVariableBuilderútx must not be None)r]  rd  rÍ   r'   Úkernel_source)r}   rb  r“   r¾  r¤   rd  Úwrapped_user_objs          r_   Úwrap_user_defined_objz*DynamoTritonHOPifier.wrap_user_defined_objÂ  sK   € õ 	-àˆ:Ü Ð!6Ó7Ð7ð
™?Ø”
˜8×1Ñ1°d°VÓ=ó
à
óÐð  Ðr^   Úconfigsc                 ó~   — |€t        d«      ‚t        ||«      }|D �cg c]  } |j                  «       ‘Œ }}|S c c}w )Nre  )rÍ   r;   r  )r}   ri  r“   r   s       r_   Úmaybe_unpack_configsz)DynamoTritonHOPifier.maybe_unpack_configsÕ  sO   € ð ˆ:Ü Ð!6Ó7Ð7Ü! " gÓ.ˆð DKÖK¸Ð2�6×2Ñ2Õ4ÐKˆÐKàˆùò Ls   ž:rµ   c                 ód   — |j                  «       s| j                  d«       |j                  «       S )Nz`@triton.heuristics must return constant values because configs can only contain constant values.)r	  rP  r  )r}   rµ   s     r_   Úmaybe_unpack_heuristic_resultz2DynamoTritonHOPifier.maybe_unpack_heuristic_resultâ  s0   € Ø×(Ñ(Ô*Ø×"Ñ"Ørôð ×.Ñ.Ó0Ð0r^   ÚTritonKernelVariablec                 óÄ   — |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_idxrV  rf  )rV  rŠ   rP  rÎ   rp  rq  rf  )r}   r¾  r•   s      r_   Úcall_getitemz!DynamoTritonHOPifier.call_getitemì  s^   € ð �=‰=Ð$¬¨D«	°QªØ×"Ñ"ØIôð Œt�H‹~Ø—?‘?Ø×*Ñ*Ø�a‘Ø"×0Ñ0ô	
ð 	
r^   ÚgridsÚcombined_argszvariables.ConstantVariablec                 óF  — ddl m} i }t        |j                  «       «      D ]D  }||   }t	        |t
        t        f«      sŒ|j                  «       ||<   |j                  «       ||<   ŒF |j                  «       D ��ci c]  \  }}t        j                  ||«      |“Œ }	}}ddlm}
m} |j                  «       D ��ci c]6  \  }}t	        |t        «      r!|j                  «       r||j!                  «       “Œ8 }}}|	j                  «       D ��ci c](  \  }}t	        |t        «      r|j                  «       s||“Œ* }}}|j#                  «       D ]R  }|j%                  «       }|j'                  «       rŒ$|j)                  «       rŒ5| j+                  dt-        |«      › d�«       ŒT |
j/                  |«      } ||t0        «      }|j2                  j5                  d|d|j6                  ||||j9                  «       d	œ«       t        j                  |d «      S c c}}w c c}}w c c}}w )
Nr<   )r.  r   )Úkernel_side_tableÚtriton_kernel_wrapper_mutationz.Unexpected argument type for a Triton kernel: rX  r>  r]   )rq  Úconstant_args_idxrV  Útma_descriptor_metadatar–   )Údictsr.  r¢   rý  r±   Ú!TMADescriptorExperimentalVariableÚTMADescriptorStableVariableÚto_metadataÚ
get_tensorr·   r@   r²   Ú*torch._higher_order_ops.triton_kernel_wraprv  rw  r	  rû   rX  Úrealizeré  Úis_symnode_likerP  rú   Úadd_constant_argsrˆ   r½   r.  rq  r*  )r}   r¾  rs  rt  r“   r.  ry  r¸   r¹   Úcombined_args_vtrv  rw  rñ  Únon_constant_argsrx  rZ  s                   r_   Úcall_HOPzDynamoTritonHOPifier.call_HOPþ  s!  € õ 	-ð :<ÐÜ�m×(Ñ(Ó*Ó+ò 	2ˆAØ˜aÑ ˆAÜØÔ5Ô7RÐSõð ./¯]©]«_Ð'¨Ñ*Ø#$§<¡<£>�˜aÒ ð	2ð 9F×8KÑ8KÓ8M÷
Ù04°°1ŒO×!Ñ! " aÓ(¨!Ñ+ð
Ðñ 
÷	
ð &×+Ñ+Ó-÷
á��1Ü˜!œ_Ô-°!×2FÑ2FÔ2Hð ˆq×#Ñ#Ó%Ñ%ð
ˆñ 
ð )×.Ñ.Ó0÷
á��1Ü˜q¤/Ô2°q×7KÑ7KÔ7Mð ˆq‰Dð
Ðñ 
ð #×)Ñ)Ó+ò 	ˆAØ—	‘	“ˆAØ—K‘K•M Q×%6Ñ%6Õ%8Ø×&Ñ&ØDÄTÈ!ÃWÀIÈQÐOõð	ð .×?Ñ?ÀÓNÐÙ Ð!2´DÓ9ˆØ
�	‰	×ÑØØ*Øà&×1Ñ1Ø%6ØØ+BØŸ-™-›/ñô		
ô ×$Ñ$ØØó
ð 	
ùó[
ùó
ùó

s   Á<!HÂ;;HÄ-HN)rZ   r[   r\   rJ  r   rP  r@   rL  rS  r   rU  r¡   rb   ÚfxÚproxyÚProxyrY  rˆ   r]  r   r¢   r
   ra  rh  rk  rm  r   rr  r…  r]   r^   r_   rN  rN  Œ  sÏ  „ ð
 Sð 
¨Uó 
ð
¨/ð 
¸dó 
ð
˜_ð °ó ðÐ1ð °e¸E¿H¹H¿N¹N×<PÑ<PÐRUÐ<UÑ6Vó ðØðØ# C¨ H™~ðØ3Nðà	óðà˜#˜s˜(Ñ#ðð �?Ñ#ðð �S˜/Ð)Ñ*ð	ð
 Ð0Ñ1ðð ðð 
óð àð ð Ð0Ñ1ð ð ð	 ð
 ð ð 
ó ð&ØðØ (Ð)DÑ Eðà	ˆc‰óð1°Oð 1Èó 1ð
à(ð
ð �s‰mð
ð 
 ó	
ð$H
à(ðH
ð ðH
ð ˜C ˜H‘~ð	H
ð
 (ðH
ð 
&ôH
r^   rN  c            
       óø   ‡ — e Zd ZU ded<   ded<   edz  ed<   edz  ed<   dededz  deded	df
ˆ fd
„Zd	efd„Z	ddde
e   deeef   d	efd„Zddded	efd„Zdddede
e   deeef   d	ef
ˆ fd„Zded	efd„Zˆ xZS )rn  rJ   rV  rK   rp  Nrq  rf  r–   r`   c                 ó    •— |j                  d|j                  d«      «      | _        t        ‰| �  di |¤Ž t
        j                  | |||«       y )Nrf  r®   r]   )r›   r�   rf  râ   r�   Ú dynamo_triton_hopifier_singletonÚinit_variable)r}   rp  rq  rV  r–   rã   s        €r_   r�   zTritonKernelVariable.__init__R  sF   ø€ ð $ŸZ™Z¨¸¿¹ÀHÓ9MÓNˆÔÜ‰ÑÑ"˜6Ò"Ü(×6Ñ6°t¸VÀZÐQUÕVr^   c                 ó,   — t        | j                  «      S r�   )rÎ   rp  rï   s    r_   rz  z TritonKernelVariable.python_typeY  s   € Ü�D—K‘KÓ Ð r^   r“   rH   r•   c                 ó2   — t         j                  | |||«      S r�   )r‹  Úcall_triton_kernelr=  s       r_   r>  z"TritonKernelVariable.call_function\  s    € ô 0×BÑBØ�$˜ ó
ð 	
r^   rÔ  c                 ó0   — t         j                  | |g«      S r�   )r‹  rr  )r}   r“   rÔ  s      r_   Úmp_subscript_implz&TritonKernelVariable.mp_subscript_implf  s   € ô 0×<Ñ<¸TÀCÀ5ÓIÐIr^   r¤   c                 ób   •— |dk(  rt         j                  | |||«      S t        ‰| �  ||||«      S )NÚrun)r‹  Úcall_runrâ   r  r  s        €r_   r  z TritonKernelVariable.call_methodn  s<   ø€ ð �5Š=Ü3×<Ñ<¸TÀ4ÈÐQSÓTÐTô ‰wÑ" 2 t¨T°6Ó:Ð:r^   rÒ  c                 óv   — ddl m} ddlm} t	        ||«      r  |j
                  |j                  «       «      S |S )Nr<   rA   )r(  )rº  rB   rÈ  r(  r±   r´   Úevaluate_expr)r}   rÒ  rB   r(  s       r_   Úspecialize_symbolicz(TritonKernelVariable.specialize_symbolic{  s6   € Ý.Ý+ô �c˜?Ô+Ø*Ð#×*Ñ*¨3×+<Ñ+<Ó+>Ó?Ð?Øˆ
r^   )rZ   r[   r\   rÏ   rÈ  r   r   r�   rÎ   rz  r¢   r@   rˆ   rJ  r>  r‘  r  r—  rM  rN  s   @r_   rn  rn  L  s  ø… Ø
ÓØÓØ�d‘
ÓØ˜D‘=Ó ðWØðWØ'*¨T¡zðWØ9<ðWØHKðWà	õWð!˜Tó !ð
à'ð
ð �?Ñ#ð
ð �S˜/Ð)Ñ*ð	
ð
 
ó
ðJà'ðJð ðJð 
ó	Jð;à'ð;ð ð;ð �?Ñ#ð	;ð
 �S˜/Ð)Ñ*ð;ð 
õ;ð sð ¨s÷ r^   rn  c                   ód   ‡ — e Zd Zdddee   dee   dededdfˆ fd	„Zdefd
„Zdd„Zdefd„Z	ˆ xZ
S )r{  Údata_ptrzvariables.DataPtrVariableÚdimsÚ
block_dimsÚelement_sizer–   r`   Nc                 ó¾   •— t        |t        j                  «      st        dt	        |«      › �«      ‚t        ‰| �  di |¤Ž || _        || _        || _	        || _
        y )Nz(data_ptr must be a DataPtrVariable, got r]   )r±   r   ÚDataPtrVariablerÍ   rÎ   râ   r�   r™  rš  r›  rœ  )r}   r™  rš  r›  rœ  r–   rã   s         €r_   r�   z*TMADescriptorExperimentalVariable.__init__†  s`   ø€ ô ˜(¤I×$=Ñ$=Ô>Ü Ø:¼4À»>Ð:JÐKóð ô 	‰ÑÑ"˜6Ò"Ø ˆŒØˆŒ	Ø$ˆŒØ(ˆÕr^   c                 óø   — t        | j                  D �cg c]  }|j                  «       ‘Œ c}| j                  D �cg c]  }|j                  «       ‘Œ c}| j                  j                  «       «      S c c}w c c}w r�   )rI  rš  r*  r›  rœ  )r}   Údims     r_   r}  z-TMADescriptorExperimentalVariable.to_metadata˜  sW   € Ü/Ø'+§y¡yÖ1 ˆS�\‰\�^Ò1Ø'+§¡Ö7 ˆS�\‰\�^Ò7Ø×Ñ×&Ñ&Ó(ó
ð 	
ùÚ1ùÚ7s
   ”A2»A7
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š  rÚ  s   €€r_   r/  z?TMADescriptorExperimentalVariable.reconstruct.<locals>.<lambda>¡  s+   ø€ �G×,Ñ,Ø6Øœ#˜dŸi™i›.Ð)Ð)9Ð:ó€ r^   r<   F)	rÝ  r™  rL  rš  r›  rœ  rü  r>  rŠ   )r}   ro  r•   s   `` r_   rL  z-TMADescriptorExperimentalVariable.reconstructŸ  sp   ù€ Ø×Ñôô	
ð 	�‰×!Ñ! 'Ô*Ø@�—‘Ð@˜TŸ_™_Ð@¨d×.?Ñ.?Ð@ˆØ�‰˜ÔØ×Ñœc $›i¨!™m¨UÕ3r^   c                 ó.   — | j                   j                  S r�   )r™  Úfrom_tensorrï   s    r_   r~  z,TMADescriptorExperimentalVariable.get_tensor«  s   € Ø�}‰}×(Ñ(Ð(r^   r†  )rZ   r[   r\   r¢   r@   r   r�   r}  rL  r~  rM  rN  s   @r_   r{  r{  …  si   ø„ ð)à-ð)ð �?Ñ#ð)ð ˜Ñ)ð	)ð
 &ð)ð ð)ð 
õ)ð$
˜Só 
ó
4ð)˜O÷ )r^   r{  c                   óP   ‡ — e Zd Zdddddeddfˆ fd„Zdefd	„Zdd
„Zdefd„Zˆ xZS )r|  rÈ  rO   Úblock_shaperN   r–   r`   Nc                 óv   •— |j                  «       st        d«      ‚t        ‰| �  di |¤Ž || _        || _        y )Nz tensor argument must be a tensorr]   )ré  rÍ   râ   r�   rÈ  r¨  )r}   rÈ  r¨  r–   rã   s       €r_   r�   z$TMADescriptorStableVariable.__init__°  s<   ø€ ð ×ÑÔ!Ü Ð!CÓDÐDÜ‰ÑÑ"˜6Ò"ØˆŒØ&ˆÕr^   c                 óH   — t        | j                  j                  «       «      S r�   )rJ  r¨  r*  rï   s    r_   r}  z'TMADescriptorStableVariable.to_metadata¼  s!   € Ü)Ø×Ñ×%Ñ%Ó'ó
ð 	
r^   c                 óÌ   ‡— ‰j                  ˆfd„«       ‰j                  d«       | j                  j                  ‰«        ‰| j                  «       ‰j                  d«       y )Nc                  ó(   •— ‰ j                  dd«      S )Nztriton.tools.tensor_descriptorÚTensorDescriptorr!  r  s   €r_   r/  z9TMADescriptorStableVariable.reconstruct.<locals>.<lambda>Ã  s   ø€ �G×,Ñ,Ø0Ø"ó€ r^   r¦  r   )rÝ  Úload_methodrÈ  rL  r¨  r  rn  s    `r_   rL  z'TMADescriptorStableVariable.reconstructÁ  sT   ø€ Ø×Ñóô	
ð 	×Ñ˜MÔ*Ø�‰×Ñ Ô(Ù�× Ñ Ô!Ø×Ñ˜AÕr^   c                 ó   — | j                   S r�   )rÈ  rï   s    r_   r~  z&TMADescriptorStableVariable.get_tensorÍ  rõ   r^   r†  )	rZ   r[   r\   r   r�   r}  rL  r~  rM  rN  s   @r_   r|  r|  ¯  sK   ø„ ð
'à ð
'ð $ð
'ð ð	
'ð
 
õ
'ð
˜Só 
ó

ð˜C÷ r^   r|  c                   ó`   ‡ — e Zd Zdededdfˆ fd„Zdefd„Zddd	ee	   de
ee	f   de	fd
„Zˆ xZS )Ú'CreateTMADescriptorExperimentalVariableÚrankr–   r`   Nc                 óV   •— |dvrt        d|› �«      ‚t        ‰| �  di |¤Ž || _        y )N)r<   r   zrank must be 1 or 2, got r]   )rÍ   râ   r�   r²  )r}   r²  r–   rã   s      €r_   r�   z0CreateTMADescriptorExperimentalVariable.__init__Ò  s7   ø€ ð
 �vÑÜ Ð#<¸T¸FÐ!CÓDÐDÜ‰ÑÑ"˜6Ò"Øˆ�	r^   c                 ó"   — t         j                  S r�   ry  rï   s    r_   rz  z3CreateTMADescriptorExperimentalVariable.python_typeÜ  r{  r^   r“   rH   r•   c                 ó  — d|v r|d   n|d   }t        |t        j                  «      s2t        dd|› d|› �d| j                  › d�d| j                  › d	�g¬
«       | j                  dk(  r]t        |«      t        |«      z   dk7  r$t        |dt        |«      t        |«      z   › �«       d|v r|d   n|d   g}d|v r|d   n|d   g}nvt        |«      t        |«      z   dk7  r$t        |dt        |«      t        |«      z   › �«       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        |t        j                  «      st        dt        |«      › �«      ‚t        ||||¬«      S )NÚptrr   z.invalid ptr argument for create_tma_descriptorzargs = z, kwargs = z#Expected `ptr` argument of `create_z]d_tma_descriptor`to be from a `.data_ptr()` call, represented internally by `DataPtrVariable`z `torch.compile` may fail to internally represent result of `.data_ptr()` with `DataPtrVariable` due to a graph break between the `.data_ptr()` call and `create_zTd_tma_descriptor`. Please ensure there were no graph breaks between these two calls.r`  r<   rR   z6TMA metadata rank=1 requires exactly 4 arguments, got r   Ú	block_dimr   é   z6TMA metadata rank=2 requires exactly 6 arguments, got Údim1Údim0Ú
block_dim1r  Ú
block_dim0rœ  r§  z#ptr must be a DataPtrVariable, got )r™  rš  r›  rœ  )
r±   r   rž  r#   r²  rŠ   r!   rÍ   rÎ   r{  )r}   r“   r•   r–   r¶  rš  r›  rœ  s           r_   r>  z5CreateTMADescriptorExperimentalVariable.call_functionß  sû  € ð  %¨™ˆf�UŠm°D¸±Gˆä˜#œy×8Ñ8Ô9ÜØHØ! $  {°6°(Ð;ØAÀ$Ç)Á)Àð M_ð _ðà#Ÿy™y˜kð */ð/ðõð �9‰9˜Š>Ü�4‹yœ3˜v›;Ñ&¨!Ò+Ü ØØLÌSÐQUËYÔY\Ð]cÓYdÑMdÐLeÐfôð
 "'¨&¡��u’°d¸1±gðˆDð (3°fÑ'<��{Ò#À$ÀqÁ'ð‰Jô �4‹yœ3˜v›;Ñ&¨!Ò+Ü ØØLÌSÐQUËYÔY\Ð]cÓYdÑMdÐLeÐfôð
 #)¨FÑ"2��v’¸¸Q¹Ø"(¨FÑ"2��v’¸¸Q¹ðˆDð
 )5¸Ñ(>��|Ò$ÀDÈÁGØ(4¸Ñ(>��|Ò$ÀDÈÁGðˆJð 2@À6Ñ1I�v˜nÒ-ÈtÐTVÉxˆô ˜#œy×8Ñ8Ô9Ü Ð#FÄtÈCÃyÀkÐ!RÓSÐSä0ØØØ!Ø%ô	
ð 	
r^   )rZ   r[   r\   rÈ  r   r�   rÎ   rz  r¢   r@   rˆ   rJ  r>  rM  rN  s   @r_   r±  r±  Ñ  sj   ø„ ðàðð ðð 
õ	ð"˜Tó "ð;
à'ð;
ð �?Ñ#ð;
ð �S˜/Ð)Ñ*ð	;
ð
 
÷;
r^   r±  c                   ó@   — e Zd Zdefd„Zdddee   deeef   defd„Z	y)	Ú!CreateTMADescriptorStableVariabler`   c                 ó"   — t         j                  S r�   ry  rï   s    r_   rz  z-CreateTMADescriptorStableVariable.python_type  r{  r^   r“   rH   r•   r–   c                 óT   — d|v r|d   n|d   }d|v r|d   n|d   }t        ||¬«      S )NrÈ  r   r¨  r<   )rÈ  r¨  )r|  )r}   r“   r•   r–   rÈ  r¨  s         r_   r>  z/CreateTMADescriptorStableVariable.call_function!  sF   € ð &.°Ñ%7�˜Ò!¸TÀ!¹WˆØ/<ÀÑ/F�f˜]Ò+ÈDÐQRÉGˆä*ØØ#ô
ð 	
r^   N)
rZ   r[   r\   rÎ   rz  r¢   r@   rˆ   rJ  r>  r]   r^   r_   r¾  r¾    sH   „ ð"˜Tó "ð
à'ð
ð �?Ñ#ð
ð �S˜/Ð)Ñ*ð	
ð
 
ô
r^   r¾  c                   ó8   — e Zd ZdZdddee   deeef   defd„Zy)	Ú!PyTreeGetNodeTypeFunctionVariableaW  
    `torch.utils._pytree._get_node_type` function is very hot function. We want to special case it to reduce Dynamo tracing time.

    def _get_node_type(tree: Any) -> Any:
        node_type = type(tree)
        # All namedtuple types are implicitly registered as pytree nodes.
        # XXX: Other parts of the codebase expect namedtuple types always return
        #      `namedtuple` instead of the actual namedtuple type. Even if the type
        #      is explicitly registered.
        if is_namedtuple_class(node_type):
            return collections.namedtuple
        return node_type
    r“   rH   r•   r–   r`   c                 óî  — t        |«      dk7  rt        |dt        |«      › �«       d }|d   j                  rMt        |d   j                  j	                  t
        j                  «      «       t        |d   j                  «      }|d   j                  «       }t        |«      r<t        t        d«      d«      }t        j                  |t        t        «      d   |«      S t        j                  |||¬«      S )Nr<   z6pytree_get_node_type requires exactly 1 argument, got r   ÚcollectionsÚ
namedtupleró   )rŠ   r!   r®   r&   rœ   r%   Ú
TYPE_MATCHr0   rz  r   r'   r-   r@   r²   ÚvarsrÄ  )r}   r“   r•   r–   Útype_sourcerz  s         r_   r>  z/PyTreeGetNodeTypeFunctionVariable.call_function?  sÔ   € ô ˆt‹9˜Š>ÜØÐLÌSÐQUËYÈKÐXôð ˆØ�‰7�>Š>Ü˜$˜q™'Ÿ.™.×3Ñ3´L×4KÑ4KÓLÔMÜ$ T¨!¡W§^¡^Ó4ˆKØ˜1‘g×)Ñ)Ó+ˆÜ˜{Ô+Ü$¤\°-Ó%@À,ÓOˆKÜ"×(Ñ(Ø”DœÓ% lÑ3°[óð ô ×$Ñ$ R¨¸[ÔIÐIr^   N)	rZ   r[   r\   rÑ   r¢   r@   rˆ   rJ  r>  r]   r^   r_   rÂ  rÂ  0  sF   „ ñðJà'ðJð �?Ñ#ðJð �S˜/Ð)Ñ*ð	Jð
 
ôJr^   rÂ  c                   óD   ‡ — e Zd ZdZdddee   deeef   defˆ fd„Zˆ xZ	S )Ú PyTreeTreeIsLeafFunctionVariablea@  
    `torch.utils._pytree.tree_is_leaf` function is a hot function. We want to special case it to reduce Dynamo tracing time.

    def tree_is_leaf(
        tree: PyTree,
        is_leaf: Callable[[PyTree], bool] | None = None,
    ) -> bool:
        if is_leaf is not None and is_leaf(tree):
            return True
        return _get_node_type(tree) not in SUPPORTED_NODES

    When is_leaf is None (the common case), we can optimize by not tracing into the function.
    When is_leaf is not None, we fall back to regular tracing since it requires executing user code.
    r“   rH   r•   r–   r`   c                 ó–  •— t        |«      dk  st        |«      dkD  rt        |dt        |«      › �«       |j                  dt        j                  d «      «      }t        |«      dk(  r|d   }|j                  «       st        ‰	| �  |||«      S |d   }t        t        j                  j                  j                  «      j                  ||gi «      }t        j                  |t        j                  j                  j                  t!        «       ¬«      }|j#                  |d|gi «      }t        j                  ||j$                   «      S )Nr<   r   z,tree_is_leaf requires 1 or 2 arguments, got rT   r   ró   Ú__contains__)rŠ   r!   r�   rB   r´   ry  râ   r>  rÂ  rb   rc   rd   Ú_get_node_typer@   r²   re   rf   r  rV  )
r}   r“   r•   r–   rT   ÚtreeÚnode_type_varÚsupported_nodes_varÚoutrã   s
            €r_   r>  z.PyTreeTreeIsLeafFunctionVariable.call_functionf  s#  ø€ ô ˆt‹9�qŠ=œC ›I¨šMÜØÐBÄ3ÀtÃ9À+ÐNôð
 —*‘*˜YÔ(8×(?Ñ(?ÀÓ(EÓFˆÜˆt‹9˜Š>Ø˜1‘gˆGà×'Ñ'Ô)Ü‘7Ñ(¨¨T°6Ó:Ð:ð �A‰wˆÜ9Ü�K‰K×Ñ×.Ñ.ó
ç
‰-˜˜T˜F BÓ
'ð 	ô .×3Ñ3ØÜ�K‰K×Ñ×/Ñ/Ü4Ó6ô
Ðð
 "×-Ñ-¨b°.À=À/ÐSUÓVˆÜ×$Ñ$ R¨S¯Y©Y¨Ó7Ð7r^   r&  rN  s   @r_   rÊ  rÊ  V  sG   ø„ ñð#8à'ð#8ð �?Ñ#ð#8ð �S˜/Ð)Ñ*ð	#8ð
 
÷#8ñ #8r^   rÊ  c                   óX   ‡ — e Zd ZdZdededdfˆ fd„Zddd	ee   dee	ef   defd
„Z
ˆ xZS )Ú SparseTensorCreationSkipVariablezk
    Skip variable for sparse tensor factory functions with clear messaging regarding lack of support.
    rV  r–   r`   Nc                 ó.   •— d}t        ‰| �  |fd|i|¤Ž y )Nz8sparse tensor creation is not supported in torch.compiler0  )râ   r�   )r}   rV  r–   r0  rã   s       €r_   r�   z)SparseTensorCreationSkipVariable.__init__‘  s   ø€ ØKˆÜ‰Ñ˜Ñ8 vÐ8°Ó8r^   r“   rH   r•   c                 ó¨   — ddl m} t        | j                  dt	        | j                  «      «      }t        dd|› �d|› d�g |j                  ¢¬«       y )	Nr   )r   rZ   z$Sparse tensor creation not supportedz
function: zEtorch.compile does not support sparse tensor creation functions like zZ. Sparse tensors require specialized handling that is not yet implemented in the compiler.r`  )rW  r   rÛ   rV  rJ  r#   ÚSPARSE_TENSOR)r}   r“   r•   r–   r   rÚ  s         r_   r>  z.SparseTensorCreationSkipVariable.call_function•  s]   € õ 	)ä˜$Ÿ*™* j´#°d·j±j³/ÓBˆÜØ:Ø   	Ð*àWÐX_ÐW`ð akð kð 5Ð%×3Ñ3Ð4ö	
r^   )rZ   r[   r\   rÑ   r   r�   r¢   r@   rˆ   rJ  r>  rM  rN  s   @r_   rÓ  rÓ  Œ  s\   ø„ ñð9˜cð 9¨Sð 9°Tõ 9ð
à'ð
ð �?Ñ#ð
ð �S˜/Ð)Ñ*ð	
ð
 
÷
r^   rÓ  Ú	real_implc                 óR  ‡ — ddl mc m} ddlm}m}m} d„ }dg} ||||«      \  }	}
 ||	«      } ||
«      }|j                  di f«      d   }dt        dt        d	t        fˆ fd
„} ||› d�|«       ||› d�|«       ||› d�|«      df}‰ j                  j                  d||i «       y)aI  Emit an invoke_leaf_function node for a side-effectful function with no
    tensor inputs or outputs.

    The function is captured as a closure inside _LeafCallable objects and
    registered as a static attribute on the graph module.  Because
    invoke_leaf_function is registered as EffectType.ORDERED, effect tokens
    prevent DCE and maintain execution ordering relative to other ops.

    Use this when Dynamo needs to preserve a pure-side-effect call (like
    setting global runtime state) in the compiled graph so that it replays
    at the correct position at runtime.
    r   N)Ú_LeafCallableÚinvoke_leaf_functionÚmake_leaf_function_wrappersc                   ó   — y r�   r]   r]   r^   r_   Ú	fake_implz5emit_noargs_leaf_function_to_graph.<locals>.fake_implÁ  rI  r^   r]   r<   Ú	attr_namer­   r`   c                 ót   •— ‰j                   j                  | |«      }t        |«      |j                  _        |S r�   )r½   Ú%register_static_attr_and_return_proxyrÎ   r+  )rÞ  r­   r‡  r“   s      €r_   Ú
make_proxyz6emit_noargs_leaf_function_to_graph.<locals>.make_proxyÍ  s-   ø€ Ø—	‘	×?Ñ?À	È3ÓOˆÜ˜s›)ˆ�
‰
ŒØˆr^   Ú_real_fnÚ_fake_fnÚ_input_specrW  r>  )Útorch.utils._pytreerc   rd   Ú,torch._higher_order_ops.invoke_leaf_functionrÙ  rÚ  rÛ  Útree_flattenrJ  r   r½   r.  )r“   r×  r¤   ÚpytreerÙ  rÚ  rÛ  rÝ  Úcaptured_out_specÚwrapped_realÚwrapped_fakeÚreal_callableÚfake_callableÚ
input_specrá  Úinvoke_argss   `               r_   Ú"emit_noargs_leaf_function_to_graphrð  ©  sÞ   ø€ ÷" )Ð(÷ñ òð 8<°fÐÙ!<Ø�9Ð/ó"Ñ€L�,ñ " ,Ó/€MÙ! ,Ó/€MØ×$Ñ$ b¨" XÓ.¨qÑ1€Jðœcð ¬ð ´õ ñ 	�d�V˜8Ð$ mÓ4Ù�d�V˜8Ð$ mÓ4Ù�d�V˜;Ð'¨Ó4Ø
ð	€Kð ‡I�I×Ñ˜?Ð,@À+ÈrÕRr^   c                   ód   ‡ — e Zd ZdZdededdfˆ fd„Zdefd„Zdd	d
ee	   de
ee	f   de	fd„Zˆ xZS )ÚTritonSetAllocatorVariablezœTrace triton.set_allocator as an invoke_leaf_function node in the
    graph so that it executes at the right point at runtime, ordered by
    effect tokens.rV  r–   r`   Nc                 ó2   •— t        ‰| �  di |¤Ž || _        y rƒ   r;  r<  s      €r_   r�   z#TritonSetAllocatorVariable.__init__à  r=  r^   c                 ó,   — t        | j                  «      S r�   )rÎ   rV  rï   s    r_   rz  z&TritonSetAllocatorVariable.python_typeä  s   € Ü�D—J‘JÓÐr^   r“   rH   r•   c                 óø   ‡‡— t        |«      dk7  rt        dt        |«      › �«      ‚|rt        d«      ‚|d   j                  «       Š| j                  Šˆˆfd„}t	        ||d«       t        j                  d «      S )Nr<   zexpected exactly 1 arg, got zunexpected kwargsr   c                  ó   •—  ‰‰ «       y r�   r]   )Úalloc_fnÚset_allocators   €€r_   r×  z;TritonSetAllocatorVariable.call_function.<locals>.real_implö  s   ø€ Ù˜(Ô#Ør^   Ú	set_alloc)rŠ   rÍ   rû   rV  rð  rB   r´   )r}   r“   r•   r–   r×  r÷  rø  s        @@r_   r>  z(TritonSetAllocatorVariable.call_functionç  sw   ù€ ô ˆt‹9˜Š>Ü Ð#?ÄÀDÃ	¸{Ð!KÓLÐLÙÜ Ð!4Ó5Ð5Ø˜‘7×-Ñ-Ó/ˆð Ÿ
™
ˆõ	ô 	+¨2¨y¸+ÔFä×&Ñ& tÓ,Ð,r^   )rZ   r[   r\   rÑ   r   r�   rÎ   rz  r¢   r@   rˆ   rJ  r>  rM  rN  s   @r_   rò  rò  Û  sh   ø„ ñð˜cð ¨Sð °Tõ ð ˜Tó  ð-à'ð-ð �?Ñ#ð-ð �S˜/Ð)Ñ*ð	-ð
 
÷-r^   rò  c                   ó  ‡ — e Zd ZdZdhej
                  £Zdej                  dededdfˆ fd„Z	de
fd„Zdefd	„Zdej                  fd
„Zdej                  fd„Zddde
defˆ fd„Zdddee   dee
ef   defd„Zdddededdfd„Zˆ xZS )ÚWrapperDescriptorVariablea)  Unbound C slot wrapper (wrapper_descriptor on a type).

    CPython types define behavior through C-level slots on PyTypeObject
    (tp_richcompare, sq_length, nb_add, etc.).  When these slots are
    accessed from Python (e.g. list.__add__), CPython exposes them as
    wrapper_descriptor objects (PyWrapperDescr_Type).  A wrapper_descriptor
    is an unbound descriptor living on the type -- it is not tied to any
    instance.
    https://github.com/python/cpython/blob/3.13/Objects/descrobject.c#L867

    When a wrapper_descriptor is accessed on an instance (e.g. [1,2].__add__),
    its tp_descr_get slot (wrapperdescr_get) is invoked, which calls
    PyWrapper_New to produce a bound method-wrapper (_PyMethodWrapper_Type).
    The tp_descr_get_impl method on this class mirrors that binding step.
    Ú
descriptorr£  r–   r`   Nc                 ó@   •— t        ‰| �  di |¤Ž || _        || _        y rƒ   ©râ   r�   rü  r£  ©r}   rü  r£  r–   rã   s       €r_   r�   z"WrapperDescriptorVariable.__init__  ó#   ø€ ô 	‰ÑÑ"˜6Ò"Ø$ˆŒØˆ�
r^   c                 ó|   — | j                   j                  j                  }d|› d| j                   j                  › d�S )NzWrapperDescriptorVariable(rX  r®  ©rü  Ú__objclass__rZ   ©r}   Úcls_names     r_   r‡  z"WrapperDescriptorVariable.__repr__(  s8   € Ø—?‘?×/Ñ/×8Ñ8ˆØ+¨H¨:°Q°t·±×7OÑ7OÐ6PÐPQÐRÐRr^   c                 ó"   — t         j                  S r�   )rË   ÚWrapperDescriptorTyperï   s    r_   rz  z%WrapperDescriptorVariable.python_type,  s   € Ü×*Ñ*Ð*r^   c                 ó   — | j                   S r�   ©rü  rï   s    r_   rû   z,WrapperDescriptorVariable.as_python_constant/  ó   € Ø�‰Ðr^   c                 ó   — | j                   S r�   r	  rï   s    r_   rr  z6WrapperDescriptorVariable.get_real_python_backed_value2  r
  r^   r“   rH   r¤   c                 óò   •— |dk(  r*t        j                  || j                  j                  «      S |dk(  r3t        j
                  j                  | j                  j                  «      S t        ‰| �%  ||«      S ©Nr  rZ   ©
r@   r²   rü  r  r   rB   r´   rZ   râ   r7  rÆ  s      €r_   r7  z%WrapperDescriptorVariable.var_getattr5  óe   ø€ ð �>Ò!Ü"×(Ñ(¨¨T¯_©_×-IÑ-IÓJÐJØ�:ÒÜ×-Ñ-×4Ñ4°T·_±_×5MÑ5MÓNÐNÜ‰wÑ" 2 tÓ,Ð,r^   r•   c                 ó  — |sEt        |d| j                  j                  › d| j                  j                  j                  › d�«       |^}}| j                  j                  || j                  j                  |g|¢|«      S )Núdescriptor 'ú' of 'ú' object needs an argument)r!   rü  rZ   r  r£  r  )r}   r“   r•   r–   r¢  rì  s         r_   r>  z'WrapperDescriptorVariable.call_function>  s…   € ñ ÜØØ˜tŸ™×7Ñ7Ð8ð 9Ø—O‘O×0Ñ0×9Ñ9Ð:Ð:TðVôð
 ˆ
ˆˆdð
 �z‰z×%Ñ%Ø�—‘×(Ñ(¨3¨,°¨,¸ó
ð 	
r^   r¢  ÚMethodWrapperVariablec                 óF   — t        | j                  || j                  ¬«      S rX  )r  rü  r®   ©r}   r“   r¢  r£  s       r_   r¦  z+WrapperDescriptorVariable.tp_descr_get_implV  s   € ô % T§_¡_°cÀ$Ç+Á+ÔNÐNr^   )rZ   r[   r\   rÑ   r@   r  rË   r  r   r�   rJ  r‡  rÎ   rz  rû   rr  r7  r¢   rˆ   r>  r¦  rM  rN  s   @r_   rû  rû    s  ø„ ñð" 	ðà	×	'Ñ	'ð€Nð
à×/Ñ/ðð ðð ð	ð
 
õðS˜#ó Sð+˜Tó +ð E×$?Ñ$?ó ð¨e×.IÑ.Ió ð-Ø-ð-Ø58ð-à	õ-ð
à'ð
ð �?Ñ#ð
ð �S˜/Ð)Ñ*ð	
ð
 
ó
ð0
Oà'ð
Oð ð
Oð ð	
Oð
 
!÷
Or^   rû  c                   ó@  ‡ — e Zd ZdZdhej
                  £Zdej                  dededdfˆ fd„Z	de
fd„Zdefd	„Zdej                  fd
„Zdefd„Zdej                  fd„Zdddee   dee
ef   defd„Zdd„Zdedeeef   fˆ fd„Zddddde
ddfd„Zdedefd„Zˆ xZS )r  a'  Bound method-wrapper (wrapper_descriptor bound to an instance).

    Produced by WrapperDescriptorVariable.tp_descr_get_impl, mirroring
    PyWrapper_New which stores a reference to the descriptor and the instance.
    https://github.com/python/cpython/blob/3.13/Objects/descrobject.c#L1450
    rü  r¢  r–   r`   Nc                 ó@   •— t        ‰| �  di |¤Ž || _        || _        y rƒ   ©râ   r�   rü  r¢  ©r}   rü  r¢  r–   rã   s       €r_   r�   zMethodWrapperVariable.__init__p  s#   ø€ ô 	‰ÑÑ"˜6Ò"Ø$ˆŒØˆ�r^   c                 ó–   — | j                   j                  j                  }d|› d| j                   j                  › d| j                  › d�S )NzMethodWrapperVariable(rX  r­  r®  )rü  r  rZ   r¢  r  s     r_   r‡  zMethodWrapperVariable.__repr__z  sD   € Ø—?‘?×/Ñ/×8Ñ8ˆà$ X J¨a°·±×0HÑ0HÐ/IÈÈDÏHÉHÈ:ÐUVÐWð	
r^   c                 ó"   — t         j                  S r�   )rË   ÚMethodWrapperTyperï   s    r_   rz  z!MethodWrapperVariable.python_type€  ó   € Ü×&Ñ&Ð&r^   c                 ó"   — | j                  «       S r�   rE  rï   s    r_   rr  z2MethodWrapperVariable.get_real_python_backed_valueƒ  r   r^   c                 ó6   — | j                   j                  «       S r�   )r¢  r	  rï   s    r_   r	  z(MethodWrapperVariable.is_python_constant†  s   € Ø�x‰x×*Ñ*Ó,Ð,r^   c                 óh   — | j                   j                  | j                  j                  «       «      S r�   )rü  rœ  r¢  rû   rï   s    r_   rû   z(MethodWrapperVariable.as_python_constant‰  s$   € Ø�‰×&Ñ& t§x¡x×'BÑ'BÓ'DÓEÐEr^   r“   rH   r•   c                 óÖ  — 	 | j                  «       }|�‹t        |«      r€|r~t        |d   t        j
                  «      rat        |«      dk(  rt        |«      dk(  st        |d«       t        t        |j                  «      }|d   j                  ||j                  «      S | j                  j                  || j                  j                  t!        |«      |«      S # t        $ r d }Y ŒÕw xY w)Nr   r<   z2tensor attribute getter takes exactly one argument)rû   r  r7   r±   r   rO   rŠ   r!   r   r   r}  r7  rZ   r¢  r  rü  r¢   )r}   r“   r•   r–   Úmethod_wrapperrü  s         r_   r>  z#MethodWrapperVariable.call_functionŒ  sÐ   € ð	"Ø!×4Ñ4Ó6ˆNð Ð&Ü*¨>Ô:ÙÜ˜4 ™7¤I×$<Ñ$<Ô=ä˜“I ’N¤s¨6£{°aÒ'7Ü ØÐLôô
 œc >×#:Ñ#:Ó;ˆJØ˜‘7×&Ñ& r¨:×+>Ñ+>Ó?Ð?à�x‰x×#Ñ# B¨¯©×(@Ñ(@Ä$ÀtÃ*ÈfÓUÐUøô# #ò 	"Ø!ŠNð	"ús   ‚C ÃC(Ã'C(c                 ó�   —  || j                   «       |j                  |j                  | j                  j                  «      «       y r�   ©r¢  rÞ  Úcreate_load_attrsrü  rZ   rn  s     r_   rL  z!MethodWrapperVariable.reconstruct§  ó1   € Ù�—‘ÔØ×Ñ˜g×7Ñ7¸¿¹×8PÑ8PÓQÕRr^   c                 óx   •— 	 t        | j                  «       «      dfS # t        $ r t        ‰| �  |«      cY S w xY wr=  )r©  rû   r  râ   r¯  )r}   r“   rã   s     €r_   r¯  zMethodWrapperVariable.hash_impl«  sB   ø€ ð	)ô ˜×/Ñ/Ó1Ó2°EÐ9Ð9øÜ"ò 	)Ü‘7Ñ$ RÓ(Ò(ð	)ús   ƒ ž9¸9rê   r@   rë   c                 ó$   — ddl m}  || |||«      S ©Nr<   )Ú python_constant_richcompare_impl©rè   r+  ©r}   r“   rê   rë   r+  s        r_   rì   z&MethodWrapperVariable.richcompare_impl³  ó   € õ 	Fá/°°b¸%ÀÓDÐDr^   c                 ó†   — t        |t        «      sy	 | j                  «       |j                  «       k(  S # t        $ r Y yw xY wr=  )r±   r@   rû   r  r  s     r_   r  z%MethodWrapperVariable.is_python_equalº  sC   € Ü˜%¤Ô1Øð	Ø×*Ñ*Ó,°×0HÑ0HÓ0JÑJÐJøÜ"ò 	Ùð	ús   “ 4 ´	A ¿A r†  )rZ   r[   r\   rÑ   r@   r  rË   r  r   r�   rJ  r‡  rÎ   rz  r  rr  rL  r	  rû   r¢   rˆ   r>  rL  r¡   rÈ  r¯  rì   r  r  rM  rN  s   @r_   r  r  c  s;  ø„ ñð 	ðà	×	'Ñ	'ð€Nð
à×/Ñ/ðð ðð ð	ð
 
õð
˜#ó 
ð'˜Tó 'ð)¨e×.EÑ.Eó )ð- Dó -ðF E×$;Ñ$;ó FðVà'ðVð �?Ñ#ðVð �S˜/Ð)Ñ*ð	Vð
 
óVó6Sð)˜Cð ) E¨#¨t¨)Ñ$4õ )ðEØ-ðEØ6GðEØMPðEà	óEð Vð °÷ r^   r  c                   ó  ‡ — e Zd ZdZdhej
                  £Zdej                  dededdfˆ fd„Z	de
fd„Zdefd	„Zdej                  fd
„Zdej                  fd„Zddde
defˆ fd„Zdddee   dee
ef   defd„Zdddededdfd„Zˆ xZS )ÚMethodDescriptorVariablea  Unbound C method descriptor (method_descriptor on a type).

    CPython types expose their PyMethodDef-based C methods as
    method_descriptor objects (PyMethodDescr_Type) in the type's tp_dict.
    For example, list.append and dict.get are method_descriptors.  Like
    wrapper_descriptors, these are unbound descriptors living on the type.
    https://github.com/python/cpython/blob/3.13/Objects/descrobject.c#L716

    When a method_descriptor is accessed on an instance (e.g. [].append),
    its tp_descr_get slot (method_get) is invoked, which calls
    PyCFunction_NewEx to produce a bound builtin_function_or_method
    (PyCFunction_Type).  The tp_descr_get_impl method mirrors that step.
    https://github.com/python/cpython/blob/3.13/Objects/descrobject.c#L137-L159
    rü  r£  r–   r`   Nc                 ó@   •— t        ‰| �  di |¤Ž || _        || _        y rƒ   rþ  rÿ  s       €r_   r�   z!MethodDescriptorVariable.__init__Ø  r   r^   c                 ó|   — | j                   j                  j                  }d|› d| j                   j                  › d�S )NzMethodDescriptorVariable(rX  r®  r  r  s     r_   r‡  z!MethodDescriptorVariable.__repr__â  ó7   € Ø—?‘?×/Ñ/×8Ñ8ˆØ*¨8¨*°A°d·o±o×6NÑ6NÐ5OÈqÐQÐQr^   c                 ó"   — t         j                  S r�   )rË   ÚMethodDescriptorTyperï   s    r_   rz  z$MethodDescriptorVariable.python_typeæ  ó   € Ü×)Ñ)Ð)r^   c                 ó   — | j                   S r�   r	  rï   s    r_   rû   z+MethodDescriptorVariable.as_python_constanté  r
  r^   c                 ó   — | j                   S r�   r	  rï   s    r_   rr  z5MethodDescriptorVariable.get_real_python_backed_valueì  r
  r^   r“   rH   r¤   c                 óò   •— |dk(  r*t        j                  || j                  j                  «      S |dk(  r3t        j
                  j                  | j                  j                  «      S t        ‰| �%  ||«      S r  r  rÆ  s      €r_   r7  z$MethodDescriptorVariable.var_getattrï  r  r^   r•   c           
      ó  — |sEt        |d| j                  j                  › d| j                  j                  j                  › d�«       |^}}| j                  j                  }	 |j	                  «       }t        || j                  j                  «      s>t        |d|› d| j                  j                  j                  › d|j                  › d�«       | j                  j                  |||g|¢|«      S # t        $ r Y Œ,w xY w)Nr  r  r  z' for 'z' objects doesn't apply to a 'z' object)	r!   rü  rZ   r  rz  r.  r  r£  r  )r}   r“   r•   r–   r¢  rì  r¤   Úobj_types           r_   r>  z&MethodDescriptorVariable.call_functionø  s  € ñ ÜØØ˜tŸ™×7Ñ7Ð8ð 9Ø—O‘O×0Ñ0×9Ñ9Ð:Ð:TðVôð
 ˆ
ˆˆdØ�‰×'Ñ'ˆð
	Ø—‘Ó(ˆHÜ˜h¨¯©×(DÑ(DÔEÜ ØØ" 4 &ð )ØŸ™×4Ñ4×=Ñ=Ð>ð ?+Ø+3×+<Ñ+<Ð*=¸XðGôð �z‰z×%Ñ% b¨$°°°t°¸fÓEÐEøô #ò 	Ùð	ús   Á#A.C2 Ã2	C>Ã=C>r¢  ÚBoundBuiltinMethodVariablec                 óF   — t        | j                  || j                  ¬«      S rX  ©r=  rü  r®   r  s       r_   r¦  z*MethodDescriptorVariable.tp_descr_get_impl  s   € ô *¨$¯/©/¸3ÀtÇ{Á{ÔSÐSr^   )rZ   r[   r\   rÑ   r@   r  rË   r6  r   r�   rJ  r‡  rÎ   rz  rû   rr  r7  r¢   rˆ   r>  r¦  rM  rN  s   @r_   r1  r1  Ã  s  ø„ ñð  	ðà	×	'Ñ	'ð€Nð
à×.Ñ.ðð ðð ð	ð
 
õðR˜#ó Rð*˜Tó *ð E×$>Ñ$>ó ð¨e×.HÑ.Hó ð-Ø-ð-Ø58ð-à	õ-ðFà'ðFð �?Ñ#ðFð �S˜/Ð)Ñ*ð	Fð
 
óFð@
Tà'ð
Tð ð
Tð ð	
Tð
 
&÷
Tr^   r1  c                   óî   ‡ — e Zd ZdZdhej
                  £Zdej                  ej                  z  ej                  z  dede
ddfˆ fd„Zdefd„Zdefd	„Zde
fd
„Zdddee   deeef   defd„Zdd„Zˆ xZS )r=  aè  Bound builtin_function_or_method (PyCFunction_Type).

    Produced by MethodDescriptorVariable.tp_descr_get_impl (binding a
    method_descriptor to an instance, e.g. [].append) or created by the
    builder for bound C methods (e.g. frozenset().__contains__,
    tuple.__new__).  The backing descriptor can be a MethodDescriptorType
    or a BuiltinFunctionType (for methods stored directly in type dicts).
    https://github.com/python/cpython/blob/3.13/Objects/methodobject.c#L331
    rü  r¢  r–   r`   Nc                 ó@   •— t        ‰| �  di |¤Ž || _        || _        y rƒ   r  r  s       €r_   r�   z#BoundBuiltinMethodVariable.__init__5  s#   ø€ ô 	‰ÑÑ"˜6Ò"Ø$ˆŒØˆ�r^   c                 óš   — t        t        | j                  dd «      dd«      }d|› d| j                  j                  › d| j                  › d�S )Nr  rZ   ú?zBoundBuiltinMethodVariable(rX  r­  r®  )rÛ   rü  rZ   r¢  r  s     r_   r‡  z#BoundBuiltinMethodVariable.__repr__A  sR   € ÜÜ�D—O‘O ^°TÓ:¸JÈó
ˆð -¨X¨J°a¸¿¹×8PÑ8PÐ7QÐQSÐTX×T\ÑT\ÐS]Ð]^Ð_Ð_r^   c                 ó"   — t         j                  S r�   )rË   ÚBuiltinMethodTyperï   s    r_   rz  z&BoundBuiltinMethodVariable.python_typeG  r  r^   c                 óX  — | j                   j                  «       }t        | j                  t        j
                  «      r| j                  j                  d |«      S t        | j                  d«      r| j                  j                  |«      S t        || j                  j                  «      S )Nrœ  )
r¢  rû   r±   rü  rË   ÚClassMethodDescriptorTyperœ  r@  rÛ   rZ   )r}   r¢  s     r_   rû   z-BoundBuiltinMethodVariable.as_python_constantJ  sy   € Ø�h‰h×)Ñ)Ó+ˆÜ�d—o‘o¤u×'FÑ'FÔGØ—?‘?×*Ñ*¨4°Ó5Ð5Ü�4—?‘? IÔ.Ø—?‘?×*Ñ*¨3Ó/Ð/Ü�s˜DŸO™O×4Ñ4Ó5Ð5r^   r“   rH   r•   c                 óx   — | j                   j                  || j                  j                  t	        |«      |«      S r�   )r¢  r  rü  rZ   r¢   r=  s       r_   r>  z(BoundBuiltinMethodVariable.call_functionR  s-   € ð �x‰x×#Ñ# B¨¯©×(@Ñ(@Ä$ÀtÃ*ÈfÓUÐUr^   c                 ó�   —  || j                   «       |j                  |j                  | j                  j                  «      «       y r�   r%  rn  s     r_   rL  z&BoundBuiltinMethodVariable.reconstructZ  r'  r^   r†  )rZ   r[   r\   rÑ   r@   r  rË   r6  r?  rG  r   r�   rJ  r‡  rÎ   rz  rû   r¢   rˆ   r>  rL  rM  rN  s   @r_   r=  r=  %  sÚ   ø„ ñð 	ðà	×	'Ñ	'ð€Nð

à×.Ñ.Ø
×
#Ñ
#ñ$à
×
)Ñ
)ñ*ð
ð
 ð
ð ð
ð 
õ
ð`˜#ó `ð'˜Tó 'ð6 Có 6ðVà'ðVð �?Ñ#ðVð �S˜/Ð)Ñ*ð	Vð
 
óV÷Sr^   r=  c                   óê   ‡ — e Zd ZdZdhej
                  £Zdej                  deddfˆ fd„Z	de
fd„Zdefd„Zdej                  fd	„Zdej                  fd
„Zddde
defˆ fd„Zdddededefd„Zˆ xZS )ÚClassMethodDescriptorVariableay  C-level classmethod descriptor (classmethod_descriptor on a type).

    CPython exposes C classmethods defined via PyMethodDef with METH_CLASS
    as classmethod_descriptor objects (PyClassMethodDescr_Type).  For
    example, dict.fromkeys is a classmethod_descriptor.  Like
    method_descriptor, these live on the type and are unbound.
    https://github.com/python/cpython/blob/3.13/Objects/descrobject.c#L756

    classmethod_get binds the C method to the class (ignoring obj) via
    PyCMethod_New, producing a bound builtin_function_or_method.
    https://github.com/python/cpython/blob/3.13/Objects/descrobject.c#L94-L134
    rü  r–   r`   Nc                 ó2   •— t        ‰| �  di |¤Ž || _        y rƒ   ©râ   r�   rü  ©r}   rü  r–   rã   s      €r_   r�   z&ClassMethodDescriptorVariable.__init__r  ó   ø€ ô
 	‰ÑÑ"˜6Ò"Ø$ˆ�r^   c                 ó|   — | j                   j                  j                  }d|› d| j                   j                  › d�S )NzClassMethodDescriptorVariable(rX  r®  r  r  s     r_   r‡  z&ClassMethodDescriptorVariable.__repr__z  s8   € Ø—?‘?×/Ñ/×8Ñ8ˆØ/°¨z¸¸4¿?¹?×;SÑ;SÐ:TÐTUÐVÐVr^   c                 ó"   — t         j                  S r�   )rË   rG  rï   s    r_   rz  z)ClassMethodDescriptorVariable.python_type~  s   € Ü×.Ñ.Ð.r^   c                 ó   — | j                   S r�   r	  rï   s    r_   rû   z0ClassMethodDescriptorVariable.as_python_constant�  r
  r^   c                 ó   — | j                   S r�   r	  rï   s    r_   rr  z:ClassMethodDescriptorVariable.get_real_python_backed_value„  r
  r^   r“   rH   r¤   c                 óò   •— |dk(  r*t        j                  || j                  j                  «      S |dk(  r3t        j
                  j                  | j                  j                  «      S t        ‰| �%  ||«      S r  r  rÆ  s      €r_   r7  z)ClassMethodDescriptorVariable.var_getattr‡  óe   ø€ ð �>Ò!Ü"×(Ñ(¨¨T¯_©_×-IÑ-IÓJÐJØ�:ÒÜ×-Ñ-×4Ñ4°T·_±_×5MÑ5MÓNÐNÜ‰wÑ" 2 tÓ,Ð,r^   r¢  r£  c                 óF   — t        | j                  || j                  ¬«      S rX  r?  r  s       r_   r¦  z/ClassMethodDescriptorVariable.tp_descr_get_impl“  s   € ô *¨$¯/©/¸5ÈÏÉÔUÐUr^   )rZ   r[   r\   rÑ   r@   r  rË   rG  r   r�   rJ  r‡  rÎ   rz  rû   rr  r7  r=  r¦  rM  rN  s   @r_   rK  rK  _  sÔ   ø„ ñð 	ðà	×	'Ñ	'ð€Nð
%à×3Ñ3ð%ð ð%ð 
õ	%ðW˜#ó Wð/˜Tó /ð E×$CÑ$Có ð¨e×.MÑ.Mó ð
-Ø-ð
-Ø58ð
-à	õ
-ð	Và'ð	Vð ð	Vð ð		Vð
 
$÷	Vr^   rK  c                   ó�   ‡ — e Zd ZdZdhej
                  £Zdededdfˆ fd„Zde	fd„Z
defd„Zdefd	„Zd
ddedz  dedefd„Zˆ xZS )ÚStaticMethodVariableaƒ  staticmethod descriptor wrapping a callable.

    CPython's staticmethod (PyStaticMethod_Type) is a non-data descriptor
    whose tp_descr_get (sm_descr_get) simply returns the wrapped callable,
    ignoring both obj and type.
    https://github.com/python/cpython/blob/3.13/Objects/funcobject.c#L1520
    https://github.com/python/cpython/blob/3.13/Objects/funcobject.c#L1418-L1428
    rü  r–   r`   Nc                 ó2   •— t        ‰| �  di |¤Ž || _        y rƒ   rM  rN  s      €r_   r�   zStaticMethodVariable.__init__®  rO  r^   c                 óP   — t        | j                  j                  dd«      }d|› d�S )NrZ   rC  zStaticMethodVariable(r®  ©rÛ   rü  r£  ©r}   Ú	func_names     r_   r‡  zStaticMethodVariable.__repr__¶  s)   € Ü˜DŸO™O×4Ñ4°jÀ#ÓFˆ	Ø& y k°Ð3Ð3r^   c                 ó   — t         S r�   )rê  rï   s    r_   rz  z StaticMethodVariable.python_typeº  r*  r^   c                 ó   — | j                   S r�   r	  rï   s    r_   rû   z'StaticMethodVariable.as_python_constant½  r
  r^   r“   rH   r¢  r£  c                 ó    — | j                   rt        | j                   d«      nd }t        j                  || j                  j
                  |«      S )Nr£  )r®   r'   r@   r²   rü  r£  )r}   r“   r¢  r£  Úfunc_sources        r_   r¦  z&StaticMethodVariable.tp_descr_get_implÀ  s<   € ð >B¿[º[”j §¡¨jÔ9ÈdˆÜ×$Ñ$ R¨¯©×)AÑ)AÀ;ÓOÐOr^   )rZ   r[   r\   rÑ   r@   r  rê  r   r�   rJ  r‡  rÎ   rz  rû   r¦  rM  rN  s   @r_   rX  rX  Ÿ  sœ   ø„ ñð 	ðà	×	'Ñ	'ð€Nð
%à ð%ð ð%ð 
õ	%ð4˜#ó 4ð˜Tó ð Ló ð	Pà'ð	Pð ˜tÑ#ð	Pð ð		Pð
 
÷	Pr^   rX  c                   óŠ   ‡ — e Zd ZdZdhej
                  £Zdededdfˆ fd„Zde	fd„Z
defd„Zdefd	„Zd
ddededefd„Zˆ xZS )ÚClassMethodVariablea•  classmethod descriptor wrapping a callable.

    CPython's classmethod (PyClassMethod_Type) is a non-data descriptor
    whose tp_descr_get (cm_descr_get) creates a bound method of the
    wrapped callable bound to the class (via PyMethod_New).
    https://github.com/python/cpython/blob/3.13/Objects/funcobject.c#L1314
    https://github.com/python/cpython/blob/3.13/Objects/funcobject.c#L1215-L1227
    rü  r–   r`   Nc                 ó2   •— t        ‰| �  di |¤Ž || _        y rƒ   rM  rN  s      €r_   r�   zClassMethodVariable.__init__Û  rO  r^   c                 óP   — t        | j                  j                  dd«      }d|› d�S )NrZ   rC  zClassMethodVariable(r®  r[  r\  s     r_   r‡  zClassMethodVariable.__repr__ã  s)   € Ü˜DŸO™O×4Ñ4°jÀ#ÓFˆ	Ø% i [°Ð2Ð2r^   c                 ó   — t         S r�   )r  rï   s    r_   rz  zClassMethodVariable.python_typeç  s   € ÜÐr^   c                 ó   — | j                   S r�   r	  rï   s    r_   rû   z&ClassMethodVariable.as_python_constantê  r
  r^   r“   rH   r¢  r£  c                 ó  — | j                   rt        | j                   d«      nd }|j                   r4t        |j                   | j                  j                  j                  «      nd }t        | j                  j                  |||¬«      S )Nr£  r¥  )r®   r'   rü  r£  rZ   rŠ  )r}   r“   r¢  r£  ra  Úbound_sources         r_   r¦  z%ClassMethodVariable.tp_descr_get_implí  ss   € ð >B¿[º[”j §¡¨jÔ9Èdˆð �|Š|ô �u—|‘| T§_¡_×%=Ñ%=×%FÑ%FÔGàð 	ô
 "Ø�O‰O×$Ñ$ØØ!Øô	
ð 	
r^   )rZ   r[   r\   rÑ   r@   r  r  r   r�   rJ  r‡  rÎ   rz  rû   r¦  rM  rN  s   @r_   rc  rc  Ì  s’   ø„ ñð 	ðà	×	'Ñ	'ð€Nð
%àð%ð ð%ð 
õ	%ð3˜#ó 3ð˜Tó ð Kó ð
à'ð
ð ð
ð ð	
ð
 
÷
r^   rc  c                   óÊ   ‡ — e Zd ZdZdhej
                  £Zdej                  deddfˆ fd„Z	de
fd„Zdefd„Zdej                  fd	„Zd
dde
defˆ fd„Zd
ddededefd„Zˆ xZS )ÚMemberDescriptorVariableaù  C struct field descriptor (member_descriptor on a type).

    CPython exposes C struct fields defined via PyMemberDef as
    member_descriptor objects (PyMemberDescr_Type).  These are data
    descriptors used by __slots__ and C extension types to provide
    direct access to struct members.
    https://github.com/python/cpython/blob/3.13/Objects/descrobject.c#L793

    member_get reads the field via PyMember_GetOne.
    https://github.com/python/cpython/blob/3.13/Objects/descrobject.c#L162-L180
    rü  r–   r`   Nc                 ó2   •— t        ‰| �  di |¤Ž || _        y rƒ   rM  rN  s      €r_   r�   z!MemberDescriptorVariable.__init__  rO  r^   c                 ó|   — | j                   j                  j                  }d|› d| j                   j                  › d�S )NzMemberDescriptorVariable(rX  r®  r  r  s     r_   r‡  z!MemberDescriptorVariable.__repr__  r4  r^   c                 ó"   — t         j                  S r�   )rË   ÚMemberDescriptorTyperï   s    r_   rz  z$MemberDescriptorVariable.python_type!  r7  r^   c                 ó   — | j                   S r�   r	  rï   s    r_   rû   z+MemberDescriptorVariable.as_python_constant$  r
  r^   r“   rH   r¤   c                 óò   •— |dk(  r*t        j                  || j                  j                  «      S |dk(  r3t        j
                  j                  | j                  j                  «      S t        ‰| �%  ||«      S r  r  rÆ  s      €r_   r7  z$MemberDescriptorVariable.var_getattr'  rU  r^   r¢  r£  c           
      óÖ  — | j                   j                  }t        |dd «      }|€	 |j                  «       }	 | j                   j                  |«      }|j                  xr t        |j                  |«      }t        j                  ||«      S # t        $ r |j                  ||«      cY S w xY w# t        $ r0 t        t        |dt        |«      j                  › d|› d�g¬«       Y Œ”w xY w)NrV  ú'ú' object has no attribute 'rï  )rü  rZ   rÛ   rû   r  r7  rœ  rÙ   r    rÎ   r®   r'   r@   r²   )r}   r“   r¢  r£  rÞ  Ú	obj_valueÚresolvedÚresult_sources           r_   r¦  z*MemberDescriptorVariable.tp_descr_get_impl3  sç   € ð —O‘O×,Ñ,ˆ	Ü˜C ¨$Ó/ˆ	ØÐð6Ø×2Ñ2Ó4�	ð		Ø—‘×.Ñ.¨yÓ9ˆHð Ÿ
™
ÒH¤z°#·*±*¸iÓ'HˆÜ×$Ñ$ R¨°=ÓAÐAøô 'ò 6Ø—‘ r¨9Ó5Ò5ð6ûô ò 	Ü$ÜØàœ˜Y›×0Ñ0Ð1Ð1LÈYÈKÐWXÐYð÷ð	ús"   §B ¸B/ ÂB,Â+B,Â/6C(Ã'C()rZ   r[   r\   rÑ   r@   r  rË   ro  r   r�   rJ  r‡  rÎ   rz  rû   r7  r¦  rM  rN  s   @r_   rk  rk    sÂ   ø„ ñ
ð 	ðà	×	'Ñ	'ð€Nð
%à×.Ñ.ð%ð ð%ð 
õ	%ðR˜#ó Rð*˜Tó *ð E×$>Ñ$>ó ð
-Ø-ð
-Ø58ð
-à	õ
-ðBà'ðBð ðBð ð	Bð
 
÷Br^   rk  c                   ó  ‡ — e Zd ZdZdhej
                  £Zdej                  deddfˆ fd„Z	de
fd„Zdej                  fd„Zd	d
de
defˆ fd„Zdefd„Zdej                  fd„Zd	d
ddde
ddfd„Zd	d
dededefd„Zˆ xZS )ÚGetSetDescriptorVariableaÿ  C getter/setter descriptor (getset_descriptor on a type).

    CPython exposes C getter/setter pairs defined via PyGetSetDef as
    getset_descriptor objects (PyGetSetDescr_Type).  These are data
    descriptors used for computed attributes backed by C functions
    (e.g. object.__class__, type.__dict__).
    https://github.com/python/cpython/blob/3.13/Objects/descrobject.c#L830

    getset_get calls the C getter function.
    https://github.com/python/cpython/blob/3.13/Objects/descrobject.c#L183-L197
    rü  r–   r`   Nc                 ó2   •— t        ‰| �  di |¤Ž || _        y rƒ   rM  rN  s      €r_   r�   z!GetSetDescriptorVariable.__init__c  s   ø€ Ü‰ÑÑ"˜6Ò"Ø$ˆ�r^   c                 ó|   — | j                   j                  j                  }d|› d| j                   j                  › d�S )NzGetSetDescriptorVariable(rX  r®  r  r  s     r_   r‡  z!GetSetDescriptorVariable.__repr__g  r4  r^   c                 ó   — | j                   S r�   r	  rï   s    r_   rr  z5GetSetDescriptorVariable.get_real_python_backed_valuek  r
  r^   r“   rH   r¤   c                 ón  •— |dk(  rM| j                   rAt        | j                   d«      }t        j                  || j                  j
                  |«      S |dv rO| j                   xr t        | j                   |«      }t        j                  |t        | j                  |«      |«      S t        ‰| �!  ||«      S )Nrœ  )r  rZ   )	r®   r'   r@   r²   rü  rœ  rÛ   râ   r7  r   s       €r_   r7  z$GetSetDescriptorVariable.var_getattrn  s–   ø€ ð �9Ò §¢Ü §¡¨YÓ7ˆFÜ"×(Ñ(¨¨T¯_©_×-DÑ-DÀfÓMÐMØÐ1Ñ1Ø—[‘[ÒB¤Z°·±¸TÓ%BˆFÜ"×(Ñ(¨¬W°T·_±_ÀdÓ-KÈVÓTÐTä‘7Ñ& r¨4Ó0Ð0r^   c                  ó   — yrG  r]   rï   s    r_   r	  z+GetSetDescriptorVariable.is_python_constantz  rI  r^   c                 ó   — | j                   S r�   r	  rï   s    r_   rû   z+GetSetDescriptorVariable.as_python_constant}  r
  r^   rê   r@   rë   c                 ó$   — ddl m}  || |||«      S r*  r,  r-  s        r_   rì   z)GetSetDescriptorVariable.richcompare_impl€  r.  r^   r¢  r£  c           
      óÆ  — | j                   j                  }t        |dd «      }|€	 |j                  «       }	 | j                   j                  |«      }|j                  xr t        |j                  |«      }|j                  rk| j                   j                  t        u rO|dv rKt        j                  t        |«      |d «      }|| j                   urd }n|dk(  rt        |j                  «      }t!        j"                  ||«      S # t        $ r |j                  ||«      cY S w xY w# t        $ r1 t        t        |dt        |«      j                  › d|› d�g¬«       Y �Œw xY w)NrV  rs  rt  rï  )rÏ   r)  Ú__mro__r‚  )rü  rZ   rÛ   rû   r  r7  rœ  rÙ   r    rÎ   r®   r'   r  r×   rØ   r/   r@   r²   )	r}   r“   r¢  r£  rÞ  ru  rv  rw  Ústatic_descs	            r_   r¦  z*GetSetDescriptorVariable.tp_descr_get_impl‡  sQ  € ð —O‘O×,Ñ,ˆ	ô
 ˜C ¨$Ó/ˆ	ØÐð6Ø×2Ñ2Ó4�	ð		Ø—‘×.Ñ.¨yÓ9ˆHð Ÿ
™
ÒH¤z°#·*±*¸iÓ'Hˆà�JŠJØ—‘×,Ñ,´Ñ4ØÐGÑGô
 "×0Ñ0´°i³À)ÈTÓRˆKØ $§/¡/Ñ1Ø $‘Ø˜iÒ'Ü -¨c¯j©jÓ 9�Ü×$Ñ$ R¨°=ÓAÐAøô5 'ò 6Ø—‘ r¨9Ó5Ò5ð6ûô ò 	Ü$ÜØàœ˜Y›×0Ñ0Ð1Ð1LÈYÈKÐWXÐYð÷ð ð	ús"   §D ¸D& ÄD#Ä"D#Ä&6E ÅE )rZ   r[   r\   rÑ   r@   r  rË   ÚGetSetDescriptorTyper   r�   rJ  r‡  rr  r7  rL  r	  rû   rì   r¦  rM  rN  s   @r_   ry  ry  Q  sø   ø„ ñ
ð 	ðà	×	'Ñ	'ð€Nð
% 5×#=Ñ#=ð %Èð %ÐQUõ %ðR˜#ó Rð¨e×.HÑ.Hó ð
1Ø-ð
1Ø58ð
1à	õ
1ð Dó ð E×$>Ñ$>ó ðEØ-ðEØ6GðEØMPðEà	óEð+Bà'ð+Bð ð+Bð ð	+Bð
 
÷+Br^   ry  c                   ó�   ‡ — e Zd ZdZdhej
                  £Zdededdfˆ fd„Zde	fd„Z
defd„Zdefd	„Zd
ddedz  dedefd„Zˆ xZS )ÚPropertyVariableaA  Python property descriptor.

    The property type is a data descriptor with tp_descr_get =
    property_descr_get which calls fget(obj) to compute the value.
    https://github.com/python/cpython/blob/3.13/Objects/descrobject.c#L2073
    https://github.com/python/cpython/blob/3.13/Objects/descrobject.c#L1660-L1693
    rü  r–   r`   Nc                 ó2   •— t        ‰| �  di |¤Ž || _        y rƒ   rM  rN  s      €r_   r�   zPropertyVariable.__init__Ã  rO  r^   c                 óP   — t        | j                  j                  dd«      }d|› d�S )NrZ   rC  zPropertyVariable(r®  )rÛ   rü  Úfget)r}   Ú	fget_names     r_   r‡  zPropertyVariable.__repr__Ë  s)   € Ü˜DŸO™O×0Ñ0°*¸cÓBˆ	Ø" 9 +¨QÐ/Ð/r^   c                 ó   — t         S r�   )r7  rï   s    r_   rz  zPropertyVariable.python_typeÏ  s   € Üˆr^   c                 ó   — | j                   S r�   r	  rï   s    r_   rû   z#PropertyVariable.as_python_constantÒ  r
  r^   r“   rH   r¢  r£  c                 óÔ   — |€| S | j                   rt        | j                   d«      nd }t        j                  || j                  j
                  |d¬«      }|j                  ||gi «      S )Nr‰  T)r®   r€  )r®   r'   r@   r²   rü  r‰  r>  )r}   r“   r¢  r£  Úfget_sourceÚfget_vts         r_   r¦  z"PropertyVariable.tp_descr_get_implÕ  sb   € ð ˆ;ØˆKØ9=¿º”j §¡¨fÔ5È$ˆÜ!×'Ñ'Ø�—‘×$Ñ$¨[À$ô
ˆð ×$Ñ$ R¨#¨°Ó3Ð3r^   )rZ   r[   r\   rÑ   r@   r  r7  r   r�   rJ  r‡  rÎ   rz  rû   r¦  rM  rN  s   @r_   r†  r†  µ  s—   ø„ ñð 	ðà	×	'Ñ	'ð€Nð
%àð%ð ð%ð 
õ	%ð0˜#ó 0ð˜Tó ð Hó ð4à'ð4ð ˜tÑ#ð4ð ð	4ð
 
÷4r^   r†  c                   ó¤   ‡ — e Zd ZdZdhej
                  £Zdddeddfˆ fd„Zdefd„Z	de
fd	„Zdd
„Zdddedefˆ fd„Zdddedz  dedefd„Zˆ xZS )ÚTupleGetterVariablea¨  _tuplegetter descriptor used by namedtuple for field access.

    _tuplegetter is a C data descriptor that stores an index and returns
    self[index] on instance access. When accessed on the class (obj=None),
    it returns the descriptor itself.
    https://github.com/python/cpython/blob/3.13/Modules/_collectionsmodule.c#L2735
    https://github.com/python/cpython/blob/3.13/Modules/_collectionsmodule.c#L2636-L2663
    rü  ú_collections._tuplegetterr–   r`   Nc                 ó2   •— t        ‰| �  di |¤Ž || _        y rƒ   rM  rN  s      €r_   r�   zTupleGetterVariable.__init__õ  rO  r^   c                 óT   — | j                   j                  «       \  }\  }}d|› d|›d�S )NzTupleGetterVariable(index=z, doc=r®  )rü  Ú
__reduce__)r}   r  r¨   Údocs       r_   r‡  zTupleGetterVariable.__repr__ý  s1   € ØŸ™×2Ñ2Ó4‰ˆ‰:ˆC�Ø+¨C¨5°°s°g¸QÐ?Ð?r^   c                 ó"   — t         j                  S r�   )Ú_collectionsÚ_tuplegetterrï   s    r_   rz  zTupleGetterVariable.python_type  s   € Ü×(Ñ(Ð(r^   c                 ó   — | j                   S r�   r	  rï   s    r_   rû   z&TupleGetterVariable.as_python_constant  r
  r^   r“   rH   r¤   c                 ó‚   •— |dk(  r*t        j                  || j                  j                  «      S t        ‰| �  ||«      S )NrÑ   )r@   r²   rü  rÑ   râ   r7  rÆ  s      €r_   r7  zTupleGetterVariable.var_getattr  s<   ø€ ð �9ÒÜ"×(Ñ(¨¨T¯_©_×-DÑ-DÓEÐEÜ‰wÑ" 2 tÓ,Ð,r^   r¢  r£  c                 ó®   — |€| S | j                   j                  «       \  }\  }}|j                  |dt        j                  j                  |«      gi «      S )NÚ__getitem__)rü  r•  r  r   rB   r´   )r}   r“   r¢  r£  r  r¨   s         r_   r¦  z%TupleGetterVariable.tp_descr_get_impl  sV   € ð ˆ;ØˆKØ—o‘o×0Ñ0Ó2‰ˆ‰8ˆC�Ø�‰Ø�¤	× :Ñ :× AÑ AÀ#Ó FÐGÈó
ð 	
r^   )r`   r’  )rZ   r[   r\   rÑ   r@   r  r   r�   rJ  r‡  rÎ   rz  rû   r7  r¦  rM  rN  s   @r_   r‘  r‘  æ  s¯   ø„ ñð 	ðà	×	'Ñ	'ð€Nð
%à/ð%ð ð%ð 
õ	%ð@˜#ó @ð)˜Tó )óð-Ø-ð-Ø58ð-à	õ-ð
à'ð
ð ˜tÑ#ð
ð ð	
ð
 
÷
r^   r‘  r�   )ÎrÑ   r˜  r,  rÄ  r  Úimportlib.metadatarR  Úimportlib.utilr×   rÌ   rŽ  r‰  Úrer  rŒ  rË   r  Úcollections.abcr   r   r   r   r   r   r	   r
   r   r   Útyping_extensionsr   Úweakrefr   rb   Útorch._dynamo.excr   Útorch._guardsr   rå  r   rW  r   r   r   r   Úbytecode_transformationr   r   r   rk  r   r   r   r   r   r   r    r!   r"   r#   r$   Úguardsr%   r&   r®   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   rc   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   rü  r=   r>   r?   r@   rº  rB   Úuser_definedrC   Ú#torch.distributed.fsdp._fully_shardrD   ÚModuleNotFoundErrorÚtorch._dynamo.codegenrE   rH  rF   rG   rH   Ú#torch._dynamo.variables.ctx_managerrI   r  rJ   rK   rz  rL   rX  rM   rN   rÈ  rO   rP   ry   r{   r  rá  r÷  r]  rW   rÏ   r  rY   Ú	lru_cacherf   rh   r’   rˆ   rJ  r¬   rš   rº   rK  rÃ   r¡   r  rÐ   rÚ   rÝ   rß   rP  r!  rú  r5  r‰  r‹  rœ  rŠ  rÊ  rá  r¢   rÈ  rð  r)  ÚsearchÚmatchÚ	fullmatchÚcompileÚsubÚsubnr‡  ÚfindallÚescaperW  r/  ro  ru  r¤  r¯  r´  r¶  rì  ró  r  r9  rI  rJ  rK  rL  rN  r‹  rn  r{  r|  r±  r¾  rÂ  rÊ  rÓ  rð  rò  rû  r  r1  r=  rK  rX  rc  rk  ry  r†  r‘  r]   r^   r_   ú<module>r¶     sø  ðòó. Û Û Û Û Û Û Û Û Û 	Û 	Û 
Û Û Û ß .ß (ß G× GÝ #Ý %ã Ý 4Ý  Ý 3ç >Ó >ß VÑ V÷÷ ÷ ñ ÷ 1÷÷ ÷ ÷÷ ÷ ñ ÷ó õ 'Ý 3ðÝEñ
 Ý/÷ñ õ
 L÷õ
 *ß5Ý&ñ ˆT˜ # s (Ñ+Ô,€Ø€
Ø€Ù&Ò'OÓPÐ Ù"+¨Y¨KÓ"8Ð ð DÐ ñ ,=Ó+>€Ð˜s C˜xÑ(Ó >ô	Ð0ô 	ð ×Ñð¨:ò ó ð÷
ñ 
ð>�Lð  \ó ð\Ø
ð\à#ð\ð ˜‰}ð\ð �3‰-ð	\ð
 ��c�‰Nð\ð 
ˆ#ˆÐ
Ñó\ð@ HLñHØ#ðHØ*-ðHØ7=À±}ðHàóHð.Ð4ð .¸dÀ3ÈÀ8¹nð .ÐQUó .ð Ø'ð à��oÐ%Ñ&ð ð �.Š.ð ð 
ó	 ð*Ø
�.Š.ðà�C˜�H‰~ðð ðð �F˜C�KÑ  4Ñ'ð	ð
 �8‰_˜tÑ#ðð �S˜#�X‘ Ñ%ðð �c˜3�h‘ $Ñ&ðð ×Ñóò:Ð ð-Ø#ð-Ø)/ð-Ø9?À$¹ð-ØNQð-àó-ô:W˜ô WôttYÐ3ô tYôn!7Ð3ô !7ôH)Ð":ô )ôXC; ?ô C;ôL

Ø ô
ôU6Ð%=ô U6ôp#Ø"ô#ôLIÐ-ô IôX >Ð 2ô  >ôF>Ð"6ô >ðD$Ø#ð$à��c�Ñð$ð ð$ð ˆÑ
ð	$ð
 ��oÐ%Ñ&ð$ð ó$ôNe)Ð!9ô e)ôP	.>Ð(Bô .>ðd ‡I‚IØ‡H‚HØ‡L‚LØ‡J‚JØ‡F‚FØ‡G‚GØ‡H‚HØ‡J‚JØ‡I‚Ið
Ð ôS
˜?ô S
ôl >Ð"6ô  >ôFs=Ð":ô s=ôlÐ ;ô ð0 d¨3°¨8¡nó ð
/Ø#ð
/Ø)1°#°s°(Ñ);ð
/àó
/ônDÐ(<ô nDôb"
Ð$8ô "
ôJy
˜ô y
ôxK ô Kô\$"˜/ô $"÷Nó ôz
˜>ô z
ñz $8Ó#9Ð  ô6˜?ô 6ôr')¨ô ')ôT /ô ôDI
¨oô I
ôX
¨ô 
ô&#JÐ(<ô #JôL38Ð';ô 38ôl
Ð';ô 
ð:/SØ#ð/Sà˜˜D˜Ñ!ð/Sð ð/Sð 
ó	/Sôd!- ô !-ôZXO ô XOôv]˜Oô ]ô@_T˜ô _TôD7S ô 7Sôt=V Oô =Vô@*P˜?ô *PôZ4
˜/ô 4
ônKB˜ô KBô\aB˜ô aBôH.4�ô .4ôb4
˜/õ 4
øðK ò ØÓðús   ÄT
 Ô
TÔT