ó
    Eñi‰)  ã                  ó  • S SK Jr  S SKrS SKrS SKrS SKJrJr  SSKJ	r	  SSK
JrJr  \(       a  S SKJr  S S	KJr  SS
KJr   " S S5      r " S S\\S9r " S S\5      r " S S5      r    SS jrSS jr\" 5         g)é    )ÚannotationsN)ÚAnyÚTYPE_CHECKINGé   )Úis_function_or_wrapperé   )ÚVariableTrackerÚVariableTrackerMeta)ÚCallable)ÚSelf)ÚSymNodeVariablec                  ó,   • \ rS rSrSrSS jrSS jrSrg)	Ú	LazyCacheé   z+Container to cache the real VariableTrackerc                ót   • [        U[        5      (       d	  U(       d   eXl        X l        S U l        S U l        g ©N)Ú
isinstanceÚLazySymNodeFormatStringÚvalueÚsourceÚ	name_hintÚvt)Úselfr   r   s      ÚY/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_dynamo/variables/lazy.pyÚ__init__ÚLazyCache.__init__   s/   € Ü˜%Ô!8×9Ñ9ÞˆM�6ØŒ
ØŒØ%)ˆŒØ*.ˆ�ó    c                ó¼  • U R                   b   eSSKJn  SSKJn  UR                  5       n[        U R                  [        5      (       a+  UR                  R                  X0R                  5      U l         O/UR                  X0R                  SS9" U R                  5      U l         U R                  b%  U R                   R                  U R                  5        U ?U ?U ?g )Nr   ©ÚInstructionTranslatorr   )ÚbuilderF©Úallow_lazy_constant)r   Úsymbolic_convertr    Ú r!   Ú
current_txr   r   r   ÚSourcelessBuilderÚcreateÚVariableBuilderr   r   Úset_name_hint)r   r    r!   Útxs       r   ÚrealizeÚLazyCache.realize   s±   € Ø�w‰w‰ÐˆÝ<Ýà"×-Ñ-Ó/ˆä�d—j‘jÔ"9×:Ñ:Ø×/Ñ/×6Ñ6°r¿:¹:ÓFˆD�Gð
 ×-Ñ-Ø—K‘K°Uð .ñ à�j‰jóˆDŒGð �>‰>Ñ%Ø�G‰G×!Ñ! $§.¡.Ô1àˆJØˆKØ‰Nr   )r   r   r   r   N)r   r   r   r   ÚreturnÚNone©r.   r/   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r,   Ú__static_attributes__© r   r   r   r      s   † Ù5ô/÷r   r   c                  ó4  ^ • \ rS rSrSrSrS1\R                  kr\SS j5       r	SU 4S jjr
SS jrSS jrSS	 jrSS
 jrSS jrSS jrS S jrS!S jrS"S jrS#S jr\R*                  r\r\ S$SS.       S%S jjj5       rSS jrS S jrS S jrSrU =r$ )&ÚLazyVariableTrackeré7   aá  
A structure that defers the creation of the actual VariableTracker
for a given underlying value until it is accessed.

The `realize` function invokes VariableTracker.build() to produce the real object.
Once a LazyVariableTracker has been realized, internal bookkeeping will
prevent double realization.

This object should be utilized for processing containers, or objects that
reference other objects where we may not want to take on creating all the
VariableTrackers right away.
TÚ_cachec                óh  • [        U 5      [        R                  ;   a  [        R                  " X40 UD6$ Ube  U(       d^  SSKJn  UR                  5       nUbE  UR                  R                  nUR                  U5      nUb  U$ [        [        X5      US9nXuU'   U$ [        [        X5      4SU0UD6$ )Nr   r   )r   r   )ÚtypeÚLazyConstantVariableÚsupported_typesr(   r$   r    r&   ÚoutputÚvariable_tracker_cacheÚgetr9   r   )r   r   Úoptionsr    r+   ÚcacheÚcachedr   s           r   r(   ÚLazyVariableTracker.createI   sª   € ä�‹;Ô.×>Ñ>Ó>Ü'×.Ò.¨uÑHÀÑHÐHð Ñ¦gÝ@à&×1Ñ1Ó3ˆBØ‰~ØŸ	™	×8Ñ8�ØŸ™ 6Ó*�ØÑ%Ø!�MÜ(¬°5Ó)AÈ&ÑQ�Ø "�f‘Ø�	ä"¤9¨UÓ#;ÑVÀFÐVÈgÑVÐVr   c                ó`   >• [        U[        5      (       d   e[        TU ]  " S0 UD6  Xl        g )Nr7   )r   r   Úsuperr   r;   )r   r;   ÚkwargsÚ	__class__s      €r   r   ÚLazyVariableTracker.__init__^   s+   ø€ Ü˜&¤)×,Ñ,Ð,Ð,Ü‰ÒÑ"˜6Ò"Ø�r   c                óÂ   • U R                   R                  c3  U R                   R                  5         U R                   R                  c   eU R                   R                  $ )z.Force construction of the real VariableTracker)r;   r   r,   ©r   s    r   r,   ÚLazyVariableTracker.realizec   sB   € à�;‰;�>‰>Ñ!Ø�K‰K×ÑÔ!Ø—;‘;—>‘>Ñ-Ð-Ð-Ø�{‰{�~‰~Ðr   c                óH   • [         R                  XR                  5       5      $ )zNCheck isinstance after realizing, used by ImplicitRealizingVariableTrackerMeta)r=   Ú__instancecheck__r,   )r   Úclss     r   Úlazy_isinstanceÚ#LazyVariableTracker.lazy_isinstancej   s   € ä×%Ñ% c¯<©<«>Ó:Ð:r   c                óŽ   • U R                  5       (       a/  U R                  R                  c   eU R                  R                  $ U $ )z4Return the real VariableTracker if it already exists)Úis_realizedr;   r   rM   s    r   ÚunwrapÚLazyVariableTracker.unwrapn   s8   € à×Ñ×ÑØ—;‘;—>‘>Ñ-Ð-Ð-Ø—;‘;—>‘>Ð!Øˆr   c                ó2   • U R                   R                  S L$ r   )r;   r   rM   s    r   rU   ÚLazyVariableTracker.is_realizedu   s   € Ø�{‰{�~‰~ TÐ)Ð)r   c                ó  • UR                  SU R                  5      U R                  L d   eUR                  SU R                  5      U R                  La  U R                  5         [        R
                  " U R                  5       40 UD6$ )Nr;   r   )rB   r;   r   r,   r	   ÚclonerV   )r   rI   s     r   r[   ÚLazyVariableTracker.clonex   sc   € Ø�z‰z˜( D§K¡KÓ0°D·K±KÒ?Ð?Ð?Ø�:‰:�h §¡Ó,°D·K±KÒ?Ø�L‰LŒNÜ×$Ò$ T§[¡[£]Ñ=°fÑ=Ð=r   c                ón   • U R                  5       (       a   e[        U R                  R                  5      $ r   )rU   r=   r;   r   rM   s    r   Ú	peek_typeÚLazyVariableTracker.peek_type~   s,   € Ø×#Ñ#×%Ñ%Ð%Ð%Ü�D—K‘K×%Ñ%Ó&Ð&r   c                ó\   • U R                  5       (       a   eU R                  R                  $ r   ©rU   r;   r   rM   s    r   Ú
peek_valueÚLazyVariableTracker.peek_value‚   s'   € Ø×#Ñ#×%Ñ%Ð%Ð%Ø�{‰{× Ñ Ð r   c                óš   • U R                  5       (       a&  U R                  R                  R                  U5        g XR                  l        g r   )rU   r;   r   r*   r   )r   Únames     r   r*   Ú!LazyVariableTracker.set_name_hint†   s1   € Ø×Ñ×ÑØ�K‰K�N‰N×(Ñ(¨Õ.à$(�K‰KÕ!r   c                ó¦   • SnU R                  5       (       a"  US[        U R                  5       5       S3-  nU$ USU R                  5        S3-  nU$ )NzLazyVariableTracker(z
realized: Ú)zunrealized: )rU   ÚreprrV   r^   )r   Úvariable_infos     r   Ú__str__ÚLazyVariableTracker.__str__Œ   s`   € Ø.ˆØ×Ñ×ÑØ˜z¬$¨t¯{©{«}Ó*=Ð)>¸aÐ@Ñ@ˆMð Ðð ˜|¨D¯N©NÓ,<Ð+=¸QÐ?Ñ?ˆMàÐr   c                ó6   • [        U R                  5       U5      $ r   ©Úgetattrr,   )r   Úitems     r   Ú__getattr__ÚLazyVariableTracker.__getattr__•   s   € Ü�t—|‘|“~ tÓ,Ð,r   Fr"   c               ó6  ^ ^^• Tc  0 m[        U5      nUT;   a  TU   S   $ [        U5      n[        U[        5      (       aE  T=(       a    [	        U[
        5      nU(       a  UnGO"T R                  UR                  5       TTS9nGO[        U[        5      (       aF  UnXq4TU'   UR                  nUR                  n	U H  n
X©;  d  M
  T R                  XŠ   TTS9XŠ'   M!     O¦U[        L a"  U Vs/ s H  nT R                  UTTS9PM     nnO{U[        L a  [        UUU 4S jU 5       5      nOZU[        [        R                  4;   a>  [        UR!                  5       5       VVs0 s H  u  pËUT R                  UTTS9_M     nnnOUnXq4TU'   U$ s  snf s  snnf )z@
Walk an object and realize all LazyVariableTrackers inside it.
r   r"   c              3  óF   >#   • U  H  nTR                  UTTS 9v •  M     g7f)r"   N)Úrealize_all)Ú.0Úvr#   rD   rQ   s     €€€r   Ú	<genexpr>Ú2LazyVariableTracker.realize_all.<locals>.<genexpr>Ê   s(   øé € ð â�Að —‘  5Ð>Q�ÕRÚùs   ƒ!)Úidr=   Ú
issubclassr9   r   r>   ru   r,   r	   Ú__dict__Ú_nonvar_fieldsÚlistÚtupleÚdictÚcollectionsÚOrderedDictÚitems)rQ   r   rD   r#   ÚidxÚ	value_clsÚ	keep_lazyÚresultÚ
value_dictÚnonvarsÚkeyrw   Úks   ` ``         r   ru   ÚLazyVariableTracker.realize_allœ   s¾  ú€ ð ‰=ØˆEä�‹iˆØ�%‹<Ø˜‘:˜a‘=Ð ä˜“Kˆ	Ü�iÔ!4×5Ñ5à+×W´
¸5ÔBVÓ0WˆIÞØ’àŸ™Ø—M‘M“O UÐ@Sð )ð ’ô ˜	¤?×3Ñ3àˆFà ˜ˆE�#‰JØŸ™ˆJØ×*Ñ*ˆGÛ!�ØÕ%Ø&)§o¡oØ"™¨ÐDWð '6ð '�J“Oò "ð
 œ$Òñ óâ�Að —‘  5Ð>Q�ÓRÙð ð ˆFð œ%ÒÜö áóó ‰Fð œ4¤×!8Ñ!8Ð9Ó9ô ! §¡£Ô/ôâ/‘D�Að �3—?‘? 1 eÐAT�?ÐUÒUÙ/ð ñ ˆFð
 ˆFð �_ˆˆc‰
Øˆùò'ùós   Ã/FÅ$Fc                óÌ   ^• SS jmU R                  5       (       a   eU R                  R                  n[        U[        5      (       a  [        U4S jU 5       5      $ T" U5      $ )Nc                ó’   • [         R                  " U 5      =(       d+    [        [        U 5      [        5      =(       d    [	        U 5      $ r   )ÚinspectÚ	isbuiltinr{   r=   r   )r   s    r   Ú_helperÚ0LazyVariableTracker.is_hashable.<locals>._helperÞ   s7   € ô ×!Ò! %Ó(÷ 1Üœd 5›k¬4Ó0÷1ä)¨%Ó0ðr   c              3  ó4   >#   • U  H  nT" U5      v •  M     g 7fr   r7   )rv   rw   r‘   s     €r   rx   Ú2LazyVariableTracker.is_hashable.<locals>.<genexpr>é   s   øé € Ð1ª5 a‘w˜q—z�zª5ùs   ƒ)r   r   r.   Úbool)rU   r;   r   r   r   Úall)r   r   r‘   s     @r   Úis_hashableÚLazyVariableTracker.is_hashableÚ   sV   ø€ ô	ð ×#Ñ#×%Ñ%Ð%Ð%Ø—‘×!Ñ!ˆÜ�eœU×#Ñ#ÜÔ1©5Ó1Ó1Ð1Ù�u‹~Ðr   c                ó\   • U R                  5       (       a   eU R                  R                  $ r   ra   rM   s    r   Úoriginal_valueÚ"LazyVariableTracker.original_valueì   s'   € à×#Ñ#×%Ñ%Ð%Ð%Ø�{‰{× Ñ Ð r   c                ó\   • U R                  5       (       a   eU R                  R                  $ r   )rU   r;   r   rM   s    r   Úoriginal_sourceÚ#LazyVariableTracker.original_sourceñ   s'   € à×#Ñ#×%Ñ%Ð%Ð%Ø�{‰{×!Ñ!Ð!r   )r;   )r   r   r   r   rC   r   r.   r	   )r;   r   rI   r   r.   r/   )r.   r	   )rQ   r=   r.   r•   )r.   zVariableTracker | Self)r.   r•   )rI   r   r.   r	   )r.   z	type[Any])r.   r   )re   Ústrr.   r/   ©r.   rŸ   )rp   rŸ   r.   r   r   )r   r   rD   z!dict[int, tuple[Any, Any]] | Noner#   r•   r.   r   )r1   r2   r3   r4   r5   Ú_no_implicit_realizer	   r}   Ústaticmethodr(   r   r,   rR   rV   rU   r[   r^   rb   r*   rk   rq   ÚvisitÚ__repr__Úclassmethodru   r—   rš   r�   r6   Ú__classcell__)rJ   s   @r   r9   r9   7   sÜ   ø† ñð  ÐØÐ@ ×!?Ñ!?Ð@€NàóWó ðW÷(ô
ô;ôô*ô>ô'ô!ô)ôô-ð ×!Ñ!€EØ€Hàð 48ð;ð
 %*ñ;àð;ð 1ð;ð
 "ð;ð 
õ;ó ð;ôzô$!÷
"ò "r   r9   )Ú	metaclassc                  óH   • \ rS rSrSr\\\\4r	\
        SS j5       rSrg)r>   é÷   a=  
A lazy variable tracker for constants (int, float, bool, str) that defers
guarding until the value is actually used in a way that requires it.

This allows constants that are just passed through (e.g., returned without
being used in control flow or math) to avoid unnecessary recompilation when
their values change.
c                ón   • [        U 5      [        R                  ;   d   e[        [        X5      4SU0UD6$ )Nr   )r=   r>   r?   r   )r   r   rC   s      r   r(   ÚLazyConstantVariable.create  s7   € ô �E‹{Ô2×BÑBÓBÐBÐBÜ#¤I¨eÓ$<ÑWÀVÐWÈwÑWÐWr   r7   N)r   r   r   r   rC   r   r.   r>   )r1   r2   r3   r4   r5   ÚintÚfloatr•   rŸ   r?   r¢   r(   r6   r7   r   r   r>   r>   ÷   sS   † ñð ˜E 4¨Ð-€OàðXØðXàðXð ðXð 
ó	Xó óXr   r>   c                  ó4   • \ rS rSr      SS jrSS jrSrg)r   i  c                óp   • SSK Jn  Xl        UR                  SUR	                  5       -   S-   5      U l        g )Nr   )ÚConstantVariablez{:Ú})Úconstantr°   Úsym_node_varr(   Úas_python_constantÚfmt_var)r   Úsym_node_variableÚfmt_spec_varr°   s       r   r   Ú LazySymNodeFormatString.__init__  s5   € õ 	/à-ÔØ'×.Ñ.Ø�<×2Ñ2Ó4Ñ4°sÑ:ó
ˆ�r   c                ó    • [         R                  U R                  R                  5       [        U R                  R                  5       5      5      $ r   )rŸ   Úformatrµ   r´   r³   Úevaluate_exprrM   s    r   r¤   Ú LazySymNodeFormatString.__repr__  s:   € Ü�z‰zØ�L‰L×+Ñ+Ó-Ü�×!Ñ!×/Ñ/Ó1Ó2ó
ð 	
r   )rµ   r³   N)r¶   r   r·   r	   r.   r/   r    )r1   r2   r3   r4   r   r¤   r6   r7   r   r   r   r     s$   † ð
Ø!0ð
Ø@Oð
à	ô
÷
r   r   c                óv   ^ • [         R                  " [        [        T 5      5              SU 4S jj5       nU$ )Nc                óD   >• [        U R                  5       T5      " U0 UD6$ r   rn   )r   ÚargsrI   re   s      €r   Úrealize_and_forwardÚ8_create_realize_and_forward.<locals>.realize_and_forward"  s"   ø€ ô �t—|‘|“~ tÔ,¨dÐ=°fÑ=Ð=r   )r   r9   r¿   r   rI   r   r.   r   )Ú	functoolsÚwrapsro   r	   )re   rÀ   s   ` r   Ú_create_realize_and_forwardrÄ     sO   ø€ ô ‡_‚_”Wœ_¨dÓ3Ó4ð>Ø!ð>Ø*-ð>Ø9<ð>à	ö>ó 5ð>ð
 Ðr   c                 óÖ   • [         R                  R                  5        HG  u  pU [        R                  ;  d  M  [	        U5      (       d  M-  [        [        U [        U 5      5        MI     g r   )r	   r|   rƒ   r9   ÚcallableÚsetattrrÄ   )re   r   s     r   Ú	_populaterÈ   +  sH   € Ü&×/Ñ/×5Ñ5Ö7‰ˆØÔ*×3Ñ3Õ3Ü˜�‹ÜÔ+¨TÔ3NÈtÓ3TÖUò 8r   )re   rŸ   r.   z.Callable[[LazyVariableTracker, Any, Any], Any]r0   )Ú
__future__r   r�   rÂ   r�   Útypingr   r   Úutilsr   Úbaser	   r
   Úcollections.abcr   Útyping_extensionsr   Útensorr   r   r9   r>   r   rÄ   rÈ   r7   r   r   Ú<module>rÐ      s€   ðÝ "ã Û Û ß %å *ß 6ö Ý(Ý&å'÷!ñ !ôH}"˜/Ð5Hò }"ô@XÐ.ô X÷,
ñ 
ð$	Ø
ð	à3ô	ôVñ 
…r   