Ë
    L²j©I  ã                  ó  — d Z ddlmZ ddlZddlmZmZmZ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mZ dd
lmZmZmZmZ ddlmZmZ erddlmZ ddlmZ ddlm Z   G d„ de«      Z! e!d«      Z" e!d«      Z# e!d«      Z$ G d„ de«      Z%y)zû
Constant variable tracking in Dynamo.

This module is fundamental to Dynamo's ability to track and propagate constant
values during compilation, ensuring proper handling of Python literals and
maintaining type safety through the compilation process.
é    )ÚannotationsN)ÚAnyÚLiteralÚoverloadÚTYPE_CHECKING)Úoverride)ÚGetItemSourceé   )Ú	variables)Úraise_observed_exceptionÚunimplemented)Úcommon_constant_typesÚistypeÚnpÚraise_args_mismatché   )ÚValueMutationNewÚVariableTracker)ÚSequence)ÚInstructionTranslator)ÚUserFunctionVariablec            
      ó   ‡ — e Zd ZdZeeeee e	d«      e
 e	d«      fZeed#d„«       «       Zeed$d„«       «       Zeed%d„«       «       Zed%d„«       Zd&ˆ fd„Zd'd	„Zd(d
„Zd'd„Zd)d„Zd*d„Zd+d„Zd*d„Zed,d„«       Z	 	 	 	 	 	 d-d„Zed.d„«       Zed/d0d„«       Z	 	 	 	 d1d„Zd2d„Zd2d„Zd2d„Zd3d„Z 	 	 	 	 	 	 	 	 	 	 d4ˆ fd„Z!	 	 	 	 	 	 	 	 	 	 	 	 d5ˆ fd„Z"e#	 	 	 	 	 	 d6d„«       Z$d)d„Z%d7d„Z&d8d„Z'd9d„Z(	 	 	 	 d:ˆ fd „Z)	 	 	 	 d:d!„Z*	 	 	 	 d:d"„Z+ˆ xZ,S );ÚConstantVariablea  
    Variable tracker for Python literals and basic immutable types, with automatic
    routing support for collection types (lists, tuples, sets, etc.).

    The create() method intelligently constructs appropriate variable types for
    nested collections.
    N.c                 ó   — y ©N© ©Úvalues    ú_/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/_dynamo/variables/constant.pyÚcreatezConstantVariable.create2   ó   € à14ó    c                 ó   — y r   r   r   s    r   r    zConstantVariable.create6   r!   r"   c                 ó   — y r   r   )r   Úkwargss     r   r    zConstantVariable.create:   s   € à>Ar"   c                ó„  — |s| x€ t         S xdu r t        S du rt        S |j                  d«      }t	        | t
        «      r8| D �cg c]  }t        j                  |«      ‘Œ }}t        j                  |fi |¤ŽS t	        | t        «      r8| D �cg c]  }t        j                  |«      ‘Œ }}t        j                  |fi |¤ŽS t	        | t        «      rK| j                  | j                  | j                  f}t!        d„ |D «       «      }t        j"                  |fi |¤ŽS t	        | t$        t         f«      ryg }t'        | «      D ];  \  }}|rt)        ||«      nd}|j+                  t        j                  ||¬«      «       Œ= t        j,                  j/                  t1        | «      «      |fi |¤ŽS t        | fi |¤ŽS c c}w c c}w )aV  
        Create a `ConstantVariable` based on the given value, and supports
        automatic routing for collection types like `tuple` (in which case we'd
        create `ConstantVariable` for the leaf items).

        NOTE: the caller must install the proper guards if needed; most often
        the guard will be `CONSTANT_MATCH`.
        NTFÚsourcec              3  óF   K  — | ]  }t         j                  |«      –— Œ y ­wr   )r   r    )Ú.0Úargs     r   ú	<genexpr>z*ConstantVariable.create.<locals>.<genexpr>^   s   è ø€ Ò#WÀSÔ$4×$;Ñ$;¸C×$@Ñ#Wùs   ‚!)r'   )ÚCONSTANT_VARIABLE_NONEÚCONSTANT_VARIABLE_TRUEÚCONSTANT_VARIABLE_FALSEÚgetÚ
isinstanceÚsetr   r    r   ÚSetVariableÚ	frozensetÚFrozensetVariableÚsliceÚstartÚstopÚstepÚtupleÚSliceVariableÚlistÚ	enumerater	   ÚappendÚBaseListVariableÚcls_forÚtype)	r   r%   r'   ÚxÚitemsÚ
slice_argsÚslice_args_varsÚiÚitem_sources	            r   r    zConstantVariable.create>   sž  € ñ ØÚÜ1Ð1ÜÜ1Ð1ÚÜ2Ð2à—‘˜HÓ%ˆô �eœSÔ!Ø9>Ö?°AÔ%×,Ñ,¨QÕ/Ð?ˆEÐ?Ü×(Ñ(¨Ñ9°&Ñ9Ð9Ü˜œyÔ)Ø9>Ö?°AÔ%×,Ñ,¨QÕ/Ð?ˆEÐ?Ü×.Ñ.¨uÑ?¸Ñ?Ð?Ü˜œuÔ%ØŸ+™+ u§z¡z°5·:±:Ð>ˆJÜ#Ñ#WÈJÔ#WÓWˆOÜ×*Ñ*¨?ÑE¸fÑEÐEÜ˜¤¤e˜}Ô-ØˆEÜ! %Ó(ò ‘��1Ù:@œm¨F°AÔ6Àd�Ø—‘Ü$×+Ñ+ØØ*ð ,ó õðô ×-Ñ-×5Ñ5´d¸5³kÓBÀ5ÑSÈFÑSÐSä Ñ0¨Ñ0Ð0ùò+ @ùò @s   ÁF8ÂF=c                óð   •— t        ‰| �  di |¤Ž t        j                  |«      sJ dt	        |«      › d�«       ‚t
        �0t        |t
        j                  «      r|j                  «       | _	        y || _	        y )Nz7
Cannot construct `ConstantVariable` for value of type a`  .

This failure likely due to PyTorch-internal use of `ConstantVariable` on
non-literal python values, please try using `VariableTracker.build` instead. If
you believe it's a necessary and legitimate use case (the value is immutable and
can't easily be represented with another `VariableTracker` class), please add
its type to `common_constant_types`.
r   )
ÚsuperÚ__init__r   Úis_base_literalr@   r   r0   ÚnumberÚitemr   ©Úselfr   r%   Ú	__class__s      €r   rI   zConstantVariable.__init__n   so   ø€ Ü‰ÑÑ"˜6Ò"Ü×/Ñ/°Ô6ð 	ð =7Ü7;¸E³{°mð Dð9ó 	Ð6ô ˆ>œj¨´·	±	Ô:ØŸ™›ˆD�JàˆD�Jr"   c                ó   — | j                   S r   r   ©rN   s    r   Úas_proxyzConstantVariable.as_proxy~   ó   € Ø�z‰zÐr"   c                ót   — dt        | j                  «      j                  › dt        | j                  «      › d�S )NzConstantVariable(z: ú))r@   r   Ú__name__ÚreprrQ   s    r   Ú__repr__zConstantVariable.__repr__�   s2   € Ø"¤4¨¯
©
Ó#3×#<Ñ#<Ð"=¸RÄÀTÇZÁZÓ@PÐ?QÐQRÐSÐSr"   c                ó   — | j                   S r   r   rQ   s    r   Úas_python_constantz#ConstantVariable.as_python_constant„   rS   r"   c                 ó   — y©NTr   rQ   s    r   Úis_python_constantz#ConstantVariable.is_python_constant‡   ó   € Ør"   c                óB   — t        | j                  t        t        f«      S r   )r0   r   ÚintÚboolrQ   s    r   Úis_symnode_likez ConstantVariable.is_symnode_likeŠ   s   € Ü˜$Ÿ*™*¤s¬D kÓ2Ð2r"   c                ó   — | j                   |v S r   r   )rN   Úvaluess     r   Úis_constant_matchz"ConstantVariable.is_constant_match�   s   € Ø�z‰z˜VÐ#Ð#r"   c                ó   — | j                   d u S r   r   rQ   s    r   Úis_constant_nonez!ConstantVariable.is_constant_none�   s   € Ø�z‰z˜TÐ!Ð!r"   c                ó&   — | j                  d¬«      S )zz
        Need this when adding a BaseListVariable and a ConstantVariable together.
        Happens in detectron2.
        N)Útx)Úunpack_var_sequencerQ   s    r   rB   zConstantVariable.items“   s   € ð ×'Ñ'¨4Ð'Ó0Ð0r"   c                ób   — t         j                  | j                  |j                  «          «      S r   )r   r    r   rZ   )rN   ri   r*   s      r   Úgetitem_constzConstantVariable.getitem_const›   s,   € ô  ×&Ñ&Ø�J‰J�s×-Ñ-Ó/Ñ0ó
ð 	
r"   c                ó$   — t        | «      t        v S r   )r@   r   )Úobjs    r   rJ   z ConstantVariable.is_base_literal¢   s   € ä�C‹yÔ1Ð1Ð1r"   c                óö   ‡— ‰€i Št        | «      ‰v ryt        | «      t        t        t        t
        t        j                  fv r"| ‰t        | «      <   t        ˆfd„| D «       «      S t        j                  | «      S )NTc              3  óJ   •K  — | ]  }t         j                  |‰«      –— Œ y ­wr   )r   Ú
is_literal)r)   rA   Úcaches     €r   r+   z.ConstantVariable.is_literal.<locals>.<genexpr>¯   s   øè ø€ ÒJÀÔ'×2Ñ2°1°e×<ÑJùs   ƒ #)Úidr@   r;   r9   r1   r3   ÚtorchÚSizeÚallr   rJ   )rn   rr   s    `r   rq   zConstantVariable.is_literal¦   sf   ø€ àˆ=ØˆEÜˆc‹7�eÑàÜ�‹9œœu¤c¬9´e·j±jÐAÑAØ ˆE”"�S“'‰NÜÓJÀcÔJÓJÐJÜ×/Ñ/°Ó4Ð4r"   c                ó    — 	 | j                  «       D �cg c]  }t        j                  |«      ‘Œ c}S c c}w # t        $ r}t        |‚d }~ww xY wr   )rZ   r   r    Ú	TypeErrorÚNotImplementedError)rN   ri   rA   Úes       r   rj   z$ConstantVariable.unpack_var_sequence²   sH   € ð	-Ø8<×8OÑ8OÓ8QÖR°1Ô$×+Ñ+¨AÕ.ÒRÐRùÒRøÜò 	-Ü%¨1Ð,ûð	-ús!   ‚8 ”3°8 ³8 ¸	AÁAÁAc                óÔ   — 	 t         j                  t        | j                  «      «      S # t        $ r4}t        t        |«      |t        |j                  «      ¬«       Y d}~yd}~ww xY w)z9Generic len for any constant value (sequence or mapping).©ÚargsN)	r   r    Úlenr   rx   r   r@   r;   r}   )rN   ri   rz   s      r   Úlen_implzConstantVariable.len_implº   sN   € ð	EÜ#×*Ñ*¬3¨t¯z©z«?Ó;Ð;øÜò 	EÜ$¤T¨!£W¨b´t¸A¿F¹F³|×DÒDûð	Eús   ‚'* ª	A'³*A"Á"A'c                ó$   — | j                  |«      S )z6Sequence length - delegates to len_impl for constants.©r   ©rN   ri   s     r   Ú	sq_lengthzConstantVariable.sq_lengthÁ   ó   € à�}‰}˜RÓ Ð r"   c                ó$   — | j                  |«      S )z5Mapping length - delegates to len_impl for constants.r�   r‚   s     r   Ú	mp_lengthzConstantVariable.mp_lengthÅ   r„   r"   c                ó¦   — t        | j                  |«      st        t        ||g¬«       t	        | j                  |«      }t        |«      rt        ‚|S )Nr|   )Úhasattrr   r   ÚAttributeErrorÚgetattrÚcallablery   )rN   ri   ÚnameÚmembers       r   Úconst_getattrzConstantVariable.const_getattrÉ   sA   € Ü�t—z‘z 4Ô(Ü$¤^°R¸t¸fÕEÜ˜Ÿ™ TÓ*ˆÜ�FÔÜ%Ð%Øˆr"   c           
     óÜ  •‡— ddl mŠ |dk(  rQt        | j                  t        «      r7t        j                  t        j                  «      j                  || g|¢|«      S |dk(  r°t        | j                  t        «      r–|st        |«      dk7  r&t        ||dt        |«      › dt        |«      › d�«       |d   j                  |«      }	 |D �cg c]  }|j                  «       ‘Œ }}t        j                  | j                  j                  |«      «      S |d	k(  rAt        | j                  t        «      r'dd
lm}  || j+                  |«      t-        «       ¬«      S t/        ˆfd„|D «       «      rKt
        j                  j                  || j1                  «       | j                  «      j%                  ||||«      S 	 |D �	cg c]  }	|	j                  «       ‘Œ }
}	|j3                  «       D ��ci c]  \  }}||j                  «       “Œ }}}t5        | j                  t        «      rD|t        j6                  v r2t9        | j                  |«      }	 t        j                   ||
i |¤Ž«      S t5        | j                  t@        tB        f«      �r0tE        | j                  |«      �r|s1|s/	 t        j                   t9        | j                  |«      «       «      S tE        tN        |«      �r„t        |«      dk(  �ru|d   jQ                  «       �ra|
d   }t9        tN        |«      }t5        |tR        jT                  tR        jV                  tR        jX                  f«      r=|jZ                  j]                  d|| j                  |fi «      }‰j                  |||«      S 	 t        j                   || j                  |«      «      S t5        | j                  t^        «      r6|dk(  r1t9        | j                  |«      }t        j                   ||
i |¤Ž«      S t?        | j                  «      t`        u rD|t`        j6                  v r2t9        | j                  |«      }	 t        j                   ||
i |¤Ž«      S |dk(  r\t        |«      dk(  rN|d   jQ                  «       r;	 t        j                  tc        | j                  |d   j                  «       «      «      S |dk(  r\t        |«      dk(  rN|d   jQ                  «       r;|rJ ‚|d   j                  «       }	 || j                  v }t        j                  |«      S t"        ‰| �I  ||||«      S c c}w # t         $ r t"        ‰| �I  ||||«      cY S w xY wc c}	w c c}}w # t         $ r t"        ‰| �I  ||||«      cY S w xY w# t:        $ r }t=        t?        |«      |«       Y d }~�ŒJd }~ww xY w# tF        tH        f$ r5}t=        t?        |«      |tK        |jL                  «      ¬«       Y d }~�Œ&d }~ww xY w# t:        $ r5}t=        t?        |«      |tK        |jL                  «      ¬«       Y d }~�ŒÒd }~ww xY w# t:        $ r }t=        t?        |«      |«       Y d }~�Œþd }~ww xY w# t:        $ r5}t=        t?        |«      |tK        |jL                  «      ¬«       Y d }~�Œ}d }~ww xY w# td        $ r5}t=        t?        |«      |tK        |jL                  «      ¬«       Y d }~�Œ¾d }~ww xY w)Nr   ©ÚSymNodeVariableÚformatÚjoinz1 args and 0 kwargsz
 args and z kwargsr   Ú__iter__)ÚListIteratorVariable)Úmutation_typec              3  ó6   •K  — | ]  }t        |‰«      –— Œ y ­wr   )r0   )r)   rA   r‘   s     €r   r+   z/ConstantVariable.call_method.<locals>.<genexpr>õ   s   øè ø€ Ò<°!Œz˜!˜_×-Ñ<ùs   ƒr|   Úcall_functionÚdecodeÚ	__round__Ú__contains__)3Útensorr‘   r   r   Ústrr   ÚBuiltinVariabler’   r˜   r~   r   Úforce_unpack_var_sequencerZ   r   r    r“   ry   rH   Úcall_methodÚlistsr•   rj   r   ÚanyrR   rB   r0   Ú__dict__rŠ   Ú	Exceptionr   r@   Úfloatr`   rˆ   ÚOverflowErrorÚ
ValueErrorr;   r}   Úoperatorr]   rt   ÚSymBoolÚSymFloatÚSymIntÚoutputÚcreate_proxyÚbytesÚcomplexÚroundrx   )rN   ri   rŒ   r}   r%   Úarg_unpackedrA   Ú	arg_constr•   ÚaÚ
const_argsÚkÚvÚconst_kwargsÚmethodrz   ÚexcÚ
add_targetÚopÚproxyÚsearchÚresultr‘   rO   s                         @€r   r    zConstantVariable.call_methodÑ   sØ  ù€ õ 	,à�8Ò¤ t§z¡z´3Ô 7Ü×,Ñ,¬S¯Z©ZÓ8×FÑFØ�T�M˜D�M 6óð ð �VŠ^¤ t§z¡z´3Ô 7Ùœ˜T› ašÜ#ØØØ)Ü˜4“y�k ¬C°«K¨=¸Ð@ô	ð   ™7×<Ñ<¸RÓ@ˆLðCØ=IÖJ¸˜Q×1Ñ1Õ3ÐJ�	ÐJÜ'×.Ñ.¨t¯z©z¯©¸yÓ/IÓJÐJð �ZÒ¤F¨4¯:©:´sÔ$;õ 4á'Ø×(Ñ(¨Ó,Ô<LÓ<Nôð ô Ó<°tÔ<Ô<ä×,Ñ,×3Ñ3Ø�D—M‘M“O T§Z¡Zóç‰k˜"˜d D¨&Ó1ð2ð	?Ø:>Ö?°Q˜!×.Ñ.Õ0Ð?ˆJÐ?ØBHÇ,Á,Ã.×Q¹$¸!¸Q˜A˜q×3Ñ3Ó5Ñ5ÐQˆLÑQô �d—j‘j¤#Ô&¨4´3·<±<Ñ+?Ü˜TŸZ™Z¨Ó.ˆFð6Ü'×.Ñ.©v°zÐ/RÀ\Ñ/RÓSÐSô ˜Ÿ
™
¤U¬C LÕ1´g¸d¿j¹jÈ$Õ6OÙ™FðÜ+×2Ñ2Ð3L´7¸4¿:¹:ÀtÓ3LÓ3NÓOÐOô œ $Õ'Ü˜“I “NØ˜‘G×.Ñ.Õ0à'¨™]�
ÜœX tÓ,�ÜØ¤§¡´·±ÄÇÁÐ Môð ŸI™I×2Ñ2Ø'¨¨d¯j©j¸*Ð-EÀró�Eð +×1Ñ1°"°e¸ZÓHÐHðQÜ/×6Ñ6±r¸$¿*¹*ÀjÓ7QÓRÐRô ˜Ÿ
™
¤EÔ*¨t°xÒ/?Ü˜TŸZ™Z¨Ó.ˆFÜ#×*Ñ*©6°:Ð+NÀÑ+NÓOÐOÜ�$—*‘*Ó¤Ñ(¨T´W×5EÑ5EÑ-EÜ˜TŸZ™Z¨Ó.ˆFð6Ü'×.Ñ.©v°zÐ/RÀ\Ñ/RÓSÐSð �;Ò¤3 t£9°¢>°d¸1±g×6PÑ6PÔ6RðIÜ'×.Ñ.Ü˜$Ÿ*™* d¨1¡g×&@Ñ&@Ó&BÓCóð ð
 �^Ò#¬¨D«	°Qª¸4À¹7×;UÑ;UÔ;WÙÐ�:Ø˜!‘W×/Ñ/Ó1ˆFðIØ 4§:¡:Ð-�Ü'×.Ñ.¨vÓ6Ð6ô ‰wÑ" 2 t¨T°6Ó:Ð:ùòm Køä&ò CÜ‘wÑ*¨2¨t°T¸6ÓBÒBðCüò$ @ùÛQøÜ"ò 	?Ü‘7Ñ& r¨4°°vÓ>Ò>ð	?ûô ò 6Ü(¬¨a«°"×5Ò5ûð6ûô &¤zÐ2ò Ü,Ü˜S›	ØÜ! #§(¡(›^÷ó ûðûô0 %ò QÜ0´°a³¸"Ä4ÈÏÉÃ<×PÓPûðQûô ò 6Ü(¬¨a«°"×5Ò5ûð6ûô ò IÜ(¬¨a«°"¼4ÀÇÁ»<×HÓHûðIûô ò IÜ(¬¨a«°"¼4ÀÇÁ»<×HÓHûðIúsä   Ã	T? ÃT:Ã$/T? Æ:U+ Æ>U ÇU+ Ç*U%ÈU+ ÉV Ê#-V8 Î%W? ÑY  Ò9Y, Ô"Z- Ô:T? Ô?UÕUÕ U+ Õ+V	ÖV	Ö	V5ÖV0Ö0V5Ö8W<×*W7×7W<×?	X=Ø*X8Ø8X=Ù 	Y)Ù	Y$Ù$Y)Ù,	Z*Ù5*Z%Ú%Z*Ú-	[+Ú6*[&Û&[+c           
     ó˜  •— | j                   €®|j                  d«      }|�	 t        |j                  «       «      }n*t        t        |dd «      dd«      }|j                  d«       }|r|j                  || g|¢i «      S |D ])  }	|	j                  «       rŒ| j                  |||||«      c S  | j                  «       S t        | j                   t        t        t        t        t        t         t"        j$                  f«      r|j                  || g|¢i «      S t&        ‰
| �Q  |||||«      S # t        $ r | j                  |||||«      cY S w xY w)NÚnone_is_leafÚfnÚ
__module__Ú Úoptree)r   r/   ra   rZ   ry   Ú_tree_map_fallbackrŠ   Ú
startswithr˜   rg   Úcloner0   r`   r¥   r¯   r�   r®   rt   ÚdtyperH   Úcall_tree_map)rN   ri   Útree_map_fnÚmap_fnÚrestÚtree_map_kwargsÚnone_is_leaf_varrÀ   Útree_map_moduleÚotherrO   s             €r   rÉ   zConstantVariable.call_tree_map@  si  ø€ ð �:‰:ÐØ.×2Ñ2°>ÓBÐØÐ+ð	Ü#'Ð(8×(KÑ(KÓ(MÓ#N‘Lô #*Ü˜K¨¨tÓ4°lÀBó#�ð $3×#=Ñ#=¸hÓ#GÐG�ÙØ×+Ñ+¨B°°¸°¸rÓBÐBà!ò �EØ ×1Ñ1Õ3Ø#×6Ñ6ØØ'Ø"Ø Ø+ó ò ðð —z‘z“|Ð#Ü�d—j‘j¤3¬¬t´W¼cÄ5Ì%Ï+É+Ð"VÔWØ×'Ñ'¨¨T¨M°D¨M¸2Ó>Ð>Ü‰wÑ$ØØØØØó
ð 	
øô? +ò Ø×2Ñ2ØØ#ØØØ'óò ðús   ¢D( Ä(E	ÅE	c                ól   — t        | j                  |«      }t        j                  j	                  |«      S r   )rˆ   r   r   r   r    )rN   ri   rŒ   r¾   s       r   Úcall_obj_hasattrz!ConstantVariable.call_obj_hasattrt  s+   € ô ˜Ÿ™ TÓ*ˆÜ×)Ñ)×0Ñ0°Ó8Ð8r"   c                 ó   — yr\   r   rQ   s    r   Úis_python_hashablez#ConstantVariable.is_python_hashable{  r^   r"   c                ó,   — t        | j                  «      S r   ©Úhashr   rQ   s    r   Úget_python_hashz ConstantVariable.get_python_hash~  ó   € Ü�D—J‘JÓÐr"   c                óÎ   — ddl m} t        ||«      r!| j                  «       |j	                  «       k(  S t        |t
        «      xr! | j                  «       |j                  «       k(  S )Nr   r�   )rœ   r‘   r0   rZ   Úevaluate_exprr   )rN   rÐ   r‘   s      r   Úis_python_equalz ConstantVariable.is_python_equal�  s[   € Ý+ä�e˜_Ô-Ø×*Ñ*Ó,°×0CÑ0CÓ0EÑEÐEä�uœoÓ.ò HØ×'Ñ'Ó)¨U×-EÑ-EÓ-GÑGð	
r"   c                ó   — | j                   S r   r   rQ   s    r   Úget_real_python_backed_valuez-ConstantVariable.get_real_python_backed_value‹  rS   r"   c                óÆ   •— t        | j                  t        t        f«      r2t        j                  t        j                  | j                  «      «      S t        ‰| �%  |«      S r   )
r0   r   r`   ra   r   r    r¨   ÚindexrH   Únb_index_impl)rN   ri   rO   s     €r   rá   zConstantVariable.nb_index_implŽ  sE   ø€ ô �d—j‘j¤3¬ +Ô.Ü#×*Ñ*¬8¯>©>¸$¿*¹*Ó+EÓFÐFÜ‰wÑ$ RÓ(Ð(r"   c                óR   — t         j                  t        | j                  «      «      S r   )r   r    r`   r   r‚   s     r   Únb_int_implzConstantVariable.nb_int_impl˜  s   € ô  ×&Ñ&¤s¨4¯:©:£Ó7Ð7r"   c                óR   — t         j                  t        | j                  «      «      S r   )r   r    r¥   r   r‚   s     r   Únb_float_implzConstantVariable.nb_float_impl¡  s   € ô  ×&Ñ&¤u¨T¯Z©ZÓ'8Ó9Ð9r"   )r   ÚNoneÚreturnr   )r   ra   rç   r   )r   r   r%   r   rç   r   )r   r   r%   r   rç   ræ   )rç   r   )rç   r�   )rç   zLiteral[True]©rç   ra   )rd   r   rç   ra   )rç   úlist[VariableTracker])ri   r   r*   r   rç   r   )rn   Úobjectrç   ra   r   )rn   rê   rr   zdict[int, object] | Nonerç   ra   )ri   zInstructionTranslator | Nonerç   ré   )ri   r   rç   r   )ri   r   rŒ   r�   rç   r   )
ri   r   rŒ   r�   r}   ré   r%   údict[str, VariableTracker]rç   r   )ri   r   rÊ   r   rË   r   rÌ   zSequence[VariableTracker]rÍ   rë   rç   r   )ri   r   rŒ   r�   rç   r   ©rç   r`   ©rÐ   rê   rç   ra   )rç   rê   )ri   r   rç   r   )-rV   rÂ   Ú__qualname__Ú__doc__r`   r¥   r�   r®   ra   r@   r¯   Ú_cpython_typer   Ústaticmethodr    rI   rR   rX   rZ   r]   rb   re   rg   ÚpropertyrB   rl   rJ   rq   rj   r   rƒ   r†   rŽ   r    rÉ   r   rÒ   rÔ   rØ   rÜ   rÞ   rá   rã   rå   Ú__classcell__©rO   s   @r   r   r       s*  ø„ ñð ˜%  e¨T±4¸³:¸wÉÈSË	ÐR€MàØÚ4ó ó à4àØÚ4ó ó à4àØÚAó ó àAàò-1ó ð-1õ^ó óTóóó3ó$ó"ð ò1ó ð1ð
Ø'ð
Ø.=ð
à	ó
ð ò2ó ð2ð ó	5ó ð	5ð-Ø.ð-à	ó-óEó!ó!óðm;à!ðm;ð ðm;ð $ð	m;ð
 +ðm;ð 
õm;ð^2
à!ð2
ð *ð2
ð  ð	2
ð
 (ð2
ð 4ð2
ð 
õ2
ðh ð9Ø'ð9Ø/2ð9à	ò9ó ð9óó ó
óð)àð)ð 
õ)ð8àð8ð 
ó8ð:àð:ð 
÷:r"   r   TFc                  ó`   ‡ — e Zd ZdZeZd
ˆ fd„Zdd„Zdd„Zdd„Z	dd„Z
dd„Zdd„Zdd	„Zˆ xZS )ÚFakeIdVariablea6  A compile-time-only id value that can be used as a dict key but cannot
    be reconstructed across graph breaks.

    When dynamo evaluates ``id(x)`` on a variable tracker that has no
    corresponding runtime object (e.g. a ``ConstDictVariable`` created during
    tracing), we mint a fake integer id.  This variable holds that id and
    supports the minimal interface needed to participate as a dict key
    (hashing and equality).  It intentionally blocks reconstruction so that a
    graph break does not silently bake a stale id into the resumed bytecode.
    c                ó2   •— t        ‰| �  di |¤Ž || _        y )Nr   )rH   rI   r   rM   s      €r   rI   zFakeIdVariable.__init__¿  s   ø€ Ü‰ÑÑ"˜6Ò"Øˆ�
r"   c                ó   — | j                   S r   r   rQ   s    r   rZ   z!FakeIdVariable.as_python_constantÃ  rS   r"   c                 ó   — y©NFr   rQ   s    r   r]   z!FakeIdVariable.is_python_constantÆ  s   € Ør"   c                ó   — t         S r   )r`   rQ   s    r   Úpython_typezFakeIdVariable.python_typeÉ  s   € Üˆ
r"   c                 ó   — yr\   r   rQ   s    r   rÔ   z!FakeIdVariable.is_python_hashableÌ  r^   r"   c                ó,   — t        | j                  «      S r   rÖ   rQ   s    r   rØ   zFakeIdVariable.get_python_hashÏ  rÙ   r"   c                ój   — t        |t        t        f«      r| j                  |j	                  «       k(  S yrú   )r0   rö   r   r   rZ   )rN   rÐ   s     r   rÜ   zFakeIdVariable.is_python_equalÒ  s-   € Ü�eœnÔ.>Ð?Ô@Ø—:‘: ×!9Ñ!9Ó!;Ñ;Ð;Ør"   c                óJ   — t        dt        | j                  «      ddg¬«       y )Nz Reconstruction of FakeIdVariablezdA fake id produced by id() on a compile-time container cannot be reconstructed across a graph break.z<Avoid using id() on containers in code that may graph-break.)Úgb_typeÚcontextÚexplanationÚhints)r   r�   r   )rN   Úcodegens     r   ÚreconstructzFakeIdVariable.reconstruct×  s)   € ÜØ6Ü˜Ÿ
™
“Oð@ð Oðö
	
r"   )r   r`   r%   r   rç   ræ   rì   rè   )rç   r@   rí   )r  r   rç   ræ   )rV   rÂ   rî   rï   r`   rð   rI   rZ   r]   rü   rÔ   rØ   rÜ   r  ró   rô   s   @r   rö   rö   °  s7   ø„ ñ	ð €Mõóóóóó ó÷

r"   rö   )&rï   Ú
__future__r   r¨   Útypingr   r   r   r   Útyping_extensionsr   rt   Útorch._dynamo.sourcer	   rÃ   r   r¹   r   r   Úutilsr   r   r   r   Úbaser   r   Úcollections.abcr   Útorch._dynamo.symbolic_convertr   Ú	functionsr   r   r,   r-   r.   rö   r   r"   r   ú<module>r     s|   ðñõ #ã ß 8Ó 8Ý &ã Ý .å ß 9ß JÓ Jß 3ñ Ý(åDå/ôH:�ô H:ñV *¨$Ó/Ð Ù)¨$Ó/Ð Ù*¨5Ó1Ð ô2
�_õ 2
r"   