ó
    EñivC  ã                   ó  • S r SSKrSSKrSSKJr  SSKJrJrJrJ	r	J
r
Jr  SSKJrJr  SSKrSSKJrJr  SSKJrJr  SS	KJrJr  SS
KJrJrJrJrJrJr  SSK J!r!J"r"  \
(       a  SSK#J$r$  SSK%J&r&   " S S\"5      r'\'" S5      r( " S S\"5      r)g)a  
Constant and enum 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.
é    N)ÚSequence)ÚAnyÚLiteralÚOptionalÚoverloadÚTYPE_CHECKINGÚUnion)ÚNeverÚoverride)Ú
AttrSourceÚGetItemSourceé   )Úgraph_break_hintsÚ	variables)Úraise_observed_exceptionÚunimplemented)Úcmp_name_to_op_mappingÚcommon_constant_typesÚistypeÚnpÚraise_args_mismatchÚraise_on_overridden_hashé   )ÚValueMutationNewÚVariableTracker)ÚInstructionTranslator)ÚUserFunctionVariablec                   ó¶  ^ • \ rS rSrSr\\SSS\4S j5       5       r\\S\	SS 4S j5       5       r\\S\
S\
S\4S	 j5       5       r\S\
S\
S\4S
 j5       rS\
S\
SS4U 4S jjrS\
4S jrS\4S jrS\
4S jrS\S   4S jrS\	4S jrS\
S\	4S jrS\	4S jr\S\\   4S j5       rSSS\S\4S jr\S\S\	4S j5       r\S/S\S\\\4   S-  S\	4S jj5       rS\S   S\\   4S jr SSS\S\4S  jr!SSS\S!\\   S\\\4   S\4
U 4S" jjr"SSS#S$S%\S&\#\   S'\\\4   S\4U 4S( jjr$\%SSS\SS 4S) j5       r&S\S   4S* jr'S\4S+ jr(S,\S\	4S- jr)S.r*U =r+$ )0ÚConstantVariableé%   zó
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.
ÚvalueNÚreturnc                 ó   • g ©N© ©r!   s    Ú]/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_dynamo/variables/constant.pyÚcreateÚConstantVariable.create.   s   € à&)ó    c                 ó   • g r$   r%   r&   s    r'   r(   r)   2   s   € à36r*   Úkwargsc                 ó   • g r$   r%   )r!   r,   s     r'   r(   r)   7   s   € à>Ar*   c                 ó„  • UR                  S5      n[        U [        5      (       a<  U  Vs/ s H  n[        R	                  U5      PM     nn[
        R                  " U40 UD6$ [        U [        5      (       a<  U  Vs/ s H  n[        R	                  U5      PM     nn[
        R                  " U40 UD6$ [        U [        5      (       aL  U R                  U R                  U R                  4n[        S U 5       5      n[
        R                  " U40 UD6$ [        U [        [        45      (       a|  / n[!        U 5       H<  u  psU(       a  [#        X'5      OSnUR%                  [        R	                  UUS95        M>     [
        R&                  R)                  [+        U 5      5      " U40 UD6$ [        U 40 UD6$ s  snf s  snf )a&  
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`.
Úsourcec              3   óL   #   • U  H  n[         R                  U5      v •  M     g 7fr$   )r   r(   )Ú.0Úargs     r'   Ú	<genexpr>Ú*ConstantVariable.create.<locals>.<genexpr>P   s   é € Ð#WÊJÀSÔ$4×$;Ñ$;¸C×$@Ð$@ÊJùs   ‚"$N©r/   )Ú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(   r)   ;   s‚  € ð —‘˜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Ü! %Ö(‘�Þ:@œm¨FÔ6Àd�Ø—‘Ü$×+Ñ+ØØ*ð ,ð öñ )ô ×-Ñ-×5Ñ5´d¸5³kÔBÀ5ÑSÈFÑSÐSä Ñ0¨Ñ0Ð0ùò+ @ùò @s   «F8Á<F=c                 ó  >• [         TU ]  " S0 UD6  [        R                  U5      (       d   S[	        U5       S35       e[
        b5  [        U[
        R                  5      (       a  UR                  5       U l	        g Xl	        g )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_literalrG   r   r7   ÚnumberÚitemr!   ©Úselfr!   r,   Ú	__class__s      €r'   rP   ÚConstantVariable.__init__`   ss   ø€ Ü‰ÒÑ"˜6Ò"Ü×/Ñ/°×6Ñ6ð 	ð =7Ü7;¸E³{°mð Dð9ó 	Ð6ô ‰>œj¨´·	±	×:Ñ:ØŸ™›ˆD�Jà�Jr*   c                 ó   • U R                   $ r$   r&   ©rU   s    r'   Úas_proxyÚConstantVariable.as_proxyp   ó   € Ø�z‰zÐr*   c                 ót   • S[        U R                  5      R                   S[        U R                  5       S3$ )NzConstantVariable(z: Ú))rG   r!   Ú__name__ÚreprrY   s    r'   Ú__repr__ÚConstantVariable.__repr__s   s2   € Ø"¤4¨¯
©
Ó#3×#<Ñ#<Ð"=¸RÄÀTÇZÁZÓ@PÐ?QÐQRÐSÐSr*   c                 ó   • U R                   $ r$   r&   rY   s    r'   Úas_python_constantÚ#ConstantVariable.as_python_constantv   r\   r*   Tc                 ó   • g©NTr%   rY   s    r'   Úis_python_constantÚ#ConstantVariable.is_python_constanty   ó   € Ør*   c                 óB   • [        U R                  [        [        45      $ r$   )r7   r!   ÚintÚboolrY   s    r'   Úis_symnode_likeÚ ConstantVariable.is_symnode_like|   s   € Ü˜$Ÿ*™*¤s¬D kÓ2Ð2r*   Úvaluesc                 ó    • U R                   U;   $ r$   r&   )rU   rp   s     r'   Úis_constant_matchÚ"ConstantVariable.is_constant_match   s   € Ø�z‰z˜VÑ#Ð#r*   c                 ó   • U R                   S L $ r$   r&   rY   s    r'   Úis_constant_noneÚ!ConstantVariable.is_constant_none‚   s   € Ø�z‰z˜TÐ!Ð!r*   c                 ó    • U R                  SS9$ )zb
Need this when adding a BaseListVariable and a ConstantVariable together.
Happens in detectron2.
N)Útx)Úunpack_var_sequencerY   s    r'   rI   ÚConstantVariable.items…   s   € ð ×'Ñ'¨4Ð'Ð0Ð0r*   rx   r   r2   c                 ób   • [         R                  U R                  UR                  5          5      $ r$   )r   r(   r!   rd   )rU   rx   r2   s      r'   Úgetitem_constÚConstantVariable.getitem_const�   s,   € ô  ×&Ñ&Ø�J‰J�s×-Ñ-Ó/Ñ0ó
ð 	
r*   Úobjc                 ó&   • [        U 5      [        ;   $ r$   )rG   r   )r~   s    r'   rQ   Ú ConstantVariable.is_base_literal”   s   € ä�C‹yÔ1Ñ1Ð1r*   Úcachec                 ó  ^• Tc  0 m[        U 5      T;   a  g[        U 5      [        [        [        [
        [        R                  4;   a#  U T[        U 5      '   [        U4S jU  5       5      $ [        R                  U 5      $ )NTc              3   óP   >#   • U  H  n[         R                  UT5      v •  M     g 7fr$   )r   Ú
is_literal)r1   rH   r�   s     €r'   r3   Ú.ConstantVariable.is_literal.<locals>.<genexpr>¡   s"   øé € ÐJÂcÀÔ'×2Ñ2°1°e×<Ð<Âcùs   ƒ#&)ÚidrG   rB   r@   r8   r:   ÚtorchÚSizeÚallr   rQ   )r~   r�   s    `r'   r„   Ú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                 ó¨   •  U R                  5        Vs/ s H  n[        R                  U5      PM     sn$ s  snf ! [         a  n[        UeS nAff = fr$   )rd   r   r(   Ú	TypeErrorÚNotImplementedError)rU   rx   rH   Úes       r'   ry   Ú$ConstantVariable.unpack_var_sequence¤   sN   € ð	-Ø8<×8OÑ8OÔ8QÓRÒ8Q°1Ô$×+Ñ+¨AÖ.Ñ8QÑRÐRùÒRøÜó 	-Ü%¨1Ð,ûð	-ús!   ‚; ”6³; ¶; »
AÁAÁAÚnamec                 ó²   • [        U R                  U5      (       d  [        [        X/S9  [	        U R                  U5      n[        U5      (       a  [        eU$ )N©Úargs)Úhasattrr!   r   ÚAttributeErrorÚgetattrÚcallabler�   )rU   rx   r�   Úmembers       r'   Úconst_getattrÚConstantVariable.const_getattr¬   sE   € Ü�t—z‘z 4×(Ñ(Ü$¤^°R¸fÒEÜ˜Ÿ™ TÓ*ˆÜ�F×ÑÜ%Ð%Øˆr*   r“   c                 óF  >^• SSK Jm  US:X  aV  [        U R                  [        5      (       a7  [
        R                  " [        R                  5      R                  X/UQU5      $ US:X  a½  [        U R                  [        5      (       až  U(       d  [        U5      S:w  a&  [        UUS[        U5       S[        U5       S35        US   R                  U5      n U Vs/ s H  ofR                  5       PM     nn[        R                  U R                  R                  U5      5      $ US	:X  aC  [        U R                  [        5      (       a$  SS
KJn  U" U R+                  U5      [-        5       S9$ [/        U4S jU 5       5      (       aH  [
        R                  R                  XR1                  5       U R                  5      R%                  XX45      $  U V	s/ s H  o™R                  5       PM     n
n	UR3                  5        VVs0 s H  u  p¼X¼R                  5       _M     nnn[5        U R                  [        5      (       aF  U[        R6                  ;   a2  [9        U R                  U5      n [        R                  U" U
0 UD65      $ [5        U R                  [@        [B        45      (       GaM  [E        U R                  U5      (       Ga1  U(       d6  U(       d/   [        R                  [9        U R                  U5      " 5       5      $ [E        [P        U5      (       aÞ  [        U5      S:X  aÏ  US   RS                  5       (       a·  U
S   n[9        [P        U5      n[5        U[T        RV                  [T        RX                  [T        RZ                  45      (       a=  UR\                  R_                  SUU R                  U40 5      nTR                  UUU5      $  [        R                  U" U R                  U5      5      $ O¸[5        U R                  [`        5      (       a7  US:X  a1  [9        U R                  U5      n[        R                  U" U
0 UD65      $ [?        U R                  5      [b        L aF  U[b        R6                  ;   a2  [9        U R                  U5      n [        R                  U" U
0 UD65      $ US:X  a7  U(       d0  U(       d)   [        R                  [        U R                  5      5      $ US:X  ab  [        U5      S:X  aS  US   RS                  5       (       a;   [        R                  [g        U R                  US   R                  5       5      5      $ US:X  ah  [        U5      S:X  aY  US   RS                  5       (       aA  U(       a   eUS   R                  5       n UU R                  ;   n[        R                  U5      $ ["        TU ]I  XX45      $ s  snf ! [          a    ["        TU ]I  XX45      s $ f = fs  sn	f s  snnf ! [          a    ["        TU ]I  XX45      s $ f = f! [:         a   n[=        [?        U5      U5         S nAGN˜S nAff = f! [F        [H        4 aJ  n[=        [?        U5      U[K        [M        [        R                  URN                  5      5      S9   S nAGN¡S nAff = f! [:         aJ  n[=        [?        U5      U[K        [M        [        R                  URN                  5      5      S9   S nAGNLS nAff = f! [:         a   n[=        [?        U5      U5         S nAGNyS nAff = f! [d         a2  n[=        [?        U5      U[K        URN                  5      S9   S nAGN¥S nAff = f! [:         aJ  n[=        [?        U5      U[K        [M        [        R                  URN                  5      5      S9   S nAGNüS nAff = f! [d         aJ  n[=        [?        U5      U[K        [M        [        R                  URN                  5      5      S9   S nAGNSS nAff = f)Nr   ©ÚSymNodeVariableÚformatÚjoinz1 args and 0 kwargsz
 args and z kwargsr   Ú__iter__)ÚListIteratorVariable)Úmutation_typec              3   ó<   >#   • U  H  n[        UT5      v •  M     g 7fr$   )r7   )r1   rH   r�   s     €r'   r3   Ú/ConstantVariable.call_method.<locals>.<genexpr>Ø   s   øé € Ð<²t°!Œz˜!˜_×-Ð-²tùs   ƒr’   Úcall_functionÚdecodeÚ__len__Ú	__round__Ú__contains__)4Útensorr�   r   r!   Ústrr   ÚBuiltinVariablerž   r¥   Úlenr   Úforce_unpack_var_sequencerd   r   r(   rŸ   r�   rO   Úcall_methodÚlistsr¡   ry   r   ÚanyrZ   rI   r7   Ú__dict__r–   Ú	Exceptionr   rG   Úfloatrl   r”   ÚOverflowErrorÚ
ValueErrorrB   Úmapr“   Úoperatorrh   r‡   ÚSymBoolÚSymFloatÚSymIntÚoutputÚcreate_proxyÚbytesÚcomplexrŒ   Úround)rU   rx   r�   r“   r,   Úarg_unpackedrH   Ú	arg_constr¡   ÚaÚ
const_argsÚkÚvÚconst_kwargsÚmethodrŽ   ÚexcÚ
add_targetÚopÚproxyÚsearchÚresultr�   rV   s                         @€r'   r¯   ÚConstantVariable.call_method´   s†  ù€ õ 	,à�8Ó¤ t§z¡z´3× 7Ñ 7Ü×,Ò,¬S¯Z©ZÓ8×FÑFØ�M˜D�M 6óð ð �V‹^¤ t§z¡z´3× 7Ñ 7Þœ˜T› a›Ü#ØØØ)Ü˜4“y�k ¬C°«K¨=¸Ð@ô	ð   ™7×<Ñ<¸RÓ@ˆLðCÙ=IÓJº\¸×1Ñ1Ö3¹\�	ÐJÜ'×.Ñ.¨t¯z©z¯©¸yÓ/IÓJÐJð �ZÓ¤F¨4¯:©:´s×$;Ñ$;õ 4á'Ø×(Ñ(¨Ó,Ô<LÓ<Nñð ô Ô<±tÓ<×<Ñ<ä×,Ñ,×3Ñ3Ø—M‘M“O T§Z¡Zóç‰k˜" DÓ1ð2ð	?Ù:>Ó?º$°Q×.Ñ.Ö0¹$ˆJÐ?ØBHÇ,Á,Ä.ÔQÂ.¹$¸!˜A×3Ñ3Ó5Ò5Á.ˆLÑQô �d—j‘j¤#×&Ñ&¨4´3·<±<Ó+?Ü˜TŸZ™Z¨Ó.ˆFð6Ü'×.Ñ.©v°zÐ/RÀ\Ñ/RÓSÐSô ˜Ÿ
™
¤U¬C L×1Ò1´g¸d¿j¹jÈ$×6OÒ6OÞžFðÜ+×2Ñ2´7¸4¿:¹:ÀtÔ3LÓ3NÓOÐOô œ $×'Ñ'Ü˜“I “NØ˜‘G×.Ñ.×0Ñ0à'¨™]�
ÜœX tÓ,�ÜØ¤§¡´·±ÄÇÁÐ M÷ñ ð ŸI™I×2Ñ2Ø'¨¨d¯j©j¸*Ð-EÀró�Eð +×1Ñ1°"°e¸ZÓHÐHðÜ/×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ð �9Ó¦d®fðIä'×.Ñ.¬s°4·:±:«Ó?Ð?ð �[Ó ¤S¨£Y°!£^¸¸Q¹×8RÑ8R×8TÑ8TðÜ'×.Ñ.ä˜$Ÿ*™* d¨1¡g×&@Ñ&@Ó&BÓCóð ð �^Ó#¬¨D«	°Q«¸4À¹7×;UÑ;U×;WÑ;WÞÐ�:Ø˜!‘W×/Ñ/Ó1ˆFðà 4§:¡:Ñ-�Ü'×.Ñ.¨vÓ6Ð6ô
 ‰wÑ" 2¨TÓ:Ð:ùòI Køä&ó CÜ‘wÑ*¨2°TÓBÒBðCüò$ @ùÛQøÜ"ó 	?Ü‘7Ñ& r°Ó>Ò>ð	?ûô ó 6Ü(¬¨a«°"×5Ò5ûð6ûô &¤zÐ2ó Ü,Ü˜S›	ØÜ!¤#Ô&6×&=Ñ&=¸s¿x¹xÓ"HÓI÷ð ûðûô0 %ó Ü0Ü  ›G R¬d´3Ô7G×7NÑ7NÐPQ×PVÑPVÓ3WÓ.X÷ð ûðûô ó 6Ü(¬¨a«°"×5Ò5ûð6ûô ó IÜ(¬¨a«°"¼4ÀÇÁ»<×HÐHûðIûô ó Ü(Ü˜“G˜R¤d¬3Ô/?×/FÑ/FÈÏÉÓ+OÓ&P÷ð ûðûô ó Ü(Ü˜“G˜R¤d¬3Ô/?×/FÑ/FÈÏÉÓ+OÓ&P÷ð ûðúsü   ÃW ÃWÃ8/W ÇX ÇW=Ç1X ÈXÈ"X É/X( Ë-Y Ï%Z2 Ò\	 Ó
'\6 Ô 9]5 Ö$#_ ×W ×W:×9W:×=X ØX%Ø$X%Ø(
YØ2YÙYÙZ/Ù%?Z*Ú*Z/Ú2
\Ú<?\Ü\Ü	
\3Ü\.Ü.\3Ü6
]2Ý ']-Ý-]2Ý5
_	Ý??_ß_	ß
` ß?`à` Útree_map_fnr   Úmap_fnÚrestÚtree_map_kwargsc           
      óÄ  >• U R                   c¾  UR                  S5      nUb   [        UR                  5       5      nO.[        [        USS 5      SS5      nUR                  S5      (       + nU(       a  UR                  X/UQ0 5      $ U H/  n	U	R                  5       (       a  M  U R                  UUUUU5      s  $    U R                  5       $ [        U R                   [        [        [        [        [        [         ["        R$                  45      (       a  UR                  X/UQ0 5      $ [&        T
U ]Q  UUUUU5      $ ! [         a    U R                  UUUUU5      s $ f = f)NÚnone_is_leafÚfnÚ
__module__Ú Úoptree)r!   r6   rm   rd   r�   Ú_tree_map_fallbackr–   Ú
startswithr¥   ru   Úcloner7   rl   r´   r¿   r«   r¾   r‡   ÚdtyperO   Úcall_tree_map)rU   rx   rÐ   rÑ   rÒ   rÓ   Únone_is_leaf_varrÕ   Útree_map_moduleÚotherrV   s             €r'   rÞ   ÚConstantVariable.call_tree_map1  sf  ø€ ð �:‰:ÑØ.×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Ó3Ø#×6Ñ6ØØ'Ø"Ø Ø+ó ò ñ "ð —z‘z“|Ð#Ü�d—j‘j¤3¬¬t´W¼cÄ5Ì%Ï+É+Ð"V×WÑWØ×'Ñ'¨¨M°D¨M¸2Ó>Ð>Ü‰wÑ$ØØØØØó
ð 	
øô? +ó Ø×2Ñ2ØØ#ØØØ'óò ðús   ¤D= Ä=EÅEc                 ól   • [        U R                  U5      n[        R                  R	                  U5      $ r$   )r”   r!   r   r   r(   )rU   rx   r�   rÎ   s       r'   Úcall_obj_hasattrÚ!ConstantVariable.call_obj_hasattre  s+   € ô ˜Ÿ™ TÓ*ˆÜ×)Ñ)×0Ñ0°Ó8Ð8r*   c                 ó   • grg   r%   rY   s    r'   Úis_python_hashableÚ#ConstantVariable.is_python_hashablel  rj   r*   c                 ó,   • [        U R                  5      $ r$   )Úhashr!   rY   s    r'   Úget_python_hashÚ ConstantVariable.get_python_hasho  s   € Ü�D—J‘JÓÐr*   rá   c                 óà   • SSK Jn  [        X5      (       a!  U R                  5       UR	                  5       :H  $ [        U[
        5      =(       a!    U R                  5       UR                  5       :H  $ )Nr   rœ   )rª   r�   r7   rd   Úevaluate_exprr   )rU   rá   r�   s      r'   Úis_python_equalÚ ConstantVariable.is_python_equalr  s\   € å+ä�e×-Ñ-Ø×*Ñ*Ó,°×0CÑ0CÓ0EÑEÐEä�uœoÓ.÷ HØ×'Ñ'Ó)¨U×-EÑ-EÓ-GÑGð	
r*   r&   r$   ),r_   r×   Ú__qualname__Ú__firstlineno__Ú__doc__r   Ústaticmethodr
   r(   rm   r   r   rP   rZ   r«   ra   rd   r   rh   rn   rr   ru   ÚpropertyrB   rI   r|   ÚobjectrQ   Údictrl   r„   r   ry   r™   r¯   r   rÞ   r   rä   rç   rë   rï   Ú__static_attributes__Ú__classcell__©rV   s   @r'   r   r   %   sà  ø† ñð ØØ)�dÐ)˜uÓ)ó ó à)àØØ6�dÐ6Ð1Ó6ó ó à6ð ØØA�cÐA SÐA¨_ÓAó ó àAàð"1�cð "1 Sð "1¨_ó "1ó ð"1ðH˜cð ¨Sð °T÷ ð ˜#ô ðT˜#ô Tð Cô ð G¨D¡Mô ð3 ô 3ð$¨ð $°ô $ð" $ô "ð ð1�t˜OÑ,ó 1ó ð1ð
Ø)ð
Ø0?ð
à	ô
ð ð2˜Vð 2¨ó 2ó ð2ð ñ	5˜ð 	5 t¨C°¨KÑ'8¸4Ñ'?ð 	5È4ô 	5ó ð	5ð-ØÐ2Ñ3ð-à	ˆoÑ	ô-ðÐ 7ð ¸sð Àô ð{;à#ð{;ð ð{;ð �?Ñ#ð	{;ð
 �S˜/Ð)Ñ*ð{;ð 
÷{;ðz2
à#ð2
ð ,ð2
ð  ð	2
ð
 �Ñ'ð2
ð ˜c ?Ð2Ñ3ð2
ð 
÷2
ðh ð9Ø)ð9Ø14ð9à	ó9ó ð9ð G¨D¡Mô ð  ô  ð	
 Vð 	
°÷ 	
ò 	
r*   r   c            	       óV  ^ • \ rS rSrSrS\\R                  \R                  4   S\	SS4U 4S jjr
\S\	S	\S
\	SS 4S j5       rS\\R                  \4   4S jrS\4S jrS\\R                  \R                  4   4S jrSSS\S\4S jrS\S   4S jrS\4S jrS\S\4S jrSrU =r$ )ÚEnumVariablei�  zÄVariableTracker for enum.Enum and enum.IntEnum instances

Provides specialized handling for Python enum types, supporting
both standard Enum and IntEnum with proper value tracking and comparison.
r!   r,   r"   Nc                 ó2   >• [         TU ]  " S0 UD6  Xl        g )Nr%   )rO   rP   r!   rT   s      €r'   rP   ÚEnumVariable.__init__ˆ  s   ø€ Ü‰ÒÑ"˜6Ò"Ø�
r*   Úcls_typeÚvalue_vtÚoptionsc           
      ó:  • UR                  5       (       a;  [        U5       H,  nUR                  UR                  5       :X  d  M#  U " U40 UD6s  $    [	        SSU S[        U5       3SU S[        U5       S3/ [
        R                  Q[
        R                  QS9  g )Nz!Failed to construct Enum variablezvalue: z, allowed enum values: z•Attempted to construct an Enum value that is non-constant (e.g. int, string) or is not an acceptable value for the Enum. Acceptable values for Enum `z`: Ú.)Úgb_typeÚcontextÚexplanationÚhints)rh   rB   r!   rd   r   r   Ú
USER_ERRORÚSUPPORTABLE)Úclsrÿ   r   r  r˜   s        r'   r(   ÚEnumVariable.createŒ  s¤   € ð ×&Ñ&×(Ñ(Ü˜xž.�Ø—<‘< 8×#>Ñ#>Ó#@Õ@Ù˜vÑ1¨Ñ1Ò1ñ )ô 	Ø7Ø˜h˜ZÐ'>¼tÀH»~Ð>NÐOð+à+3¨*°C¼¸X»Ð7GÀqðJð RÔ%×0Ñ0ÐQÔ3D×3PÑ3PÐQó	
r*   c                 ó‚   • [        U R                  [        5      (       a  [        U R                  5      $ U R                  $ r$   )r7   r!   rl   rY   s    r'   rZ   ÚEnumVariable.as_proxy�  s+   € Ü�d—j‘j¤#×&Ñ&Ü�t—z‘z“?Ð"Ø�z‰zÐr*   c                 ó4   • S[        U R                  5       S3$ )NzEnumVariable(r^   )rG   r!   rY   s    r'   ra   ÚEnumVariable.__repr__¢  s   € Øœt D§J¡JÓ/Ð0°Ð2Ð2r*   c                 ó   • U R                   $ r$   r&   rY   s    r'   rd   ÚEnumVariable.as_python_constant¥  r\   r*   rx   r   r�   c                 ó,  • [        U R                  U5      (       d  [        eU[        ;   a  [        R
                  " X5      $ [        U R                  U5      nU R                  =(       a    [        U R                  U5      n[        R                  " XUS9$ )Nr5   )r”   r!   r�   r   r   ÚGetAttrVariabler–   r/   r   r   Úbuild)rU   rx   r�   r˜   r/   s        r'   Úvar_getattrÚEnumVariable.var_getattr¨  so   € Ü�t—z‘z 4×(Ñ(Ü%Ð%ØÔ)Ó)Ü×,Ò,¨TÓ8Ð8Ü˜Ÿ™ TÓ*ˆØ—‘×>¤¨D¯K©K¸Ó!>ˆÜ×$Ò$ R¸Ñ?Ð?r*   Tc                 ó0   • [        U R                  U 5        grg   )r   r!   rY   s    r'   rç   ÚEnumVariable.is_python_hashable±  s   € Ü  §¡¨TÔ2Ør*   c                 ó4   • [        U R                  5       5      $ r$   )rê   rd   rY   s    r'   rë   ÚEnumVariable.get_python_hashµ  s   € Ü�D×+Ñ+Ó-Ó.Ð.r*   rá   c                 ór   • [        U[        5      =(       a!    U R                  5       UR                  5       :H  $ r$   )r7   r   rd   )rU   rá   s     r'   rï   ÚEnumVariable.is_python_equal¸  s1   € ä�uœoÓ.÷ HØ×'Ñ'Ó)¨U×-EÑ-EÓ-GÑGð	
r*   r&   )r_   r×   rñ   rò   ró   r	   ÚenumÚEnumÚIntEnumr   rP   Úclassmethodr   r(   rl   rZ   r«   ra   rd   r  r   rç   rë   rö   rm   rï   rø   rù   rú   s   @r'   rü   rü   �  sÿ   ø† ñð˜e D§I¡I¨t¯|©|Ð$;Ñ<ð Èð ÐPT÷ ð ð
Øð
Ø&5ð
Ø@Cð
à	ó
ó ð
ð ˜% §	¡	¨3 Ñ/ô ð
3˜#ô 3ð E¨$¯)©)°T·\±\Ð*AÑ$Bô ð@Ð5ð @¸Sð @À_ô @ð G¨D¡Mô ð/ ô /ð
 Vð 
°÷ 
ò 
r*   rü   )*ró   r  r¸   Úcollections.abcr   Útypingr   r   r   r   r   r	   Útyping_extensionsr
   r   r‡   Útorch._dynamo.sourcer   r   rØ   r   r   rÉ   r   r   Úutilsr   r   r   r   r   r   Úbaser   r   Útorch._dynamo.symbolic_convertr   Ú	functionsr   r   ÚCONSTANT_VARIABLE_NONErü   r%   r*   r'   Ú<module>r*     sl   ðñó Û Ý $ß I× Iß -ã ß :ç +ß 9÷÷ ÷ 4ö ÝDå/ôV
�ô V
ñr
 *¨$Ó/Ð ô;
�?õ ;
r*   