Ë
    L²jh)  ã                  óú   — d dl m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	 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«      Z G d„ dee¬«      Z G d„ de«      Z G d„ d«      Z	 	 	 	 dd„Zdd„Z e«        y)é    )ÚannotationsN)ÚAnyÚTYPE_CHECKINGé   )Úis_function_or_wrapperé   )ÚVariableTrackerÚVariableTrackerMeta)ÚCallable)ÚSelf)ÚSymNodeVariablec                  ó    — e Zd ZdZdd„Zdd„Zy)Ú	LazyCachez+Container to cache the real VariableTrackerc                ód   — t        |t        «      s|sJ ‚|| _        || _        d | _        d | _        y ©N)Ú
isinstanceÚLazySymNodeFormatStringÚvalueÚsourceÚ	name_hintÚvt)Úselfr   r   s      ú[/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/_dynamo/variables/lazy.pyÚ__init__zLazyCache.__init__   s0   € Ü˜%Ô!8Ô9ÙˆM�6ØˆŒ
ØˆŒØ%)ˆŒØ*.ˆ�ó    c                ó¸  — | j                   �J ‚ddlm} ddlm} |j                  «       }t        | j                  t        «      r,|j                  j                  || j                  «      | _         n3 |j                  || j                  d¬«      | j                  «      | _         | j                  �%| j                   j                  | j                  «       | `| `| `y )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   ÚrealizezLazyCache.realize   s´   € Ø�w‰wˆÐˆÝ<Ýà"×-Ñ-Ó/ˆä�d—j‘jÔ"9Ô:Ø×/Ñ/×6Ñ6°r¸4¿:¹:ÓFˆD�Gð
�g×-Ñ-Ø�D—K‘K°Uð .ó à�j‰jóˆDŒGð �>‰>Ð%Ø�G‰G×!Ñ! $§.¡.Ô1àˆJØˆKØ‰Nr   N)r   r   r   r   ÚreturnÚNone©r+   r,   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r*   © r   r   r   r      s   „ Ù5ó/ôr   r   c                  ó  ‡ — e Zd ZdZdZdhej                  £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dd„Zd d„Zd!d„Zej(                  ZeZe	 d"ddœ	 	 	 	 	 	 	 d#d„«       Zdd„Zdd„Zdd„Zˆ xZS )$ÚLazyVariableTrackera  
    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                ó`  — t        | «      t        j                  v rt        j                  | |fi |¤ŽS |�c|saddlm} |j                  «       }|�I|j                  j                  }|j                  |«      }|�|S t        t        | |«      |¬«      }|||<   |S t        t        | |«      fd|i|¤ŽS )Nr   r   )r   r   )ÚtypeÚLazyConstantVariableÚsupported_typesr&   r"   r   r$   ÚoutputÚvariable_tracker_cacheÚgetr4   r   )r   r   Úoptionsr   r)   ÚcacheÚcachedr   s           r   r&   zLazyVariableTracker.createI   s²   € ä�‹;Ô.×>Ñ>Ñ>Ü'×.Ñ.¨u°fÑHÀÑHÐHð Ð¡gÝ@à&×1Ñ1Ó3ˆBØˆ~ØŸ	™	×8Ñ8�ØŸ™ 6Ó*�ØÐ%Ø!�MÜ(¬°5¸&Ó)AÈ&ÔQ�Ø "��f‘Ø�	ä"¤9¨U°FÓ#;ÑVÀFÐVÈgÑVÐVr   c                óV   •— t        |t        «      sJ ‚t        ‰| �  di |¤Ž || _        y )Nr2   )r   r   Úsuperr   r5   )r   r5   ÚkwargsÚ	__class__s      €r   r   zLazyVariableTracker.__init__^   s*   ø€ Ü˜&¤)Ô,Ð,Ð,Ü‰ÑÑ"˜6Ò"Øˆ�r   c                ó¾   — | j                   j                  €2| j                   j                  «        | j                   j                  €J ‚| j                   j                  S )z.Force construction of the real VariableTracker)r5   r   r*   ©r   s    r   r*   zLazyVariableTracker.realizec   sB   € à�;‰;�>‰>Ð!Ø�K‰K×ÑÔ!Ø—;‘;—>‘>Ð-Ð-Ð-Ø�{‰{�~‰~Ðr   c                óJ   — t         j                  || j                  «       «      S )zNCheck isinstance after realizing, used by ImplicitRealizingVariableTrackerMeta)r7   Ú__instancecheck__r*   )r   Úclss     r   Úlazy_isinstancez#LazyVariableTracker.lazy_isinstancej   s   € ä×%Ñ% c¨4¯<©<«>Ó:Ð:r   c                ó‚   — | j                  «       r.| j                  j                  €J ‚| j                  j                  S | S )z4Return the real VariableTracker if it already exists)Úis_realizedr5   r   rE   s    r   ÚunwrapzLazyVariableTracker.unwrapn   s5   € à×ÑÔØ—;‘;—>‘>Ð-Ð-Ð-Ø—;‘;—>‘>Ð!Øˆr   c                ó2   — | j                   j                  d uS r   )r5   r   rE   s    r   rK   zLazyVariableTracker.is_realizedu   s   € Ø�{‰{�~‰~ TÐ)Ð)r   c                ó  — |j                  d| j                  «      | j                  u sJ ‚|j                  d| j                  «      | j                  ur| j                  «        t	        j
                  | j                  «       fi |¤ŽS )Nr5   r   )r<   r5   r   r*   r	   ÚclonerL   )r   rB   s     r   rO   zLazyVariableTracker.clonex   sc   € Ø�z‰z˜( D§K¡KÓ0°D·K±KÑ?Ð?Ð?Ø�:‰:�h §¡Ó,°D·K±KÑ?Ø�L‰LŒNÜ×$Ñ$ T§[¡[£]Ñ=°fÑ=Ð=r   c                ód   — | j                  «       rJ ‚t        | j                  j                  «      S r   )rK   r7   r5   r   rE   s    r   Ú	peek_typezLazyVariableTracker.peek_type~   s)   € Ø×#Ñ#Ô%Ð%Ð%Ü�D—K‘K×%Ñ%Ó&Ð&r   c                óR   — | j                  «       rJ ‚| j                  j                  S r   ©rK   r5   r   rE   s    r   Ú
peek_valuezLazyVariableTracker.peek_value‚   s$   € Ø×#Ñ#Ô%Ð%Ð%Ø�{‰{× Ñ Ð r   c                ó’   — | j                  «       r&| j                  j                  j                  |«       y || j                  _        y r   )rK   r5   r   r(   r   )r   Únames     r   r(   z!LazyVariableTracker.set_name_hint†   s0   € Ø×ÑÔØ�K‰K�N‰N×(Ñ(¨Õ.à$(ˆD�K‰KÕ!r   c                óœ   — d}| j                  «       r"|dt        | j                  «       «      › d�z  }|S |d| j                  «       › d�z  }|S )NzLazyVariableTracker(z
realized: ú)zunrealized: )rK   ÚreprrL   rQ   )r   Úvariable_infos     r   Ú__str__zLazyVariableTracker.__str__Œ   s]   € Ø.ˆØ×ÑÔØ˜z¬$¨t¯{©{«}Ó*=Ð)>¸aÐ@Ñ@ˆMð Ðð ˜|¨D¯N©NÓ,<Ð+=¸QÐ?Ñ?ˆMàÐr   c                ó6   — t        | j                  «       |«      S r   ©Úgetattrr*   )r   Úitems     r   Ú__getattr__zLazyVariableTracker.__getattr__•   s   € Ü�t—|‘|“~ tÓ,Ð,r   Fr    c          
     ó
  ‡ ‡‡— ‰€i Št        |«      }|‰v r‰|   d   S t        |«      }t        |t        «      r=‰xr t	        |t
        «      }|r|}�n‰ j                  |j                  «       ‰‰¬«      }nút        |t        «      rH|}||f‰|<   |j                  }|j                  }	|D ]!  }
|
|	vsŒ‰ j                  ||
   ‰‰¬«      ||
<   Œ# n¢|t        u r"|D �cg c]  }‰ j                  |‰‰¬«      ‘Œ }}nx|t        u rt        ˆˆˆ fd„|D «       «      }nY|t        t        j                  fv r?t        |j!                  «       «      D ��ci c]  \  }}|‰ j                  |‰‰¬«      “Œ }}}n|}||f‰|<   |S c c}w c c}}w )zP
        Walk an object and realize all LazyVariableTrackers inside it.
        r   r    c              3  óF   •K  — | ]  }‰j                  |‰‰¬ «      –— Œ y­w)r    N)Úrealize_all)Ú.0Úvr!   r>   rH   s     €€€r   ú	<genexpr>z2LazyVariableTracker.realize_all.<locals>.<genexpr>Ê   s)   øè ø€ ò àð —‘  5Ð>Q�×Rñùs   ƒ!)Úidr7   Ú
issubclassr4   r   r8   rc   r*   r	   Ú__dict__Ú_nonvar_fieldsÚlistÚtupleÚdictÚcollectionsÚOrderedDictÚitems)rH   r   r>   r!   ÚidxÚ	value_clsÚ	keep_lazyÚresultÚ
value_dictÚnonvarsÚkeyre   Úks   ` ``         r   rc   zLazyVariableTracker.realize_allœ   s¿  ú€ ð ˆ=ØˆEä�‹iˆØ�%‰<Ø˜‘:˜a‘=Ð ä˜“Kˆ	Ü�iÔ!4Ô5à+ÒW´
¸5ÔBVÓ0WˆIÙØ’àŸ™Ø—M‘M“O UÐ@Sð )ó ‘ô ˜	¤?Ô3àˆFà  %˜ˆE�#‰JØŸ™ˆJØ×*Ñ*ˆGØ!ò �Ø˜gÒ%Ø&)§o¡oØ" 3™¨ÐDWð '6ó '�J˜s’Oñð
 œ$Ñð öàð —‘  5Ð>Q�ÕRðˆFñ ð œ%ÑÜõ àôó ‰Fð œ4¤×!8Ñ!8Ð9Ñ9ô ! §¡£Ó/÷á�A�qð �3—?‘? 1 eÐAT�?ÓUÑUðˆFò ð
 ˆFð ˜e�_ˆˆc‰
Øˆùò'ùós   ÃE:ÅE?c                ó´   ‡— dd„Š| j                  «       rJ ‚| j                  j                  }t        |t        «      rt        ˆfd„|D «       «      S  ‰|«      S )Nc                ó|   — t        j                  | «      xs& t        t        | «      t        «      xs t	        | «      S r   )ÚinspectÚ	isbuiltinrh   r7   r   )r   s    r   Ú_helperz0LazyVariableTracker.is_hashable.<locals>._helperÞ   s7   € ô ×!Ñ! %Ó(ò 1Üœd 5›k¬4Ó0ò1ä)¨%Ó0ðr   c              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wr   r2   )rd   re   r}   s     €r   rf   z2LazyVariableTracker.is_hashable.<locals>.<genexpr>é   s   øè ø€ Ò1 a‘w˜q—zÑ1ùs   ƒ)r   r   r+   Úbool)rK   r5   r   r   rl   Úall)r   r   r}   s     @r   Úis_hashablezLazyVariableTracker.is_hashableÚ   sP   ø€ ó	ð ×#Ñ#Ô%Ð%Ð%Ø—‘×!Ñ!ˆÜ�eœUÔ#ÜÓ1¨5Ô1Ó1Ð1Ù�u‹~Ðr   c                óR   — | j                  «       rJ ‚| j                  j                  S r   rS   rE   s    r   Úoriginal_valuez"LazyVariableTracker.original_valueì   s$   € à×#Ñ#Ô%Ð%Ð%Ø�{‰{× Ñ Ð r   c                óR   — | j                  «       rJ ‚| j                  j                  S r   )rK   r5   r   rE   s    r   Úoriginal_sourcez#LazyVariableTracker.original_sourceñ   s$   € à×#Ñ#Ô%Ð%Ð%Ø�{‰{×!Ñ!Ð!r   )r   r   r   r   r=   r   r+   r	   )r5   r   rB   r   r+   r,   )r+   r	   )rH   r7   r+   r   )r+   zVariableTracker | Self)r+   r   )rB   r   r+   r	   )r+   z	type[Any])r+   r   )rV   Ústrr+   r,   ©r+   r†   )r_   r†   r+   r   r   )r   r   r>   z!dict[int, tuple[Any, Any]] | Noner!   r   r+   r   )r.   r/   r0   r1   Ú_no_implicit_realizer	   rj   Ústaticmethodr&   r   r*   rI   rL   rK   rO   rQ   rT   r(   r[   r`   ÚvisitÚ__repr__Úclassmethodrc   r�   rƒ   r…   Ú__classcell__)rC   s   @r   r4   r4   7   s×   ø„ ñð  ÐØÐ@ ×!?Ñ!?Ð@€NàòWó ðWõ(ó
ó;óó*ó>ó'ó!ó)óó-ð ×!Ñ!€EØ€Hàð 48ð;ð
 %*ñ;àð;ð 1ð;ð
 "ð;ð 
ò;ó ð;ózó$!÷
"r   r4   )Ú	metaclassc                  ó>   — e Zd ZdZeeeefZe		 	 	 	 	 	 	 	 dd„«       Z
y)r8   aU  
    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                ól   — t        | «      t        j                  v sJ ‚t        t        | |«      fd|i|¤ŽS )Nr   )r7   r8   r9   r   )r   r   r=   s      r   r&   zLazyConstantVariable.create  s9   € ô �E‹{Ô2×BÑBÑBÐBÐBÜ#¤I¨e°VÓ$<ÑWÀVÐWÈwÑWÐWr   N)r   r   r   r   r=   r   r+   r8   )r.   r/   r0   r1   ÚintÚfloatr   r†   r9   r‰   r&   r2   r   r   r8   r8   ÷   sS   „ ñð ˜E 4¨Ð-€OàðXØðXàðXð ðXð 
ò	Xó ñXr   r8   c                  ó(   — e Zd Z	 	 	 	 	 	 dd„Zdd„Zy)r   c                ór   — ddl m} || _        |j                  d|j	                  «       z   dz   «      | _        y )Nr   )ÚConstantVariablez{:ú})Úconstantr•   Úsym_node_varr&   Úas_python_constantÚfmt_var)r   Úsym_node_variableÚfmt_spec_varr•   s       r   r   z LazySymNodeFormatString.__init__  s7   € õ 	/à-ˆÔØ'×.Ñ.Ø�<×2Ñ2Ó4Ñ4°sÑ:ó
ˆ�r   c                ó    — t         j                  | j                  j                  «       t        | j                  j                  «       «      «      S r   )r†   Úformatrš   r™   r˜   Úevaluate_exprrE   s    r   r‹   z LazySymNodeFormatString.__repr__  s:   € Ü�z‰zØ�L‰L×+Ñ+Ó-Ü�×!Ñ!×/Ñ/Ó1Ó2ó
ð 	
r   N)r›   r   rœ   r	   r+   r,   r‡   )r.   r/   r0   r   r‹   r2   r   r   r   r     s$   „ ð
Ø!0ð
Ø@Oð
à	ó
ô
r   r   c                óp   ‡ — t        j                  t        t        ‰ «      «      	 	 	 	 	 	 	 	 dˆ fd„«       }|S )Nc                óD   •—  t        | j                  «       ‰«      |i |¤ŽS r   r]   )r   ÚargsrB   rV   s      €r   Úrealize_and_forwardz8_create_realize_and_forward.<locals>.realize_and_forward"  s$   ø€ ð -Œw�t—|‘|“~ tÓ,¨dÐ=°fÑ=Ð=r   )r   r4   r¢   r   rB   r   r+   r   )Ú	functoolsÚwrapsr^   r	   )rV   r£   s   ` r   Ú_create_realize_and_forwardr¦     sO   ø€ ô ‡_�_”Wœ_¨dÓ3Ó4ð>Ø!ð>Ø*-ð>Ø9<ð>à	ô>ó 5ð>ð
 Ðr   c                 óÂ   — t         j                  j                  «       D ]>  \  } }| t        j                  vsŒt	        |«      sŒ%t        t        | t        | «      «       Œ@ y r   )r	   ri   rp   r4   ÚcallableÚsetattrr¦   )rV   r   s     r   Ú	_populaterª   +  sO   € Ü&×/Ñ/×5Ñ5Ó7ò V‰ˆˆeØÔ*×3Ñ3Ò3Ü˜�ÜÔ+¨TÔ3NÈtÓ3TÕUñVr   )rV   r†   r+   z.Callable[[LazyVariableTracker, Any, Any], Any]r-   )Ú
__future__r   rn   r¤   r{   Útypingr   r   Úutilsr   Úbaser	   r
   Úcollections.abcr   Útyping_extensionsr   Útensorr   r   r4   r8   r   r¦   rª   r2   r   r   ú<module>r²      s€   ðÝ "ã Û Û ß %å *ß 6ñ Ý(Ý&å'÷!ñ !ôH}"˜/Ð5Hõ }"ô@XÐ.ô X÷,
ñ 
ð$	Ø
ð	à3ó	óVñ 
…r   