Ë
    ÃÓ^jðó  ã                   ó˜  — 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mZm	Z	 ddlm
Z
mZ ddlZddlmZmZmZmZmZmZ ddlmZmZ ddlmZmZmZmZmZ dd	lmZ d
dlm Z m!Z! d
dl"m#Z# erddl$m%Z% de!de!ddfd„Z&ddde!de!de'de
f
d„Z( ed¬«      de)de*e+e+e+e+f   fd„«       Z,de)de+de-fd„Z.de)de+de-fd„Z/ e	e.ej`                  ¬ «      Z1 e	e.ejd                  ¬ «      Z3 e	e.ejh                  ¬ «      Z5 e	e.ejl                  ¬ «      Z7 e	e.ejp                  ¬ «      Z9 e	e.ejt                  ¬ «      Z; e	e.ejx                  ¬ «      Z= e	e.ej|                  ¬ «      Z? e	e/ej€                  ¬ «      ZA e	e/ej„                  ¬ «      ZC e	e/ejˆ                  ¬ «      ZE e	e/ej€                  ¬ «      ZAde)de+de-fd!„ZF e	eFejŽ                  ¬ «      ZH e	eFej’                  ¬ «      ZJ e	eFej–                  ¬ «      ZL e	eFejš                  ¬ «      ZN e	eFejž                  ¬ «      ZP e	eFej¢                  ¬ «      ZR e	eFej¦                  ¬ «      ZT e	eFejª                  ¬ «      ZV e	eFej®                  ¬ «      ZX e	eFej²                  ¬ «      ZZ e	eFej¶                  ¬ «      Z\ e	eFejº                  ¬ «      Z^ e	eFej¾                  ¬ «      Z` e	eFejÂ                  ¬ «      Zb e	eFejÆ                  ¬ «      Zd e	eFejÊ                  ¬ «      Zf e	eFejÎ                  ¬ «      Zh e	eFejÒ                  ¬ «      Zj e	eFejÖ                  ¬ «      Zl e	eFejÚ                  ¬ «      Zn e	eFejÞ                  ¬ «      Zp e	eFejâ                  ¬ «      Zr e	eFejæ                  ¬ «      Zt e	eFejê                  ¬ «      Zv e	eFejî                  ¬ «      Zx e	eFejò                  ¬ «      Zz e	eFejö                  ¬ «      Z| e	eFejú                  ¬ «      Z~ e	eFejþ                  ¬ «      Z€ e	eFe�j                  ¬ «      Z‚ e	eFe�j                  ¬ «      Z„ e	eFe�j
                  ¬ «      Z† e	eFe�j                  ¬ «      Zˆ e	eFe�j                  ¬ «      ZŠde)de-fd"„Z‹de)de-fd#„ZŒde)de-fd$„Z�de)de-fd%„ZŽde)de-f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!d,e'de!fd-„Z“	 	 	 	 	 	 d’d/„Z”	 	 	 	 	 	 d’d0„Z•ddd)e!de!fd1„Z– e—«       Z˜e—e+   e™d2<   ddd)e!de!fd3„Zš	 	 	 	 	 	 d’d4„Z›ddd)e!d+e!de!fd5„Zœddd)e!d6e!de!fd7„Z�ddd8e!d9e!d:e!de!f
d;„Zžddd:e!d+e!d<e!de!f
d=„ZŸddd8e!d9e!de!fd>„Z ddd:e!d+e!de!fd?„Z¡ddd)e!de!fd@„Z¢ddd)e!de!fdA„Z£ddd)e!dd.fdB„Z¤ddd)e!de!fdC„Z¥ddd)e!de!fdD„Z¦ddd)e!de!fdE„Z§d)e!de-fdF„Z¨ddd)e!dd.fdG„Z©i dHej¶                  “dIejæ                  “dJejê                  “dKejº                  “dLejÆ                  “dMejö                  “dNej’                  “dOejÖ                  “dPejŽ                  “dQejÒ                  “dRej–                  “dSejÚ                  “dTej¾                  “dUejî                  “dVejÂ                  “dWejò                  “dXejú                  “e�j                  ejþ                  e�j                  ejš                  ejÞ                  e�jT                  dYœ¥Z«dZe!de-fd[„Z¬de!de!de-fd\„Z­ddde!de!d]e'de!f
d^„Z®ddde!de!d]e'de'de!fd_„Z¯ddde!de!d`e'd]e'de!fda„Z°ddde!de!d`e'd]e'de'de!fdb„Z±ddde!de!de!fdc„Z²ddde!de!de!fdd„Z³dddee!dfe!de!fdg„Z´dddee!dfe!de!fdh„Zµdddie!ddfdj„Z¶ddde!de!de!fdk„Z·ddde!de!de!fdl„Z¸	 d“dddme!dne!doe-de!f
dp„Z¹dddme!dne!de!fdq„Zºe¬Z»dme!dddne!dre'de!f
ds„Z¼dme!dddne!dre'de!f
dt„Z½dudvdwdxdydzd{œZ¾e¿e'e'f   e™d|<   d}d~dd€d�d‚dƒœZÀe¿e'e'f   e™d„<   ddde!de!dre'de!f
d…„ZÁddde!de!dre'de!f
d†„ZÂddd)e!de*e+e-f   fd‡„ZÃddd)e!de!fdˆ„ZÄ	 	 	 	 	 	 	 	 d”d‰„ZÅe�jŒ                  e�jŽ                  �j�                  e�j’                  fZÊe*e)dŠf   e™d‹<   dddŒe!d�e!de!fdŽ„ZËddd�e!d�e!de*e!e!f   fd‘„ZÌy)•a3  
Dynamo implementations of CPython's PyObject_* default slot algorithms.

Analogous to CPython's Objects/object.c, this module holds the general
dispatch machinery that is independent of any specific type.
Per-type hook implementations (bool_impl, richcompare_impl, etc.)
live in their respective VT files.
é    N)Ú	lru_cacheÚpartial)ÚNoReturnÚTYPE_CHECKING)Úget_type_slotsÚhas_slotÚPyMappingSlotsÚPyNumberSlotsÚPySequenceSlotsÚPyTypeSlotsé   )Úgraph_break_hintsÚ	polyfills)Úhandle_observed_exceptionÚObservedTypeErrorÚraise_observed_exceptionÚraise_type_errorÚunimplemented)Úistypeé   )ÚNO_SUCH_SUBOBJÚVariableTracker©ÚConstantVariable)ÚInstructionTranslatorBaseÚleftÚrightÚreturnzVariableTracker | Nonec                 óò  — | |u rt        j                  d«      S | j                  «       }|j                  «       }|t        u}|t        u}|r0|r.||u rt        j                  d«      S t        j                  d«      S ||k7  rt        j                  d«      S ddlm} ddlm} ddlm	} ddl
m}	 t        | |||	|f«      rt        j                  d«      S 	 | j                  «       |j                  «       urt        j                  d«      S 	 dd	lm}
 t#        | |
j$                  «      rCt#        ||
j$                  «      r-| j&                  |j&                  urt        j                  d«      S y
# t        $ r Y Œkw xY w)zÈTry to determine Python identity (left is right) at trace time.

    Returns ConstantVariable(True/False) if determinable, else None.
    Mirrors the logic in BuiltinVariable's handle_is handler.
    TFr   )ÚConstDictVariable)ÚListVariable)ÚTracebackVariable)ÚSetVariabler   )Ú	variablesN)r   ÚcreateÚget_real_python_backed_valuer   Údictsr    Úlistsr!   Úmiscr"   Úsetsr#   Ú
isinstanceÚpython_typeÚNotImplementedErrorÚ r$   r   ÚExceptionVariableÚexc_type)r   r   Úleft_valÚ	right_valÚ
left_knownÚright_knownr    r!   r"   r#   r$   s              úr/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_dynamo/variables/object_protocol.pyÚvt_identity_comparer6   .   sm  € ð ˆu�}Ü×&Ñ& tÓ,Ð,à×0Ñ0Ó2€HØ×2Ñ2Ó4€IØ¤Ð/€JØ¤>Ð1€Ká‘kð ˜9Ñ$ô ×#Ñ# DÓ)ð	
ô "×(Ñ(¨Ó/ð	
ð �[Ò Ü×&Ñ& uÓ-Ð-õ )Ý#Ý'Ý!äØÐ  ,°Ð=NÐOôô  ×&Ñ& uÓ-Ð-ðØ×ÑÓ U×%6Ñ%6Ó%8Ñ8Ü#×*Ñ*¨5Ó1Ð1ð 9õ ô 	ˆt�Y×0Ñ0Ô1Ü�5˜)×5Ñ5Ô6Ø�M‰M §¡Ñ/ä×&Ñ& uÓ-Ð-àøô ò Ùðús   Ã4E* Å*	E6Å5E6Útxr   ÚvÚwÚ	op_symbolc           
      óh   — t        | d|› d|j                  «       › d|j                  «       › d�«       y )Nz unsupported operand type(s) for z: 'ú' and 'ú')r   Úpython_type_name)r7   r8   r9   r:   s       r5   Úbinop_type_errorr?   j   s=   € ô Ø
Ø
*¨9¨+°S¸×9KÑ9KÓ9MÐ8NÈgÐVW×VhÑVhÓVjÐUkÐklÐmõó    é   )ÚmaxsizeÚobj_typec                 ó   — t        | «      S )z'Get all type slots for a type (cached).)r   ©rC   s    r5   Ú_get_cached_slotsrF   v   s   € ô ˜(Ó#Ð#r@   Úslotc                 ó:   — t        | «      \  }}}}t        ||«      S )z4Check whether obj_type implements the given sq slot.©rF   r   )rC   rG   Ú	seq_slotsÚ_s       r5   Útype_implements_sq_slotrL   |   s"   € ä*¨8Ó4Ñ€Iˆq�!�QÜ�I˜tÓ$Ð$r@   c                 ó:   — t        | «      \  }}}}t        ||«      S )z4Check whether obj_type implements the given mp slot.rI   )rC   rG   rK   Ú	map_slotss       r5   Útype_implements_mp_slotrO   ‚   s"   € ä*¨8Ó4Ñ€A€y�!�QÜ�I˜tÓ$Ð$r@   )rG   c                 ó:   — t        | «      \  }}}}t        ||«      S )z.Check whether obj_type implements the nb slot.rI   )rC   rG   rK   Únumber_slotss       r5   Útype_implements_nb_slotrR   °   s"   € ä-¨hÓ7Ñ€A€qˆ,˜Ü�L $Ó'Ð'r@   c                 óV   — t        | «      \  }}}}t        |t        j                  «      S ©N)rF   r   r   ÚTP_ITER©rC   rK   Ú	type_slots      r5   Útype_implements_tp_iterrX     s(   € Ü*¨8Ó4Ñ€A€qˆ!ˆYÜ�Iœ{×2Ñ2Ó3Ð3r@   c                 óV   — t        | «      \  }}}}t        |t        j                  «      S rT   )rF   r   r   ÚTP_ITERNEXTrV   s      r5   Útype_implements_tp_iternextr[     s(   € Ü*¨8Ó4Ñ€A€qˆ!ˆYÜ�Iœ{×6Ñ6Ó7Ð7r@   c                 óV   — t        | «      \  }}}}t        |t        j                  «      S )z3Check whether obj_type implements the tp_repr slot.)rF   r   r   ÚTP_REPRrV   s      r5   Útype_implements_tp_reprr^     s(   € ä*¨8Ó4Ñ€A€qˆ!ˆYÜ�Iœ{×2Ñ2Ó3Ð3r@   c                 óV   — t        | «      \  }}}}t        |t        j                  «      S )z2Check whether obj_type implements the tp_str slot.)rF   r   r   ÚTP_STRrV   s      r5   Útype_implements_tp_strra     s(   € ä*¨8Ó4Ñ€A€qˆ!ˆYÜ�Iœ{×1Ñ1Ó2Ð2r@   c                 ó   — t        | «      S rT   )r[   rE   s    r5   Úpyiter_checkrc   "  s   € ô ' xÓ0Ð0r@   c                 ó:   — t        | t        «      ryt        | «      S )zBImplements PySequence_Check semantics for VariableTracker objects.F)Ú
issubclassÚdictÚtype_implements_sq_itemrE   s    r5   Úpysequence_checkrh   )  s   € ô �(œDÔ!ØÜ" 8Ó,Ð,r@   c                 ó   — t        | «      S )z@Implements _PyIndex_Check semantics for VariableTracker objects.)Útype_implements_nb_indexrE   s    r5   Úpyindex_checkrk   1  s   € ô $ HÓ-Ð-r@   Úobjc                 ó†   — 	 | j                  «       S # t        $ r% t        d| › d�dg t        j                  ¢¬«       Y y w xY w)NzUnsupported python_type() callz! does not implement python_type()zhThis VariableTracker does not implement python_type(), which is required for object protocol operations.©Úgb_typeÚcontextÚexplanationÚhints)r,   r-   r   r   Ú
DYNAMO_BUG)rl   s    r5   Úmaybe_get_python_typert   7  sR   € ð
Ø�‰Ó Ð øÜò 	
ÜØ4Ø�eÐ<Ð=ð@ðÜ"×-Ñ-ð÷	
ð	
ús   ‚ ’+A ¿A ÚkeyÚcontainer_namec                 óÆ   — t        |«      }|t        t        t        fvrBt	        |«      s&t        t        | |› d|j                  «       › �g¬«       |j                  | «      }|S )uÀ   _PyIndex_Check â†’ nb_index path used by list/tuple/range/str/bytes subscript.

    ref: https://github.com/python/cpython/blob/v3.13.3/Include/internal/pycore_abstract.h (_PyIndex_Check)
    z) indices must be integers or slices, not ©Úargs)	rt   ÚintÚboolÚslicerj   r   Ú	TypeErrorr>   Únb_index_impl)r7   ru   rv   Úkey_types       r5   Úvalidate_sequence_indexr€   F  sj   € ô % SÓ)€HØœœT¤5Ð)Ñ)Ü'¨Ô1Ü$ÜØà%Ð&Ð&OÐPS×PdÑPdÓPfÐOgÐhðõð ×Ñ Ó#ˆØ€Jr@   r   c                 óÞ   — t        |«      }t        |«      r|j                  | «      S t        |«      rt	        | |j                  «       › d�«       t	        | d|j                  «       › d�«       y )Nz is not a mappingzobject of type z has no len())rt   Útype_implements_mp_lengthÚ	mp_lengthÚtype_implements_sq_lengthr   r>   ©r7   rl   ÚTs      r5   Úvt_mapping_sizer‡   ]  sf   € ô 	˜cÓ"€AÜ  Ô#Ø�}‰}˜RÓ Ð ä  Ô#Ü˜ × 4Ñ 4Ó 6Ð7Ð7HÐIÔJä�R˜?¨3×+?Ñ+?Ó+AÐ*BÀ-ÐPÕQr@   c                 óh   — t        |«      }t        |«      r|j                  | «      S t        | |«      S )z³
    Implements PyObject_Size/PyObject_Length semantics for VariableTracker objects.
    Dispatches to sq_length (sequences) or mp_length (mappings) depending on the VT type.
    )rt   r„   Ú	sq_lengthr‡   r…   s      r5   Úgeneric_lenrŠ   k  s2   € ô 	˜cÓ"€AÜ  Ô#Ø�}‰}˜RÓ Ð Ü˜2˜sÓ#Ð#r@   c                 óœ  — ddl m} |j                  «       r*	  |j                  t	        |j                  «       «      «      S t        |«      }t        |«      r|j                  | «      }|�|S 	 t        | |«      }ddlm} t!        ||«      r#|j                  | |j#                  «       dkD  «      S |j                  «       }|dk  rt        t$        | dg¬«        |j                  |dkD  «      S # t        $ r+}t        t        |«      | t        |«      g¬«       Y d}~ŒÙd}~ww xY w# t&        $ r t)        | «       Y nw xY w |j                  d«      S )	uÃ   Mirrors PyObject_IsTrue.

    https://github.com/python/cpython/blob/c09ccd9c429/Objects/object.c#L2135-L2158

    Resolution order: constants â†’ nb_bool â†’ mp_length/sq_length â†’ truthy.
    r   r   rx   N)ÚSymNodeVariabler   z__len__() should return >= 0T)Úconstantr   Úis_python_constantr%   r{   Úas_python_constantÚ	Exceptionr   ÚtypeÚstrrt   Útype_implements_nb_boolÚ	bool_implrŠ   ÚtensorrŒ   r+   Úas_proxyÚ
ValueErrorr   r   )	r7   rl   r   ÚerC   ÚresultÚlengthrŒ   Ú
length_vals	            r5   Úgeneric_boolrœ   z  sB  € õ +à
×ÑÔð	AØ*Ð#×*Ñ*¬4°×0FÑ0FÓ0HÓ+IÓJÐJô % SÓ)€Hä˜xÔ(Ø—‘˜rÓ"ˆØÐØˆMð&Ü˜R Ó%ˆÝ+ä�f˜oÔ.Ø"×)Ñ)¨"¨f¯o©oÓ.?À!Ñ.CÓDÐDØ×.Ñ.Ó0ˆ
Ø˜Š>Ü$Ü˜BÐ&DÐ%Eõð 'Ð×&Ñ& z°A¡~Ó6Ð6øô+ ò 	AÜ$¤T¨!£W¨b¼¸A»°x×@Ò@ûð	Aûô, ò &Ü! "Ö%ð&úð #Ð×"Ñ" 4Ó(Ð(s0   ˜(C+ Á-A D" Â.<D" Ã+	DÃ4!DÄDÄ"D9Ä8D9Ú_repr_runningc                 ó2  — t        |«      }t        |«      rÉt        |«      }|t        v rCt        dt
        dt        j                  di}t        j                  |j                  |d«      «      S t        j                  |«       	 |j                  | «      }t        j                  |«       t        |«      }t        |t        «      st!        | d|j"                  › d�«       |S t!        | d|j%                  «       › d�«       y# t        j                  |«       w xY w)	zßMirrors PyObject_Repr with Py_ReprEnter/Py_ReprLeave cycle detection.

    https://github.com/python/cpython/blob/v3.13.3/Objects/object.c#L745-L778

    Resolution order: tp_repr -> TypeError if the result is not str.
    z[...]z{...}z...z#__repr__ returned non-string (type ú)zobject of type 'z' has no reprN)rt   r^   Úidr�   Úlistrf   ÚcollectionsÚdequer   r%   ÚgetÚaddÚ	repr_implÚdiscardre   r’   r   Ú__name__r>   )r7   rl   rC   Úobj_idÚsentinelr™   Úresult_types          r5   Úgeneric_reprr¬   §  só   € ô % SÓ)€Hä˜xÔ(Ü�C“ˆØ”]Ñ"Ü˜g¤t¨W´k×6GÑ6GÈÐQˆHÜ#×*Ñ*¨8¯<©<¸À%Ó+HÓIÐIÜ×Ñ˜&Ô!ð	*Ø—]‘] 2Ó&ˆFä×!Ñ! &Ô)Ü+¨FÓ3ˆÜ˜+¤sÔ+ÜØØ5°k×6JÑ6JÐ5KÈ1ÐMôð ˆä�RÐ+¨C×,@Ñ,@Ó,BÐ+CÀ=ÐQÕRøô ×!Ñ! &Õ)ús   ÂC? Ã?Dc                 óH  — t        |«      t        u r|S t        |«      }t        |«      r7t        |«      j                  t
        j                  ur|j	                  | «      }nt        | |«      }t        |«      }t        |t        «      st        | d|j                  › d�«       |S )zÑMirrors PyObject_Str semantics in Dynamo.

    https://github.com/python/cpython/blob/v3.13.3/Objects/object.c#L781-L829

    Resolution order: str identity check -> tp_str (str_impl) -> tp_repr fallback.
    z"__str__ returned non-string (type rŸ   )
rt   r’   ra   r‘   Ústr_implr   r¬   re   r   r¨   )r7   rl   rC   r™   r«   s        r5   Úgeneric_strr¯   Ç  s“   € ô ˜SÓ!¤SÑ(Øˆ
ä$ SÓ)€Hä˜xÔ(Ü�‹I×Ñ¤o×&>Ñ&>Ñ>à—‘˜bÓ!‰ä˜b #Ó&ˆä'¨Ó/€KÜ�k¤3Ô'ÜØØ0°×1EÑ1EÐ0FÀaÐHô	
ð €Mr@   c                 ó”  — t        |«      }t        |«      r|j                  | |«      S t        |«      rYt        |«      }t	        |«      r|j                  | «      }t        | ||«      S t        | |j                  › d|j                  › �«       t        |t        «      r|j                  | |«      S t        | d|j                  › d�«       y)u°  CPython's PyObject_GetItem â€” dispatch to the type's mp_subscript/sq_item.

    PyObject_GetItem: https://github.com/python/cpython/blob/62a6e898e01/Objects/abstract.c#L155-L206

    CPython checks three branches in order:
      1. tp_as_mapping->mp_subscript  (L161-166)
      2. tp_as_sequence->sq_item      (L168-181) â€” only if key passes _PyIndex_Check
      3. PyType_Check(o)              (L183-203) â€” type[int] â†’ GenericAlias/__class_getitem__

    Branch 1 is the common path (list, tuple, dict, range all have mp_subscript).
    Branch 2 fires for types with only sq_item (e.g. deque).
    Branch 3 delegates to mp_subscript_impl for type objects (__class_getitem__).
    z indices must be integers, not r=   z' object is not subscriptableN)rt   Útype_implements_mp_subscriptÚmp_subscript_implrg   rj   r~   Úvt_sequence_getitemr   r¨   re   r‘   )r7   rl   ru   rC   r   s        r5   Ú
vt_getitemr´   å  sÆ   € ô$ % SÓ)€Hä# HÔ-Ø×$Ñ$ R¨Ó-Ð-ô ˜xÔ(Ü(¨Ó-ˆÜ# HÔ-Ø×#Ñ# BÓ'ˆCÜ& r¨3°Ó4Ð4ÜØØ× Ñ Ð!Ð!@À×ARÑARÐ@SÐTô	
ô �(œDÔ!Ø×$Ñ$ R¨Ó-Ð-ä�R˜1˜X×.Ñ.Ð/Ð/LÐMÕNr@   Úindexc                 óÐ  — t        |«      }t        |«      r‰t        |t        «      rg|j	                  «       }t        |t
        «      rG|dk  rBt        |«      r7|j                  | «      }t        j                  ||j	                  «       z   «      }|j                  | |«      S t        |«      rt        | d|j                  «       › d�«       t        | d|j                  «       › d�«       y)uM  CPython's PySequence_GetItem â€” always sq_item, never mp_subscript.

    ref: https://github.com/python/cpython/blob/v3.13.3/Objects/abstract.c#L1874-L1902

    Called by PyObject_GetItem branch 2, reversed() fallback, and the old
    iteration protocol.  Wraps negative indices via sq_length before
    dispatching to sq_item.
    r   r=   ú' is not a sequencez"' object does not support indexingN)rt   rg   r+   r   r�   rz   r„   r‰   r%   Úsq_item_implr±   r   r>   )r7   rl   rµ   rC   Ú	index_valrš   s         r5   r³   r³     sÏ   € ô % SÓ)€Hä˜xÔ(ä�eÔ-Ô.Ø×0Ñ0Ó2ˆIÜ˜)¤SÔ)¨i¸!ªmÜ,¨XÔ6Ø Ÿ]™]¨2Ó.�FÜ,×3Ñ3Ø! F×$=Ñ$=Ó$?Ñ?ó�Eð ×Ñ  EÓ*Ð*ä# HÔ-Ü˜˜q ×!5Ñ!5Ó!7Ð 8Ð8KÐLÔMä�R˜1˜S×1Ñ1Ó3Ð4Ð4VÐWÕXr@   ÚsÚiÚoc                 óÒ  — t        |«      }t        |«      rŠt        |t        «      rg|j	                  «       }t        |t
        «      rG|dk  rBt        |«      r7|j                  | «      }t        j                  ||j	                  «       z   «      }|j                  | ||«      S t        |«      rt        | d|j                  «       › d�«       t        | d|j                  «       › d�«       y )Nr   r=   r·   ú)' object does not support item assignment)rt   Útype_implements_sq_ass_itemr+   r   r�   rz   r„   r‰   r%   Úsq_ass_item_implÚ type_implements_mp_ass_subscriptr   r>   )r7   rº   r»   r¼   Ús_typer¹   rš   s          r5   Úvt_sequence_setitemrÃ   1  sÎ   € ô # 1Ó%€FÜ" 6Ô*ä�aÔ)Ô*Ø×,Ñ,Ó.ˆIÜ˜)¤SÔ)¨i¸!ªmÜ,¨VÔ4ØŸ[™[¨›_�FÜ(×/Ñ/°	¸F×<UÑ<UÓ<WÑ0WÓX�AØ×!Ñ! " a¨Ó+Ð+ä'¨Ô/Ü˜˜q ×!3Ñ!3Ó!5Ð 6Ð6IÐJÔKäØ
ˆa�×"Ñ"Ó$Ð%Ð%NÐOõr@   Úvaluec                 óN  — t        |«      }t        |«      r|j                  | ||«      S t        |«      rSt        |«      }t	        |«      r|j                  | «      }t        | |||«      S t        | d|j                  «       › d�«       t        | d|j                  «       › d�«       y )Nz%sequence index must be integer, not 'r=   r¾   )	rt   rÁ   Úmp_ass_subscript_implr¿   rk   r~   rÃ   r   r>   )r7   r¼   ru   rÄ   Úo_typer   s         r5   Úgeneric_setitemrÈ   K  sª   € ô # 1Ó%€FÜ'¨Ô/Ø×&Ñ& r¨3°Ó6Ð6ä" 6Ô*Ü(¨Ó-ˆÜ˜Ô"Ø×#Ñ# BÓ'ˆCÜ& r¨1¨c°5Ó9Ð9ÜØÐ7¸×8LÑ8LÓ8NÐ7OÈqÐQô	
ô Ø
ˆa�×"Ñ"Ó$Ð%Ð%NÐOõr@   c                 ó€  — t        |«      }t        |«      rat        |t        «      r>|j	                  «       }|dk  r)t        |«      r|j                  | «      }t        | ||«      }|j                  | |d «      S t        |«      rt        | d|j                  «       › d�«       t        | d|j                  «       › d�«       y )Nr   r=   r·   z'' object does not support item deletion)rt   r¿   r+   r   r�   r„   r‰   Úvt_addrÀ   rÁ   r   r>   )r7   rº   r»   rÂ   Úidxrš   s         r5   Úsequence_delitemrÌ   c  sµ   € ô # 1Ó%€FÜ" 6Ô*Ü�aÔ)Ô*Ø×&Ñ&Ó(ˆCØ�QŠwÜ,¨VÔ4ØŸ[™[¨›_�FÜ˜r 1 fÓ-�AØ×!Ñ! " a¨Ó.Ð.ä'¨Ô/Ü˜˜q ×!3Ñ!3Ó!5Ð 6Ð6IÐJÔKäØ
ˆa�×"Ñ"Ó$Ð%Ð%LÐMõr@   c                 óJ  — t        |«      }t        |«      r|j                  | |d «      S t        |«      }t        |«      r|j	                  | «      }t        | ||«      S t        |«      rt        | d|j                  «       › �«       t        | d|j                  «       › d�«       y )Nz$sequence index must be integer, not r=   z ' does not support item deletion)	rt   rÁ   rÆ   rk   r~   rÌ   r¿   r   r>   )r7   r¼   ru   rÇ   r   Ú	key_values         r5   Úgeneric_delitemrÏ   |  s£   € ô # 1Ó%€FÜ'¨Ô/Ø×&Ñ& r¨3°Ó5Ð5ä$ SÓ)€HÜ�XÔØ×%Ñ% bÓ)ˆ	Ü  A yÓ1Ð1Ü	$ VÔ	,ÜØÐ6°s×7KÑ7KÓ7MÐ6NÐOô	
ô �R˜1˜Q×/Ñ/Ó1Ð2Ð2RÐSÕTr@   c                 óª  — ddl m} |j                  «       rGt        |j	                  «       t
        «      r) |j                  t        |j	                  «       «      «      S t        |«      }t        |«      r|j                  | «      S t        |«      r|j                  | «      S |j                  «       rSt        |j	                  «       t        t        t        f«      r*	  |j                  t        |j	                  «       «      «      S t#        | d|j%                  «       › d�«       y# t        $ r&}t!        t        | t        |«      g¬«       Y d}~ŒId}~ww xY w)uÔ   Mirrors PyNumber_Long (int(x) dispatch).

    https://github.com/python/cpython/blob/v3.13.0/Objects/abstract.c#L1520-L1632

    Resolution: nb_int â†’ nb_index â†’ str/bytes/bytearray parsing â†’ TypeError.
    r   r   rx   NzLint() argument must be a string, a bytes-like object or a real number, not 'r=   )r�   r   rŽ   r+   r�   rz   r%   rt   Útype_implements_nb_intÚnb_int_implrj   r~   r’   ÚbytesÚ	bytearrayr—   r   r   r>   ©r7   rl   r   rC   r˜   s        r5   Úgeneric_intrÖ   “  s&  € õ +ð
 ×ÑÔ¤J¨s×/EÑ/EÓ/GÌÔ$MØ&Ð×&Ñ&¤s¨3×+AÑ+AÓ+CÓ'DÓEÐEä$ SÓ)€Hä˜hÔ'Ø�‰˜rÓ"Ð"ä Ô)Ø× Ñ  Ó$Ð$ð ×ÑÔ¤JØ×ÑÓ ¤3¬¬yÐ"9ô%ð	DØ*Ð#×*Ñ*¬3¨s×/EÑ/EÓ/GÓ+HÓIÐIô Ø
ð"Ø"%×"6Ñ"6Ó"8Ð!9¸ð	<õøô ò 	DÜ$¤Z°¼3¸q»6¸(×CÒCûð	Dús   Ã(D# Ä#	EÄ,EÅEc                 ó   — ddl m} |j                  «       rGt        |j	                  «       t
        «      r) |j                  t        |j	                  «       «      «      S t        |«      }t        |«      r|j                  | «      S t        |«      r|j                  | «      S |j                  «       rNt        |j	                  «       t        t        f«      r*	  |j                  t        |j	                  «       «      «      S t!        | d|j#                  «       › d�«       y# t        $ r&}t        t        | t        |«      g¬«       Y d}~ŒId}~ww xY w)uÉ   Mirrors PyNumber_Float (float(x) dispatch).

    https://github.com/python/cpython/blob/v3.13.0/Objects/abstract.c#L1635-L1692

    Resolution: nb_float â†’ nb_index â†’ str parsing â†’ TypeError.
    r   r   rx   Nz9float() argument must be a string or a real number, not 'r=   )r�   r   rŽ   r+   r�   Úfloatr%   rt   Útype_implements_nb_floatÚnb_float_implrj   r~   r’   rÓ   r—   r   r   r>   rÕ   s        r5   Úgeneric_floatrÛ   ½  s$  € õ +ð
 ×ÑÔ¤J¨s×/EÑ/EÓ/GÌÔ$OØ&Ð×&Ñ&¤u¨S×-CÑ-CÓ-EÓ'FÓGÐGä$ SÓ)€Hä Ô)Ø× Ñ  Ó$Ð$ô   Ô)Ø× Ñ  Ó$Ð$ð ×ÑÔ¤J¨s×/EÑ/EÓ/GÌ#ÌuÈÔ$Vð	DØ*Ð#×*Ñ*¬5°×1GÑ1GÓ1IÓ+JÓKÐKô Ø
ðØ×$Ñ$Ó&Ð' qð	*õøô ò 	DÜ$¤Z°¼3¸q»6¸(×CÒCûð	Dús   Ã(D Ä	EÄ'EÅEc                 óŒ   — t        |«      }t        |«      st        | d|j                  «       › d�«       |j	                  | «      S )a7  
    Implements PyIter_Next / tp_iternext semantics for VariableTracker objects.

    Calls obj.tp_iternext_impl(tx) if the object is an iterator, otherwise raises
    TypeError. StopIteration propagation is left to the caller (mirrors
    CPython's iternext contract where NULL return signals exhaustion).
    zexpected an iterator, got 'r=   )rt   r[   r   r>   Útp_iternext_implr…   s      r5   Úgeneric_iternextrÞ   æ  sF   € ô 	˜cÓ"€AÜ& qÔ)Ü˜Ð:¸3×;OÑ;OÓ;QÐ:RÐRSÐTÔUà×Ñ Ó#Ð#r@   c                 óŽ   — t        |«      }t        |«      r|j                  | «      S t        | d|j	                  «       › d�«       y)zçMirrors PyNumber_Negative.

    https://github.com/python/cpython/blob/v3.13.0/Objects/abstract.c#L1375-L1392

    Algorithm:
    1. If type has nb_negative slot, call obj.nb_negative_impl(tx)
    2. Otherwise, raise TypeError
    zbad operand type for unary -: 'r=   N)rt   Útype_implements_nb_negativeÚnb_negative_implr   r>   ©r7   rl   rC   s      r5   Úgeneric_negrã   ù  óH   € ô % SÓ)€Hä" 8Ô,Ø×#Ñ# BÓ'Ð'äØ
Ø
)¨#×*>Ñ*>Ó*@Ð)AÀÐCõr@   c                 óŽ   — t        |«      }t        |«      r|j                  | «      S t        | d|j	                  «       › d�«       y)zçMirrors PyNumber_Positive.

    https://github.com/python/cpython/blob/v3.13.0/Objects/abstract.c#L1375-L1393

    Algorithm:
    1. If type has nb_positive slot, call obj.nb_positive_impl(tx)
    2. Otherwise, raise TypeError
    zbad operand type for unary +: 'r=   N)rt   Útype_implements_nb_positiveÚnb_positive_implr   r>   râ   s      r5   Úgeneric_posrè     rä   r@   c                 óŽ   — t        |«      }t        |«      r|j                  | «      S t        | d|j	                  «       › d�«       y)zçMirrors PyNumber_Absolute.

    https://github.com/python/cpython/blob/v3.13.0/Objects/abstract.c#L1375-L1395

    Algorithm:
    1. If type has nb_absolute slot, call obj.nb_absolute_impl(tx)
    2. Otherwise, raise TypeError
    zbad operand type for abs(): 'r=   N)rt   Útype_implements_nb_absoluteÚnb_absolute_implr   r>   râ   s      r5   Úgeneric_absrì   %  sH   € ô % SÓ)€Hä" 8Ô,Ø×#Ñ# BÓ'Ð'äØ
Ø
'¨×(<Ñ(<Ó(>Ð'?¸qÐAõr@   c                 óH   — t        | «      }t        |«      xs t        |«      S )zOCheck if the object supports iteration (i.e. has tp_iter or sequence protocol).)rt   rX   rh   )rl   r†   s     r5   Úvt_is_iterablerî   ;  s"   € ä˜cÓ"€AÜ" 1Ó%Ò<Ô)9¸!Ó)<Ð<r@   c                 ó€  — t        |«      }t        |«      rG|j                  | «      }t        |«      }t        |«      st	        | d|j                  «       › d�«       |S t        |«      r8ddlm}  |t        j                  j                  «      j                  | |gi «      S t	        | d|j                  «       › d�«       y)z—
    Implements PyObject_GetIter semantics for VariableTracker objects.
    Routes to obj.tp_iter_impl(tx), the tp_iter slot on the object's type.
    z&iter() returned non-iterator of type 'r=   r   )ÚUserFunctionVariablez' object is not iterableN)rt   rX   Útp_iter_implrc   r   r>   rh   Ú	functionsrð   r   ÚbuiltinsÚsequence_iteratorÚcall_function)r7   rl   r†   ÚresÚres_Trð   s         r5   Úgeneric_getiterrø   A  s¹   € ô  	˜cÓ"€AÜ˜qÔ!Ø×Ñ˜rÓ"ˆÜ% cÓ*ˆÜ˜EÔ"ÜØØ8¸×9MÑ9MÓ9OÐ8PÐPQÐRôð ˆ
Ü	˜!Ô	Ý3á#¤I×$6Ñ$6×$HÑ$HÓI×WÑWØ���ró
ð 	
ô 	˜˜q ×!5Ñ!5Ó!7Ð 8Ð8PÐQÕRr@   Ú	nb_lshiftÚnb_inplace_lshiftÚnb_inplace_rshiftÚ	nb_rshiftÚnb_orÚnb_inplace_orÚnb_subtractÚnb_inplace_subtractÚnb_addÚnb_inplace_addÚnb_multiplyÚnb_inplace_multiplyÚnb_andÚnb_inplace_andÚnb_xorÚnb_inplace_xorÚnb_floor_divide)Únb_inplace_floor_divideÚnb_true_divideÚnb_inplace_true_divideÚnb_remainderÚnb_inplace_remainderÚ	nb_divmodr™   c                 ó,   — | j                  t        «      S rT   )Úis_constant_matchÚNotImplemented)r™   s    r5   Úis_nb_not_implementedr  …  s   € Ø×#Ñ#¤NÓ3Ð3r@   c                 ór   — 	 t        | j                  «       |j                  «       «      S # t        $ r Y yw xY w)z?Check if w's underlying Python type is a proper subtype of v's.F)re   r,   r-   )r9   r8   s     r5   Úis_python_subtyper  ‰  s2   € ðÜ˜!Ÿ-™-›/¨1¯=©=«?Ó;Ð;øÜò Ùðús   ‚'* ª	6µ6Úop_slotc                 óÐ  — |› d�}t         |   }t        |«      }t        |«      }t        ||«      rt        t	        |«      |d«      nd}t        ||«      rt        t	        |«      |d«      nd}	||	u rd}	|�@|	�&t        ||«      r |	|| |d«      }
t        |
«      s|
S d}	 ||| |d«      }
t        |
«      s|
S |	� |	|| |d«      }
t        |
«      s|
S t        j                  t        «      S )u/  CPython's binary_op1: try v's slot, then w's slot with subclass priority.

    Each VT that participates provides a ``<op_slot>_impl(self, tx, other,
    reverse)`` method. ``reverse=False`` means "self is left operand" (forward,
    e.g. ``__or__``), ``reverse=True`` means "self is right operand" (reverse,
    e.g. ``__ror__``). For built-in types the flag is ignored because their
    slots check both operands symmetrically.

    CPython splits the check into two steps: ``Py_TYPE(v)->tp_as_number !=
    NULL`` (does the type have a number-protocol struct), then read the
    slot pointer (which may itself be NULL).  We collapse both into a
    single :func:`type_implements_nb_slot` query â€” its bit is set only
    when the specific slot is non-NULL, which already implies
    ``tp_as_number`` is non-NULL.  Treating a missing slot as "no impl"
    is what keeps the base ``VariableTracker.nb_*_impl`` graph-break
    out of the path for types that genuinely lack the slot in C.

    https://github.com/python/cpython/blob/3.13/Objects/abstract.c#L926-L977
    Ú_implNTF)
ÚNB_SLOT_MAPPINGrt   rR   Úgetattrr‘   r  r  r   r%   r  )r7   r8   r9   r  Ú	impl_attrÚnb_slot_bitÚv_typeÚw_typeÚv_slotÚw_slotr™   s              r5   Ú
binary_op1r!  š  s  € ð2 �)˜5Ð!€IÜ! 'Ñ*€Kä" 1Ó%€FÜ" 1Ó%€Fô # 6¨;Ô7ô 	”�Q“˜ DÔ)àð ô # 6¨;Ô7ô 	”�Q“˜ DÔ)àð ð �ÑØˆàÐð ÐÔ"3°A°qÔ"9ñ ˜A˜r 1 dÓ+ˆFÜ(¨Ô0Ø�ØˆFÙ˜˜2˜q %Ó(ˆÜ$ VÔ,ØˆMØÐÙ˜˜2˜q $Ó'ˆÜ$ VÔ,ØˆMÜ×"Ñ"¤>Ó2Ð2r@   c                 óT   — t        | |||«      }t        |«      rt        | |||«       |S )zˆCPython's binary_op: binary_op1 + TypeError fallback.
    https://github.com/python/cpython/blob/3.13/Objects/abstract.c#L997-L1020
    )r!  r  r?   )r7   r8   r9   r  r:   r™   s         r5   Ú	binary_opr#  ã  s/   € ô ˜˜A˜q 'Ó*€FÜ˜VÔ$Ü˜˜Q  9Ô-Ø€Mr@   Úiop_slotc                 ó¼   — t        |«      }t        |t        |   «      r1|› d�}t        t	        |«      |«      } ||| |«      }t        |«      s|S t        | |||«      S )Nr  )rt   rR   r  r  r‘   r  r!  )	r7   r8   r9   r$  r  r  r  rG   r™   s	            r5   Úbinary_iop1r&    sd   € ô # 1Ó%€Fä˜v¤°xÑ'@ÔAØ�j Ð&ˆ	Ü”t˜A“w 	Ó*ˆÙ�a˜˜Q“ˆÜ$ VÔ,ØˆMä�b˜!˜Q Ó(Ð(r@   c                 óV   — t        | ||||«      }t        |«      rt        | |||«       |S )zíCPython's binary_iop: try inplace slot, fallback to binary_op1.

    Combines binary_iop1 + TypeError fallback from binary_iop.
    https://github.com/python/cpython/blob/3.13/Objects/abstract.c#L1229-L1270 (binary_iop1, binary_iop)
    )r&  r  r?   )r7   r8   r9   r$  r  r:   r™   s          r5   Ú
binary_iopr(    s1   € ô ˜˜Q  8¨WÓ5€FÜ˜VÔ$Ü˜˜Q  9Ô-Ø€Mr@   c                 ó¦   — t        | ||d«      }t        |«      s|S t        |«      }t        |«      r|j	                  | |«      S t        | ||d«       y)zHImplements addition via nb_add / nb_inplace_add with binary_op dispatch.r  ú+N)r!  r  rt   Útype_implements_sq_concatÚsq_concat_implr?   )r7   r8   r9   r™   r†   s        r5   rÊ   rÊ   *  sT   € ô ˜˜A˜q (Ó+€FÜ  Ô(Øˆä˜aÓ €AÜ  Ô#Ø×Ñ  AÓ&Ð&Ü�R˜˜A˜sÕ#r@   c                 óà   — t        | ||dd«      }t        |«      rSt        |«      }t        |«      r|j	                  | |«      S t        |«      r|j                  | |«      S t        | ||d«       |S )zIImplements in-place addition via nb_inplace_add with binary_iop dispatch.r  r  z+=)r&  r  rt   Ú!type_implements_sq_inplace_concatÚsq_inplace_concat_implr+  r,  r?   )r7   r8   r9   r™   rC   s        r5   Úvt_inplace_addr0  ;  sr   € ô ˜˜Q Ð#3°XÓ>€FÜ˜VÔ$Ü(¨Ó+ˆÜ,¨XÔ6Ø×+Ñ+¨B°Ó2Ð2Ü& xÔ0Ø×#Ñ# B¨Ó*Ð*ä˜R  A tÔ,Ø€Mr@   ÚseqÚnc                 óÈ   — t        |«      }t        |«      st        | d|j                  «       › d�«       |j	                  | «      }t        | |«       |j                  | |«      S )zúMirrors CPython's sequence_repeat helper.

    Validates that ``n`` is index-like, converts it to an int, and dispatches
    to ``seq.sq_repeat_impl(tx, count)``.

    https://github.com/python/cpython/blob/v3.13.0/Objects/abstract.c#L1156-L1174
    ú,can't multiply sequence by non-int of type 'r=   )rt   rj   r   r>   r~   Úvalidate_sequence_repeat_countÚsq_repeat_impl©r7   r1  r2  Ún_typeÚcounts        r5   Úsequence_repeatr:  Z  se   € ô # 1Ó%€FÜ# FÔ+ÜØØ:¸1×;MÑ;MÓ;OÐ:PÐPQÐRô	
ð �O‰O˜BÓ€EÜ" 2 uÔ-Ø×Ñ˜b %Ó(Ð(r@   c                 óÈ   — t        |«      }t        |«      st        | d|j                  «       › d�«       |j	                  | «      }t        | |«       |j                  | |«      S )z�sequence_repeat using sq_inplace_repeat.

    The validation step is identical to ``sequence_repeat``; only the
    target slot differs.
    r4  r=   )rt   rj   r   r>   r~   r5  Úsq_inplace_repeat_implr7  s        r5   Úsequence_inplace_repeatr=  q  se   € ô # 1Ó%€FÜ# FÔ+ÜØØ:¸1×;MÑ;MÓ;OÐ:PÐPQÐRô	
ð �O‰O˜BÓ€EÜ" 2 uÔ-Ø×%Ñ% b¨%Ó0Ð0r@   r9  c                 ó    — |j                  «       }|t        j                   dz
  k  s|t        j                  kD  rt        t        | dg¬«       y y )Nr   z,cannot fit 'int' into an index-sized integerrx   )r�   ÚsysrB   r   ÚOverflowError)r7   r9  r2  s      r5   r5  r5  †  sH   € ð 	× Ñ Ó"€AØŒC�K‰Kˆ<˜!ÑÒ˜q¤3§;¡;šÜ ÜØØ@ÐAö	
ð  /r@   c                 ó$  — t        | ||d«      }t        |«      s|S t        |«      }t        |«      }t        |«      rt	        | ||«      S t        |«      rt	        | ||«      S t        | d|j                  «       › d|j                  «       › d�«       y)zþMirrors CPython's PyNumber_Multiply.

    Try nb_multiply via binary_op1; on NotImplemented fall back to sq_repeat
    on either operand.  TypeError if no path works.

    https://github.com/python/cpython/blob/v3.13.0/Objects/abstract.c#L1176-L1193
    r  ú$unsupported operand type(s) for *: 'r<   r=   N)r!  r  rt   Útype_implements_sq_repeatr:  r   r>   ©r7   r8   r9   r™   r  r  s         r5   Úgeneric_multiplyrE  “  sš   € ô ˜˜A˜q -Ó0€FÜ  Ô(Øˆä" 1Ó%€FÜ" 1Ó%€FÜ  Ô(Ü˜r 1 aÓ(Ð(Ü  Ô(Ü˜r 1 aÓ(Ð(äØ
ðØ×ÑÓ Ð! ¨×);Ñ);Ó)=Ð(>¸að	Aõr@   c                 óV  — t        | ||dd«      }t        |«      s|S t        |«      }t        |«      }t        |«      rt	        | ||«      S t        |«      rt        | ||«      S t        |«      rt        | ||«      S t        | d|j                  «       › d|j                  «       › d�«       y)a  Mirrors CPython's PyNumber_InPlaceMultiply.

    Try nb_inplace_multiply / nb_multiply via binary_iop1; on NotImplemented
    fall back to sq_inplace_repeat (preferred), then sq_repeat.

    https://github.com/python/cpython/blob/v3.13.0/Objects/abstract.c#L1330-L1357
    r  r  z%unsupported operand type(s) for *=: 'r<   r=   N)	r&  r  rt   Ú!type_implements_sq_inplace_repeatr=  rC  r:  r   r>   rD  s         r5   Úgeneric_inplace_multiplyrH  ±  s¶   € ô ˜˜Q Ð#8¸-ÓH€FÜ  Ô(Øˆä" 1Ó%€FÜ" 1Ó%€FÜ(¨Ô0Ü& r¨1¨aÓ0Ð0Ü  Ô(Ü˜r 1 aÓ(Ð(ô ! Ô(Ü˜r 1 aÓ(Ð(äØ
ðØ×ÑÓ Ð! ¨×);Ñ);Ó)=Ð(>¸að	Aõr@   ÚselfÚotherÚreversec                 ó  — t        |«      }t        |t        j                  «      r|j	                  | ||¬«      S t        |«      rt        | ||«      S t        | d|j                  «       › d|j                  «       › d�«       y)z@``self.__mul__(other)`` / ``self.__rmul__(other)`` slot wrapper.)rK  rB  r<   r=   N)	rt   rR   r
   ÚNB_MULTIPLYÚnb_multiply_implrC  r:  r   r>   )r7   rI  rJ  rK  Ú	self_types        r5   Úslot_wrapper_mulrP  ö  s†   € ô & dÓ+€IÜ˜y¬-×*CÑ*CÔDØ×$Ñ$ R¨¸Ð$Ó@Ð@Ü  Ô+ô ˜r 4¨Ó/Ð/ÜØ
ðØ×!Ñ!Ó#Ð$ G¨E×,BÑ,BÓ,DÐ+EÀQð	Hõr@   c                 óº   — t        |«      }t        |t        j                  «      r|j	                  | |«      S t        |«      rt        | ||«      S t        | ||«      S )uÍ  ``self.__imul__(other)`` slot wrapper.

    When neither ``nb_inplace_multiply`` nor ``sq_inplace_repeat`` is
    installed, the slotdef machinery doesn't generate ``__imul__`` at all
    â€” but the operator-level fallback in ``slot_nb_inplace_multiply``
    (typeobject.c) does try the non-inplace slot.  We mirror that here so
    method lookups don't graph-break on (e.g.) tuple, even though tuple
    has no ``__imul__`` attribute in standard CPython.
    )rt   rR   r
   ÚNB_INPLACE_MULTIPLYÚnb_inplace_multiply_implrG  r=  rP  )r7   rI  rJ  rO  s       r5   Úslot_wrapper_imulrT    sW   € ô & dÓ+€IÜ˜y¬-×*KÑ*KÔLØ×,Ñ,¨R°Ó7Ð7Ü(¨Ô3Ü& r¨4°Ó7Ð7Ü˜B  eÓ,Ð,r@   Úopc                 óh  — |dk(  rLt        | |«      }|�%|j                  «       rt        j                  d«      S t        j                  t        «      S |dk(  rD| j                  ||d«      }t        |«      r|S t        j                  |j                  «        «      S t        j                  t        «      S )a   object's tp_richcompare.

    https://github.com/python/cpython/blob/e76aa128fe/Objects/typeobject.c#L6263-L6305
    - __eq__: identity check, else NotImplemented
    - __ne__: delegates to tp_richcompare(self, other, Py_EQ) and inverts
    - ordering
    Ú__eq__TÚ__ne__)r6   r�   r   r%   r  Úrichcompare_implÚis_richcompare_not_implemented)rI  r7   rJ  rU  ÚidentityÚ	eq_results         r5   Úobject_richcomparer]  Z  s£   € ð 
ˆX‚~Ü& t¨UÓ3ˆØÐ H×$?Ñ$?Ô$AÜ#×*Ñ*¨4Ó0Ð0Ü×&Ñ&¤~Ó6Ð6Ø	ˆxŠð ×)Ñ)¨"¨e°XÓ>ˆ	Ü)¨)Ô4ØÐÜ×&Ñ&¨9×+GÑ+GÓ+IÐ'IÓJÐJä×&Ñ&¤~Ó6Ð6r@   c                 óŽ  — | j                  «       r|j                  «       st        j                  t        «      S | j	                  «       }|j	                  «       }	  t        t        |«      |«      ||«      }t        j                  «      S # t        $ r/}t        t        |t        |j                  «      ¬«       Y d}~ŒHd}~ww xY w)z=Constant-fold comparison for types with as_python_constant().rx   N)rŽ   r   r%   r  r�   r  r‘   r}   r   r¡   ry   )rI  r7   rJ  rU  Úself_valÚ	other_valr™   r˜   s           r5   Ú python_constant_richcompare_implra  x  s¥   € ð ×"Ñ"Ô$¨E×,DÑ,DÔ,FÜ×&Ñ&¤~Ó6Ð6Ø×&Ñ&Ó(€HØ×(Ñ(Ó*€IðCØ,”œ˜h›¨Ó,¨X°yÓAˆô ×"Ñ" 6Ó*Ð*øô ò CÜ ¤¨B´T¸!¿&¹&³\×BÒBûðCús   ÁB Â	CÂ%B?Â?CÚ__gt__Ú__lt__Ú__ge__Ú__le__rW  rX  )rc  rb  re  rd  rW  rX  Ú_REFLECTED_OPú<z<=z==z!=ú>z>=)rc  re  rW  rX  rb  rd  Ú_OP_STRc           
      óÖ  — t         |   }	 |j                  «       }	 |j                  «       }d}|�4|�2||ur.t        ||«      r"d}|j	                  | ||«      }t        |«      s|S |j	                  | ||«      }t        |«      s|S |s |j	                  | ||«      }t        |«      s|S |dv rct        ||«      }	|	�+|dk(  r$t        j                  |	j                  «        «      S |	S t        dd|› d|› d|› d	�d
g t        j                  ¢¬«       yt        | dt        |   › d|j                  «       › d|j                  «       › d�«       y# t        $ r d}Y �Œ:w xY w# t        $ r d}Y �Œ;w xY w)au  Dynamo's do_richcompare.

    https://github.com/python/cpython/blob/e76aa128fe/Objects/object.c#L994-L1039

    Implements the 4-step algorithm directly using richcompare_impl slots.
    Graph breaks inside user comparison methods propagate to COMPARE_OP
    (which runs eagerly) because UDOV.richcompare_impl disables nested
    graph breaks on the resolved funcvar.
    NFT©rW  rX  rX  z*richcompare identity fallback undeterminedzgeneric_richcompare(ú, rŸ   z9Cannot determine object identity for comparison fallback.rn   r=   z&' not supported between instances of 'r<   )rf  r,   r-   re   rY  rZ  r6   r   r%   r�   r   r   ÚSUPPORTABLEr   ri  r>   )
r7   r8   r9   rU  Ú	reflectedr  r  Úchecked_reverser™   r[  s
             r5   Úgeneric_richcomparerp  ž  s¯  € ô ˜bÑ!€IðØ—‘“ˆðØ—‘“ˆð €Oð 	ÐØÐØ˜&Ñ Ü�v˜vÔ&àˆØ×#Ñ# B¨¨9Ó5ˆÜ-¨fÔ5ØˆMð ×Ñ  A rÓ*€FÜ)¨&Ô1Øˆñ Ø×#Ñ# B¨¨9Ó5ˆÜ-¨fÔ5ØˆMð 
Ð!Ñ!Ü& q¨!Ó,ˆØÐØ�XŠ~Ü'×.Ñ.°8×3NÑ3NÓ3PÐ/PÓQÐQØˆOÜØ@Ø*¨1¨#¨R°¨s°"°R°D¸Ð:ØSØ2Ô%×1Ñ1Ð2ö		
ô 	ØØ”˜‘ˆ}ð Ø×"Ñ"Ó$Ð% W¨Q×-?Ñ-?Ó-AÐ,BÀ!ðEõ	
øô] ò Ø‹ðûô ò Ø‹ðús"   ‹E œE ÅEÅEÅE(Å'E(c                 ó®   — |dvrt        d|› �«      ‚t        ||«      }|�(|j                  «       rt        j                  |dk(  «      S t        | |||«      S )aß  Dynamo's PyObject_RichCompareBool for eq/ne.

    https://github.com/python/cpython/blob/e76aa128fe/Objects/object.c#L1046-L1080

    Like generic_richcompare, but with an identity shortcut first: if v
    and w are the same Python object, eq is True and ne is False. This
    matters for NaN (nan is nan -> True, but nan == nan -> False). Used by
    container comparisons (list_richcompare, tuplerichcompare) which call
    PyObject_RichCompareBool per element in CPython.
    rk  z2generic_richcompare_bool only supports eq/ne, got rW  )ÚAssertionErrorr6   r�   r   r%   rp  )r7   r8   r9   rU  r[  s        r5   Úgeneric_richcompare_boolrs  æ  se   € ð  
Ð%Ñ%ÜÐQÐRTÐQUÐVÓWÐWÜ" 1 aÓ(€HØÐ × ;Ñ ;Ô =Ü×&Ñ& r¨X¡~Ó6Ð6Ü˜r 1 a¨Ó,Ð,r@   c                 ó$   — |j                  | «      S )zýInternal API: compute hash as (value, is_fake).

    Dispatches to the VT's hash_impl.  Called by generic_hash (which wraps
    the result in a VT), container hash_impls (which propagate is_fake),
    and HashableTracker (which just needs the int).
    )Ú	hash_impl)r7   rl   s     r5   Úgeneric_hash_implrv  þ  s   € ð �=‰=˜ÓÐr@   c                 ó„   — ddl m}m}m} t	        | |«      \  }}|r |||j
                  ¬«      S  |j                  |«      S )a$  User-facing API: mirrors PyObject_Hash, returns a VariableTracker.

    https://github.com/python/cpython/blob/e76aa128fe/Objects/object.c#L1101-L1115

    Wraps the result in ConstantVariable or FakeIdVariable depending on
    whether the hash depends on a sourceless object's identity.
    r   )r   ÚFakeIdVariableÚFakeValueKind)Úkind)r�   r   rx  ry  rv  ÚHASHr%   )r7   rl   r   rx  ry  ÚhÚis_fakes          r5   Úgeneric_hashr~  
  sE   € ÷ JÑIä" 2 sÓ+�J€A€wÙÙ˜a m×&8Ñ&8Ô9Ð9Ø"Ð×"Ñ" 1Ó%Ð%r@   c                 óØ   — t        |«      }t        |«      r|j                  | |«      S t        | |«      }t	        j
                  | t        j                  «      j                  | ||gi «      S )zô
    Implements PySequence_Contains semantics for VariableTracker objects.

    If the object has sq_contains (i.e., __contains__), calls obj.sq_contains(tx, item).
    Otherwise falls back to iterating over obj and comparing each element.
    )	rt   Útype_implements_sq_containsÚsq_containsrø   r   Úbuildr   Úimpl_CONTAINS_OP_fallbackrõ   )r7   rl   Úitemr†   Úits        r5   Úgeneric_containsr†    se   € ô 	˜cÓ"€AÜ" 1Ô%Ø�‰˜r 4Ó(Ð(ô ˜R Ó%ˆÜ×$Ñ$Ø”	×3Ñ3ó
ç
‰-˜˜T 2˜J¨Ó
+ð	,r@   .Ú(_CONSTANT_FOLD_SUBCLASSCHECK_METACLASSESÚderivedÚclsc                 ó  — |j                  «       }|j                  «       }|t        u s|t        u r7t        dd|› d|› d�ddgt        j                  ¢t        j
                  ¢¬«       t        |«      }|t        u r 	 t        j                  t        ||«      «      S t        j                   h}t"        j$                  d
k  r|j'                  t(        j*                  «       ||v r+t)        j,                  |«      }t/        j0                  | |«      }ddlm}	 t7        ||	«      rg|j8                  D ]C  }
t;        | ||
«      }t7        |t        «      sŒ!|j<                  sŒ.t        j                  d«      c S  t        j                  d«      S t7        |t        «      r9t        t        |«      t>        «      r 	 t        j                  t        ||«      «      S t7        |t        «      stA        | d«       |jC                  | d|gi «      }tE        | |«      S # t        $ r0}t        t        | t        |j                  «      ¬«       Y d	}~�Œ¥d	}~ww xY w# t        $ r/}t        t        | t        |j                  «      ¬«       Y d	}~Œ¬d	}~ww xY w)zëMirrors CPython's PyObject_IsSubclass / object_issubclass.

    https://github.com/python/cpython/blob/v3.13.0/Objects/abstract.c#L2766-L2823

    This only attempts to replicate object_issubclass, otherwise we delegate to cpython
    z'issubclass() with unsupported argumentszissubclass(rl  rŸ   z:Arguments to issubclass() must be backed by python values.z#Make sure your arguments are types.rn   rx   N)é   é   r   )ÚTupleVariableTFzBissubclass() arg 2 must be a class, a tuple of classes, or a unionÚ__subclasscheck__)#r&   r   r   r   Ú
USER_ERRORrm  rt   r‘   r   r%   re   r}   r   r¡   ry   ÚtypesÚ	UnionTyper?  Úversion_infor¥   ÚtypingÚ_UnionGenericAliasÚget_argsr   r‚  r(   r�  r+   ÚitemsÚgeneric_issubclassrÄ   r‡  r   Úcall_methodrœ   )r7   rˆ  r‰  Ú
derived_pyÚcls_pyÚcls_typer˜   Úunion_typesry   r�  r„  Úrr™   s                r5   r—  r—  <  sO  € ð ×5Ñ5Ó7€JØ×-Ñ-Ó/€FØ”^Ñ# v´Ñ'?ÜØ=Ø! ' ¨"¨S¨E°Ð3ØTà5ðä"×-Ñ-ðô #×.Ñ.ðõ			
ô % SÓ)€Hð ”4Ñð	GÜ#×*Ñ*ÜØØóóð ô —?‘?Ð#€KÜ
×Ñ˜'Ò!Ø�‰Ü×%Ñ%ô	
ð �;Ñä�‰˜vÓ&ˆÜ×#Ñ# B¨Ó-ˆõ %ä�#�}Ô%Ø—I‘Iò 	5ˆDÜ" 2 w°Ó5ˆAÜ˜!Ô-Õ.°1·7³7Ü'×.Ñ.¨tÓ4Ò4ð	5ô  ×&Ñ& uÓ-Ð-ô �&œ$Ô¤JÜˆV‹Ô>ô%ð	GÜ#×*Ñ*ÜØØóóð ô �fœdÔ#ÜØØPô	
ð �_‰_˜RÐ!4°w°iÀÓD€Fô ˜˜FÓ#Ð#øôy ò 	GÜ$¤Y°¼¸a¿f¹f»×FÓFûð	GûôP ò 	GÜ$¤Y°¼¸a¿f¹f»×FÒFûð	Gús0   Á<H Æ0I È	IÈ%I É IÉ	J É%I;É;J Úiter_Únull_or_idxc                 ó–   — ddl m} t        ||«      s#t        |«      t        u r|j                  | |«      S t        | |«      }| |«       fS )ab  
    Mirrors _PyForIter_VirtualIteratorNext.

    When ``null_or_idx`` is a tagged int (3.15+ virtual-iter path), dispatch
    to the iterable's ``_tp_iteritem`` slot via ``tp_iteritem_impl`` and
    return ``(value, next_index)``.  Otherwise fall back to the standard
    iterator protocol (``tp_iternext``) and return ``(value, NULL)``.

    Iterator exhaustion is signaled by ``ObservedUserStopIteration``
    propagating out of the slot impl, matching the rest of Dynamo's
    iterator protocol.

    https://github.com/python/cpython/blob/f31a89bb901067dd105b00cfa90523cf7ffdbbdd/Python/ceval.c#L3733
    r   )ÚNullVariable)r)   r¡  r+   rt   rz   Útp_iteritem_implrÞ   )r7   rž  rŸ  r¡  Únext_s        r5   Úvirtual_iterator_nextr¤  ž  sL   € õ& #ô �{ LÔ1Ü! +Ó.´#Ñ5à×%Ñ% b¨+Ó6Ð6Ü˜R Ó'€EØ‘,“.Ð Ð r@   )r7   r   rl   r   r   r   )F)r7   r   rl   r   r„  r   r   r   )ÍÚ__doc__Úabcr¢   Úenumr?  r�  r“  Ú	functoolsr   r   r   r   ÚtorchÚtorch._C._dynamor   r   r	   r
   r   r   r.   r   r   Úexcr   r   r   r   r   Úutilsr   Úbaser   r   r�   r   Úsymbolic_convertr   r6   r’   r?   r‘   Útuplerz   rF   r{   rL   rO   ÚSQ_ITEMrg   Ú	SQ_LENGTHr„   Ú	SQ_CONCATr+  ÚSQ_INPLACE_CONCATr.  ÚSQ_CONTAINSr€  ÚSQ_ASS_ITEMr¿   Ú	SQ_REPEATrC  ÚSQ_INPLACE_REPEATrG  Ú	MP_LENGTHr‚   ÚMP_SUBSCRIPTr±   ÚMP_ASS_SUBSCRIPTrÁ   rR   ÚNB_ADDÚtype_implements_nb_addÚNB_SUBTRACTÚtype_implements_nb_subtractrM  Útype_implements_nb_multiplyÚNB_REMAINDERÚtype_implements_nb_remainderÚNB_POWERÚtype_implements_nb_powerÚNB_NEGATIVErà   ÚNB_POSITIVEræ   ÚNB_ABSOLUTErê   ÚNB_BOOLr“   Ú	NB_INVERTÚtype_implements_nb_invertÚ	NB_LSHIFTÚtype_implements_nb_lshiftÚ	NB_RSHIFTÚtype_implements_nb_rshiftÚNB_ANDÚtype_implements_nb_andÚNB_XORÚtype_implements_nb_xorÚNB_ORÚtype_implements_nb_orÚNB_INTrÑ   ÚNB_FLOATrÙ   ÚNB_INPLACE_ADDÚtype_implements_nb_inplace_addÚNB_INPLACE_SUBTRACTÚ#type_implements_nb_inplace_subtractrR  Ú#type_implements_nb_inplace_multiplyÚNB_INPLACE_REMAINDERÚ$type_implements_nb_inplace_remainderÚNB_INPLACE_POWERÚ type_implements_nb_inplace_powerÚNB_INPLACE_LSHIFTÚ!type_implements_nb_inplace_lshiftÚNB_INPLACE_RSHIFTÚ!type_implements_nb_inplace_rshiftÚNB_INPLACE_ANDÚtype_implements_nb_inplace_andÚNB_INPLACE_XORÚtype_implements_nb_inplace_xorÚNB_INPLACE_ORÚtype_implements_nb_inplace_orÚNB_FLOOR_DIVIDEÚtype_implements_nb_floor_divideÚNB_TRUE_DIVIDEÚtype_implements_nb_true_divideÚNB_INPLACE_FLOOR_DIVIDEÚ'type_implements_nb_inplace_floor_divideÚNB_INPLACE_TRUE_DIVIDEÚ&type_implements_nb_inplace_true_divideÚNB_INDEXrj   ÚNB_MATRIX_MULTIPLYÚ"type_implements_nb_matrix_multiplyÚNB_INPLACE_MATRIX_MULTIPLYÚ*type_implements_nb_inplace_matrix_multiplyrX   r[   r^   ra   rc   rh   rk   rt   r€   r‡   rŠ   rœ   Úsetr�   Ú__annotations__r¬   r¯   r´   r³   rÃ   rÈ   rÌ   rÏ   rÖ   rÛ   rÞ   rã   rè   rì   rî   rø   Ú	NB_DIVMODr  r  r  r!  r#  r&  r(  rÊ   r0  r:  r=  r5  rE  rH  rP  rT  rZ  r]  ra  rf  rf   ri  rp  rs  rv  r~  r†  ÚABCMetaÚ_CÚ_TensorMetaÚEnumMetar‡  r—  r¤  © r@   r5   ú<module>rþ     s   ðòó Û Û Û 
Û Û ß (ß *ã ÷÷ ÷ ,÷õ õ ß 1Ý &ñ Ý<ð9Ø
ð9àð9ð ó9ðx	Ø#ð	àð	ð ð	ð ð		ð
 ó	ñ �3Ôð$ ð $¨¨s°C¸¸cÐ/AÑ)Bò $ó ð$ð
% dð %°#ð %¸$ó %ð% dð %°#ð %¸$ó %ñ "Ð"9À×@WÑ@WÔXÐ Ù#Ø /×";Ñ";ôÐ ñ $Ø /×";Ñ";ôÐ ñ %,Ø /×"CÑ"Cô%Ð !ñ &Ø /×"=Ñ"=ôÐ ñ &Ø /×"=Ñ"=ôÐ ñ $Ø /×";Ñ";ôÐ ñ %,Ø /×"CÑ"Cô%Ð !ñ
 $Ø .×":Ñ":ôÐ ñ  'Ø .×"=Ñ"=ô Ð ñ $+Ø .×"AÑ"Aô$Ð  ñ $Ø .×":Ñ":ôÐ ð
( dð (°#ð (¸$ó (ñ !Ð!8¸}×?SÑ?SÔTÐ Ù%Ø -×";Ñ";ôÐ ñ &Ø -×";Ñ";ôÐ ñ  'Ø -×"<Ñ"<ô Ð ñ #Ð#:À×AWÑAWÔXÐ Ù%Ø -×";Ñ";ôÐ ñ &Ø -×";Ñ";ôÐ ñ &Ø -×";Ñ";ôÐ ñ "Ð"9À×@UÑ@UÔVÐ Ù#Ø -×"9Ñ"9ôÐ ñ $Ø -×"9Ñ"9ôÐ ñ $Ø -×"9Ñ"9ôÐ ñ !Ð!8¸}×?SÑ?SÔTÐ Ù Ð!8¸}×?SÑ?SÔTÐ ÙÐ 7¸m×>QÑ>QÔRÐ Ù Ð!8¸}×?SÑ?SÔTÐ Ù"Ð#:À×AWÑAWÔXÐ Ù!(Ø -×">Ñ">ô"Ð ñ '.Ø -×"CÑ"Cô'Ð #ñ '.Ø -×"CÑ"Cô'Ð #ñ (/Ø -×"DÑ"Dô(Ð $ñ $+Ø -×"@Ñ"@ô$Ð  ñ %,Ø -×"AÑ"Aô%Ð !ñ %,Ø -×"AÑ"Aô%Ð !ñ ")Ø -×">Ñ">ô"Ð ñ ")Ø -×">Ñ">ô"Ð ñ !(Ø -×"=Ñ"=ô!Ð ñ #*Ø -×"?Ñ"?ô#Ð ñ ")Ø -×">Ñ">ô"Ð ñ +2Ø -×"GÒ"Gô+Ð 'ñ *1Ø -×"FÒ"Fô*Ð &ñ #Ð#:À×AWÒAWÔXÐ Ù%,Ø -×"BÒ"Bô&Ð "ñ .5Ø -×"JÒ"Jô.Ð *ð
4 dð 4¨tó 4ð
8¨$ð 8°4ó 8ð
4 dð 4¨tó 4ð3 Tð 3¨dó 3ð1˜4ð 1 Dó 1ð-˜tð -¨ó -ð.˜Dð . Tó .ð
˜ð 
°4ó 
ðØ#ðà	ðð ðð ó	ð.RØ#ðRØ*;ðRàóRð$Ø#ð$Ø*;ð$àó$ð')Ø#ð')Ø*9ð')àó')ñT ›%€ˆs�3‰xÓ ðSØ#ðSØ*9ðSàóSð@Ø#ðØ*;ðàóð<(OØ#ð(Oà	ð(Oð 
ð(Oð ó	(OðVYØ#ðYà	ðYð ðYð ó	YðBØ#ðàðð ðð ð	ð
 óð4Ø#ðàðð 
ðð ð	ð
 óð0Ø#ðàðð ðð ó	ð2UØ#ðUàðUð 
ðUð ó	Uð.'Ø#ð'Ø*9ð'àó'ðT&Ø#ð&Ø*9ð&àó&ðR$Ø#ð$Ø*9ð$àó$ð&Ø#ðØ*9ðàóð,Ø#ðØ*9ðàóð,Ø#ðØ*9ðàóð,=˜ð =¨Dó =ð!SØ#ð!SØ*9ð!Sàó!SðRØ�×(Ñ(ðà˜×8Ñ8ðð ˜×8Ñ8ðð �×(Ñ(ð	ð
 ˆ]× Ñ ðð �]×0Ñ0ðð �=×,Ñ,ðð ˜=×<Ñ<ðð ˆm×"Ñ"ðð �m×2Ñ2ðð �=×,Ñ,ðð ˜=×<Ñ<ðð ˆm×"Ñ"ðð �m×2Ñ2ðð ˆm×"Ñ"ðð  �m×2Ñ2ð!ð" �}×4Ñ4ð#ð$  -×DÒDØ#×2Ñ2Ø+×BÒBØ!×.Ñ.Ø)×>Ñ>Ø×(Ò(ò/€ð64 /ð 4°dó 4ð˜ð ¨_ð Àó ð"F3Ø#ðF3àðF3ð ðF3ð ð	F3ð
 óF3ðRØ#ðàðð ðð ð	ð
 ðð óð@)Ø#ð)àð)ð ð)ð ð	)ð
 ð)ð ó)ð&Ø#ðàðð ðð ð	ð
 ðð ðð óð($Ø#ð$àð$ð ð$ð ó	$ð"Ø#ðàðð ðð ó	ð>)Ø#ð)à	ð)ð ð)ð ó	)ð.1Ø#ð1à	ð1ð ð1ð ó	1ð*

Ø#ð

àð

ð 
ó

ðØ#ðàðð ðð ó	ð<Ø#ðàðð ðð ó	ðR ñ	Ø#ðà
ðð ðð ð	ð
 óð,-Ø#ð-à
ð-ð ð-ð ó	-ðV "7Ð ð7Ø
ð7à#ð7ð ð7ð 	ð	7ð
 ó7ð<+Ø
ð+à#ð+ð ð+ð 	ð	+ð
 ó+ð( ØØØØØñ!€ˆt�C˜�H‰~ó ð ØØØØØñ€ˆˆc�3ˆh‰ó ðE
Ø#ðE
àðE
ð ðE
ð 	ð	E
ð
 óE
ðP-Ø#ð-àð-ð ð-ð 	ð	-ð
 ó-ð0	Ø#ð	Ø*9ð	à
ˆ3�ˆ9Ñó	ð&Ø#ð&Ø*9ð&àó&ð$,Ø#ð,Ø*;ð,ØCTð,àó,ð4 ‡K‚KØ	‡H‚H×ÒØ‡M‚Mð>Ð (¨%°°c°	Ñ*:ó ð_$Ø#ð_$àð_$ð 
ð_$ð ó	_$ðD!Ø#ð!àð!ð !ð!ð ˆ?˜OÐ+Ñ,ô	!r@   