§
    ŠŠtj�L  ã                  ó.  — 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 ddlmZmZmZ erd d	lmZ 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¦   «          dS )é    )ÚannotationsN)ÚAnyÚTYPE_CHECKINGé   )Úconfig)Úis_function_or_wrapperé   )ÚSourceLocationÚVariableTrackerÚVariableTrackerMeta)ÚCallable)ÚSelf)ÚInstructionTranslatorBase©ÚSymNodeVariablec                  ó"   — e Zd ZdZd
d„Zdd„Zd	S )Ú	LazyCachez+Container to cache the real VariableTrackerÚvaluer   ÚsourceÚreturnÚNonec                ó˜   — t          |t          ¦  «        s|st          d¦  «        ‚|| _        || _        d | _        d | _        d | _        d S )Nz9source is required for non-LazySymNodeFormatString values)Ú
isinstanceÚLazySymNodeFormatStringÚAssertionErrorr   r   Ú	name_hintÚsource_locationÚvt)Úselfr   r   s      úZ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_dynamo/variables/lazy.pyÚ__init__zLazyCache.__init__   s\   € Ý˜%Õ!8Ñ9Ô9ð 	Øð Ý$ØOñô ð ð ˆŒ
ØˆŒØ%)ˆŒØ6:ˆÔØ*.ˆŒˆˆó    c                ó  — | j         �t          d¦  «        ‚ddlm} ddlm} |                     ¦   «         }t          | j        t          ¦  «        r&|j
                             || j        ¦  «        | _         n0 |                     || j        d¬¦  «        | j        ¦  «        | _         | j        �| j                              | j        ¦  «         | j        �+| j         j        €| j                              | j        ¦  «         | `| `| `| `d S )Nz0LazyCache.realize() called but vt is already setr   )ÚInstructionTranslatorr	   )ÚbuilderF©Úallow_lazy_constant)r   r   Úsymbolic_convertr$   Ú r%   Ú
current_txr   r   r   ÚSourcelessBuilderÚcreateÚVariableBuilderr   r   Úset_name_hintr   Úset_source_location)r   r$   r%   Útxs       r    ÚrealizezLazyCache.realize$   s"  € ØŒ7ÐÝ Ð!SÑTÔTÐTØ<Ð<Ð<Ð<Ð<Ð<ØÐÐÐÐÐà"×-Ò-Ñ/Ô/ˆå�d”jÕ"9Ñ:Ô:ð 	ØÔ/×6Ò6°r¸4¼:ÑFÔFˆDŒGˆGð
�g×-Ò-Ø�D”K°Uð .ñ ô àŒjñô ˆDŒGð Œ>Ð%ØŒG×!Ò! $¤.Ñ1Ô1Ð1àÔÐ+°´Ô0GÐ0OØŒG×'Ò'¨Ô(<Ñ=Ô=Ð=àˆJØˆKØˆNØÐ Ð Ð r"   N)r   r   r   r   r   r   ©r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r1   © r"   r    r   r      sB   € € € € € Ø5Ð5ð
/ð 
/ð 
/ð 
/ð!ð !ð !ð !ð !ð !r"   r   c                  ó  ‡ — e Zd ZdZdZdhej        £Zeddœd2d„¦   «         Zd3ˆ fd„Z	d4d„Z
d5d„Zd6d„Zd7d„Zd8d„Zd9d„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*œdAd.„¦   «         Zd7d/„Zd:d0„Zd:d1„Zˆ xZS )BÚ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Ú_cacheN)r0   r   r   r   r0   ú InstructionTranslatorBase | NoneÚoptionsr   r   c               ó:  — t          | ¦  «        t          j        v rt          j        | |fi |¤ŽS |�O|�M|sK|j        j        }|                     |¦  «        }|�|S t          t          | |¦  «        |¬¦  «        }|||<   |S t          t          | |¦  «        fd|i|¤ŽS )N)r   r   )	ÚtypeÚLazyConstantVariableÚsupported_typesr,   ÚoutputÚvariable_tracker_cacheÚgetr9   r   )r   r   r0   r<   ÚcacheÚcachedr   s          r    r,   zLazyVariableTracker.createT   sº   € õ �‰;Œ;Õ.Ô>Ð>Ð>Ý'Ô.¨u°fÐHÐHÀÐHÐHÐHð ˆ>˜fÐ0¸Ð0Ø”IÔ4ˆEØ—Y’Y˜vÑ&Ô&ˆFØÐ!Ø�Ý$¥Y¨u°fÑ%=Ô%=ÀfÐMÑMÔMˆBØˆE�&‰MØˆIå"¥9¨U°FÑ#;Ô#;ÐVÐVÀFÐVÈgÐVÐVÐVr"   r   Úkwargsr   c                óº   •— t          |t          ¦  «        s$t          dt          |¦  «        j        › �¦  «        ‚ t          ¦   «         j        di |¤Ž || _        d S )Nz)_cache must be a LazyCache instance, got r7   )r   r   r   r>   r3   Úsuperr!   r:   ©r   r:   rF   Ú	__class__s      €r    r!   zLazyVariableTracker.__init__k   se   ø€ Ý˜&¥)Ñ,Ô,ð 	Ý ØS½DÀ¹L¼LÔ<QÐSÐSñô ð ð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ØˆŒˆˆr"   c                óš   — | j         j        €4| j                              ¦   «          | j         j        €t          d¦  «        ‚| j         j        S )z.Force construction of the real VariableTrackerNz"LazyCache.realize() did not set vt)r:   r   r1   r   ©r   s    r    r1   zLazyVariableTracker.realizes   sC   € àŒ;Œ>Ð!ØŒK×ÒÑ!Ô!Ð!ØŒ{Œ~Ð%Ý$Ð%IÑJÔJÐJØŒ{Œ~Ðr"   Úclsr>   Úboolc                ó\   — t                                ||                      ¦   «         ¦  «        S )zNCheck isinstance after realizing, used by ImplicitRealizingVariableTrackerMeta)r>   Ú__instancecheck__r1   )r   rM   s     r    Úlazy_isinstancez#LazyVariableTracker.lazy_isinstance{   s    € å×%Ò% c¨4¯<ª<©>¬>Ñ:Ô:Ð:r"   úVariableTracker | Selfc                ó|   — |                       ¦   «         r'| j        j        €t          d¦  «        ‚| j        j        S | S )z4Return the real VariableTracker if it already existsNz*is_realized() returned True but vt is None)Úis_realizedr:   r   r   rL   s    r    ÚunwrapzLazyVariableTracker.unwrap   s>   € à×ÒÑÔð 	"ØŒ{Œ~Ð%Ý$Ð%QÑRÔRÐRØ”;”>Ð!Øˆr"   c                ó   — | j         j        d uS ©N)r:   r   rL   s    r    rT   zLazyVariableTracker.is_realized‡   s   € ØŒ{Œ~ TÐ)Ð)r"   c                ó  — |                      d| j        ¦  «        | j        urt          d¦  «        ‚|                      d| j        ¦  «        | j        ur|                      ¦   «          t          j        |                      ¦   «         fi |¤ŽS )Nr:   z8cannot clone LazyVariableTracker with a different _cacher   )rC   r:   r   r   r1   r   ÚclonerU   )r   rF   s     r    rY   zLazyVariableTracker.cloneŠ   s�   € Ø�:Š:�h ¤Ñ,Ô,°D´KÐ?Ð?Ý ØJñô ð ð �:Š:�h ¤Ñ,Ô,°D´KÐ?Ð?Ø�LŠL‰NŒNˆNÝÔ$ T§[¢[¡]¤]Ð=Ð=°fÐ=Ð=Ð=r"   ú	type[Any]c                óz   — |                       ¦   «         rt          d¦  «        ‚t          | j        j        ¦  «        S )Nz=peek_type() called on an already realized LazyVariableTracker)rT   r   r>   r:   r   rL   s    r    Ú	peek_typezLazyVariableTracker.peek_type“   s@   € Ø×ÒÑÔð 	Ý ØOñô ð õ �D”KÔ%Ñ&Ô&Ð&r"   c                ó`   — |                       ¦   «         rt          d¦  «        ‚| j        j        S )Nz>peek_value() called on an already realized LazyVariableTracker©rT   r   r:   r   rL   s    r    Ú
peek_valuezLazyVariableTracker.peek_valueš   s8   € Ø×ÒÑÔð 	Ý ØPñô ð ð Œ{Ô Ð r"   ÚnameÚstrc                óˆ   — |                       ¦   «         r!| j        j                             |¦  «         d S || j        _        d S rW   )rT   r:   r   r.   r   )r   r`   s     r    r.   z!LazyVariableTracker.set_name_hint¡   sD   € Ø×ÒÑÔð 	)ØŒKŒN×(Ò(¨Ñ.Ô.Ð.Ð.Ð.à$(ˆDŒKÔ!Ð!Ð!r"   r   r
   c                ó–   — || _         |                      ¦   «         r!| j        j                             |¦  «         d S || j        _         d S rW   )r   rT   r:   r   r/   )r   r   s     r    r/   z'LazyVariableTracker.set_source_location§   sL   € Ø.ˆÔØ×ÒÑÔð 	:ØŒKŒN×.Ò.¨Ñ?Ô?Ð?Ð?Ð?à*9ˆDŒKÔ'Ð'Ð'r"   c                óº   — d}|                       ¦   «         r)|dt          |                      ¦   «         ¦  «        › d�z  }n|d|                      ¦   «         › d�z  }|S )NzLazyVariableTracker(z
realized: ú)zunrealized: )rT   ÚreprrU   r\   )r   Úvariable_infos     r    Ú__str__zLazyVariableTracker.__str__®   sj   € Ø.ˆØ×ÒÑÔð 	@ØÐ@­$¨t¯{ª{©}¬}Ñ*=Ô*=Ð@Ð@Ð@Ñ@ˆMˆMàÐ?¨D¯NªNÑ,<Ô,<Ð?Ð?Ð?Ñ?ˆMàÐr"   Úitemc                óF   — t          |                      ¦   «         |¦  «        S rW   ©Úgetattrr1   )r   ri   s     r    Ú__getattr__zLazyVariableTracker.__getattr__·   s   € Ý�t—|’|‘~”~ tÑ,Ô,Ð,r"   c                ó   — t           S )a€  Return the VariableTracker type to use for builtin handler dispatch.

        For regular LazyVariableTracker (not LazyConstantVariable), we return
        LazyVariableTracker itself so that _make_handler knows it needs to realize
        the arguments before calling the handler. LazyConstantVariable overrides
        this to return ConstantVariable since it can stay lazy.
        )r9   rL   s    r    Úget_handler_type_for_dispatchz1LazyVariableTracker.get_handler_type_for_dispatchº   s
   € õ #Ð"r"   Fr&   rD   ú!dict[int, tuple[Any, Any]] | Noner'   c               óú  ‡ ‡‡— ‰€i Št          |¦  «        }|‰v r‰|         d         S t          |¦  «        }t          |t          ¦  «        rH‰ot	          |t
          ¦  «        }|r|}�n
‰                      |                     ¦   «         ‰‰¬¦  «        }nßt          |t          ¦  «        rB|}||f‰|<   |j	        }|j
        }	|D ]'}
|
|	vr!‰                      ||
         ‰‰¬¦  «        ||
<   Œ(nˆ|t          u rˆˆˆ fd„|D ¦   «         }nn|t          u rt          ˆˆˆ fd„|D ¦   «         ¦  «        }nG|t          t          j        fv r0ˆˆˆ fd„t          |                     ¦   «         ¦  «        D ¦   «         }n|}||f‰|<   |S )zP
        Walk an object and realize all LazyVariableTrackers inside it.
        Nr   r&   c                ó@   •— g | ]}‰                      |‰‰¬ ¦  «        ‘ŒS ©r&   ©Úrealize_all©Ú.0Úvr'   rD   rM   s     €€€r    ú
<listcomp>z3LazyVariableTracker.realize_all.<locals>.<listcomp>ñ   s<   ø€ ð ð ð àð —’  5Ð>Q�ÑRÔRðð ð r"   c              3  óH   •K  — | ]}‰                      |‰‰¬ ¦  «        V — ŒdS )r&   Nrt   rv   s     €€€r    ú	<genexpr>z2LazyVariableTracker.realize_all.<locals>.<genexpr>ö   sJ   øè è € ð ð àð —’  5Ð>Q�ÑRÔRðð ð ð ð ð r"   c                óH   •— i | ]\  }}|‰                      |‰‰¬ ¦  «        “ŒS rs   rt   )rw   Úkrx   r'   rD   rM   s      €€€r    ú
<dictcomp>z3LazyVariableTracker.realize_all.<locals>.<dictcomp>û   sB   ø€ ð ð ð á�A�qð �3—?’? 1 eÐAT�?ÑUÔUðð ð r"   )Úidr>   Ú
issubclassr9   r   r?   ru   r1   r   Ú__dict__Ú_nonvar_fieldsÚlistÚtupleÚdictÚcollectionsÚOrderedDictÚitems)rM   r   rD   r'   ÚidxÚ	value_clsÚ	keep_lazyÚresultÚ
value_dictÚnonvarsÚkeys   ` ``       r    ru   zLazyVariableTracker.realize_allÈ   s  øøø€ ð ˆ=ØˆEå�‰iŒiˆØ�%ˆ<ˆ<Ø˜”:˜a”=Ð å˜‘K”Kˆ	Ý�iÕ!4Ñ5Ô5ð %	à+ÐWµ
¸5ÕBVÑ0WÔ0WˆIØð Ø�‘àŸšØ—M’M‘O”O UÐ@Sð )ñ ô ��õ ˜	¥?Ñ3Ô3ð 	àˆFà  %˜ˆE�#‰JØœˆJØÔ*ˆGØ!ð ð �Ø˜gÐ%Ð%Ø&)§o¢oØ" 3œ¨ÐDWð '6ñ 'ô '�J˜s‘Oøðð
 �$ÐÐðð ð ð ð ð àðñ ô ˆFˆFð �%ÐÐÝð ð ð ð ð ð àðñ ô ñ ô ˆFˆFð �4¥Ô!8Ð9Ð9Ð9ðð ð ð ð ð å  §¢¡¤Ñ/Ô/ðñ ô ˆFˆFð
 ˆFð ˜e�_ˆˆc‰
Øˆr"   c                óà   ‡— dd„Š|                       ¦   «         rt          d¦  «        ‚| j        j        }t	          |t
          ¦  «        rt          ˆfd„|D ¦   «         ¦  «        S  ‰|¦  «        S )	Nr   r   r   rN   c                óŒ   — t          j        | ¦  «        p0t          t          | ¦  «        t          ¦  «        pt	          | ¦  «        S rW   )ÚinspectÚ	isbuiltinr€   r>   r   )r   s    r    Ú_helperz5LazyVariableTracker.is_hashable_lazy.<locals>._helper
  s?   € õ Ô! %Ñ(Ô(ð 1Ý�d 5™kœk­4Ñ0Ô0ð1å)¨%Ñ0Ô0ðr"   z?is_hashable() called on an already realized LazyVariableTrackerc              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S rW   r7   )rw   rx   r”   s     €r    r{   z7LazyVariableTracker.is_hashable_lazy.<locals>.<genexpr>  s+   øè è € Ð1Ð1 a�w�w˜q‘z”zÐ1Ð1Ð1Ð1Ð1Ð1r"   )r   r   r   rN   )rT   r   r:   r   r   r„   Úall)r   r   r”   s     @r    Úis_hashable_lazyz$LazyVariableTracker.is_hashable_lazy  s‘   ø€ ð	ð 	ð 	ð 	ð ×ÒÑÔð 	Ý ØQñô ð ð ”Ô!ˆÝ�e�UÑ#Ô#ð 	2ÝÐ1Ð1Ð1Ð1¨5Ð1Ñ1Ô1Ñ1Ô1Ð1Øˆw�u‰~Œ~Ðr"   c                ó`   — |                       ¦   «         rt          d¦  «        ‚| j        j        S )NzBoriginal_value() called on an already realized LazyVariableTrackerr^   rL   s    r    Úoriginal_valuez"LazyVariableTracker.original_value  s8   € à×ÒÑÔð 	Ý ØTñô ð ð Œ{Ô Ð r"   c                ó`   — |                       ¦   «         rt          d¦  «        ‚| j        j        S )NzCoriginal_source() called on an already realized LazyVariableTracker)rT   r   r:   r   rL   s    r    Úoriginal_sourcez#LazyVariableTracker.original_source#  s8   € à×ÒÑÔð 	Ý ØUñô ð ð Œ{Ô!Ð!r"   )
r   r   r   r   r0   r;   r<   r   r   r   ©r:   r   rF   r   r   r   ©r   r   ©rM   r>   r   rN   )r   rR   ©r   rN   )rF   r   r   r   )r   rZ   )r   r   )r`   ra   r   r   )r   r
   r   r   ©r   ra   )ri   ra   r   r   ©r   r>   rW   )r   r   rD   rp   r'   rN   r   r   )r3   r4   r5   r6   Ú_no_implicit_realizer   r‚   Ústaticmethodr,   r!   r1   rQ   rU   rT   rY   r\   r_   r.   r/   rh   rm   ro   ÚvisitÚ__repr__Úclassmethodru   r—   r™   r›   Ú__classcell__©rJ   s   @r    r9   r9   B   s  ø€ € € € € ðð ð  ÐØÐ@ Ô!?Ð@€Nàð
 04ð	Wð Wð Wð Wð Wñ „\ðWð,ð ð ð ð ð ðð ð ð ð;ð ;ð ;ð ;ðð ð ð ð*ð *ð *ð *ð>ð >ð >ð >ð'ð 'ð 'ð 'ð!ð !ð !ð !ð)ð )ð )ð )ð:ð :ð :ð :ðð ð ð ð-ð -ð -ð -ð#ð #ð #ð #ð Ô!€EØ€Hàð 48ð;ð
 %*ð;ð ;ð ;ð ;ð ;ñ „[ð;ðzð ð ð ð*!ð !ð !ð !ð"ð "ð "ð "ð "ð "ð "ð "r"   r9   )Ú	metaclassc                  ó¬   ‡ — e Zd ZdZeeeefZdddhe	j
        £Z
edd„¦   «         Zdˆ fd„Zdd„Zd ˆ fd„Zd!ˆ fd„Zd"d„Zd"d„Zd#d„Zd!d„Zd$ˆ fd„Zˆ xZS )%r?   az  
    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.

    Guards are installed lazily:
    - TYPE_MATCH guard is installed when type-based methods (python_type, is_tensor,
      lazy_isinstance) are called
    - CONSTANT_MATCH guard is installed on full realization (e.g., used in control
      flow or math), which subsumes any TYPE_MATCH guard
    Ú_type_guard_installedÚ_type_guard_refÚ_handler_typer   r   r   r<   r   r   c                ó,  — ddl m} ddlm} t	          | ¦  «        t
          j        vr%t          dt	          | ¦  «        j        › d�¦  «        ‚|€t          d¦  «        ‚ ||¦  «        r |j	        | fd|i|¤ŽS t          t          | |¦  «        fd|i|¤ŽS )	Nr   )Úis_constant_sourcer	   ©ÚConstantVariablezunsupported type z for LazyConstantVariablez0source must not be None for LazyConstantVariabler   )r   r¯   Úconstantr±   r>   r?   r@   r   r3   r,   r   )r   r   r<   r¯   r±   s        r    r,   zLazyConstantVariable.createD  sØ   € ð 	0Ð/Ð/Ð/Ð/Ð/Ø.Ð.Ð.Ð.Ð.Ð.å�‰;Œ;Õ2ÔBÐBÐBÝ ØS¥D¨¡K¤KÔ$8ÐSÐSÐSñô ð ð ˆ>Ý Ð!SÑTÔTÐTð Ð˜fÑ%Ô%ð 	LØ*Ð#Ô*¨5ÐKÐK¸ÐKÀ7ÐKÐKÐKå#¥I¨e°VÑ$<Ô$<ÐWÐWÀVÐWÈwÐWÐWÐWr"   r:   r   rF   r   c                óf   •—  t          ¦   «         j        |fi |¤Ž d| _        d | _        d | _        d S ©NF)rH   r!   r«   r¬   r­   rI   s      €r    r!   zLazyConstantVariable.__init__[  s@   ø€ Ø�‰ŒÔ˜Ð*Ð* 6Ð*Ð*Ð*Ø%*ˆÔ"Ø$(ˆÔØ*.ˆÔÐÐr"   c                óì   — | j         s|                      ¦   «         rdS ddlm}m} | j        €t          d¦  «        ‚| j                             |j        ¦  «        } ||¦  «         d| _         || _	        dS )zCInstall TYPE_MATCH guard if not already installed and not realized.Nr   ©ÚGuardBuilderÚinstall_guardz2source must not be None when installing type guardT)
r«   rT   Úguardsr·   r¸   r   r   Ú
make_guardÚ
TYPE_MATCHr¬   )r   r·   r¸   Úguards       r    Ú_ensure_type_guardz'LazyConstantVariable._ensure_type_guarda  s’   € àÔ%ð 	¨×)9Ò)9Ñ);Ô);ð 	ØˆFà8Ð8Ð8Ð8Ð8Ð8Ð8Ð8àŒ;ÐÝ Ð!UÑVÔVÐVØ”×&Ò& |Ô'>Ñ?Ô?ˆØˆ�eÑÔÐØ%)ˆÔ"Ø$ˆÔÐÐr"   c                ó
  •— |                       ¦   «         r t          ¦   «                              ¦   «         S ddlm} ddlm}m} ddlm	} | j
        €t          d¦  «        ‚t          ¦   «                              ¦   «         }t          ||¦  «        rs| j        �D|                     ¦   «         }|j        j        j                             | j        ¦  «         d| _         || j
                             |j        ¦  «        ¦  «         |S )	z/Force construction of the real VariableTracker.r   )ÚTracingContextr   r¶   r	   r°   Nz;source must not be None when realizing LazyConstantVariable)rT   rH   r1   Útorch._guardsr¿   r¹   r·   r¸   r²   r±   r   r   r   r¬   rC   Úguards_contextÚdynamo_guardsÚinnerÚdiscardrº   ÚCONSTANT_MATCH)r   r¿   r·   r¸   r±   rŒ   Útracing_contextrJ   s          €r    r1   zLazyConstantVariable.realizeo  s"  ø€ à×ÒÑÔð 	%Ý‘7”7—?’?Ñ$Ô$Ð$à0Ð0Ð0Ð0Ð0Ð0à8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ø.Ð.Ð.Ð.Ð.Ð.àŒ;ÐÝ ØMñô ð õ ‘”—’Ñ"Ô"ˆõ �fÐ.Ñ/Ô/ð 	OØÔ#Ð/Ø"0×"4Ò"4Ñ"6Ô"6�ØÔ.Ô<ÔB×JÒJØÔ(ñô ð ð (,�Ô$ØˆM˜$œ+×0Ò0°Ô1LÑMÔMÑNÔNÐNàˆr"   r>   c                ó¼   •— |                       ¦   «         r t          ¦   «                              ¦   «         S |                      ¦   «          |                      ¦   «         S )z6Return the Python type without triggering realization.)rT   rH   Úpython_typer½   r\   )r   rJ   s    €r    rÈ   z LazyConstantVariable.python_type�  sO   ø€ à×ÒÑÔð 	)Ý‘7”7×&Ò&Ñ(Ô(Ð(Ø×ÒÑ!Ô!Ð!Ø�~Š~ÑÔÐr"   rN   c                ó.   — |                       ¦   «          dS )z&Primitive constants are never tensors.F©r½   rL   s    r    Ú	is_tensorzLazyConstantVariable.is_tensor”  s   € à×ÒÑ!Ô!Ð!Øˆur"   c                ó.   — |                       ¦   «          dS r´   rÊ   rL   s    r    Úis_constant_nonez%LazyConstantVariable.is_constant_none™  s   € Ø×ÒÑ!Ô!Ð!Øˆur"   útype | Nonec                ó˜  — |                       ¦   «         r!t          |                      ¦   «         ¦  «        S |                      ¦   «         }t          j        s*|t          u r!t          |                      ¦   «         ¦  «        S t          j        s*|t          u r!t          |                      ¦   «         ¦  «        S |  	                    ¦   «          dS )a×  Check if we need to realize to determine the VariableTracker type.

        Returns None if we can determine the type without realization (and installs
        TYPE_MATCH guard). Returns the realized type if realization was needed.

        With specialize_int=False or specialize_float=False, ints/floats may become
        either ConstantVariable or SymNodeVariable, so we must realize to know.
        For bool/str, we always know it will be ConstantVariable.
        N)
rT   r>   r1   r\   r   Úspecialize_intÚintÚspecialize_floatÚfloatr½   )r   Ú
value_types     r    Ú_maybe_realize_for_typez,LazyConstantVariable._maybe_realize_for_type�  s®   € ð ×ÒÑÔð 	(Ý˜Ÿš™œÑ'Ô'Ð'à—^’^Ñ%Ô%ˆ
õ Ô$ð 	(¨µsÐ):Ð):Ý˜Ÿš™œÑ'Ô'Ð'ÝÔ&ð 	(¨:½Ð+>Ð+>Ý˜Ÿš™œÑ'Ô'Ð'ð 	×ÒÑ!Ô!Ð!Øˆtr"   c                óv   — | j         �| j         S ddlm} |                      ¦   «         }|�|n|| _         | j         S )zæReturn the VariableTracker type to use for builtin handler dispatch.

        This allows builtins like isinstance() and type() to find the correct
        handler without triggering full realization of the lazy constant.
        Nr	   r°   )r­   r²   r±   rÕ   )r   r±   Úrealized_types      r    ro   z2LazyConstantVariable.get_handler_type_for_dispatch¸  sY   € ð ÔÐ)ØÔ%Ð%à.Ð.Ð.Ð.Ð.Ð.à×4Ò4Ñ6Ô6ˆà*Ð6ˆMˆMÐ<Lð 	Ôð Ô!Ð!r"   rM   c                ó^  •— ddl m} ddlm} |                      ¦   «         r!t          ¦   «                              |¦  «        S t          ||¦  «        s&t          ||¦  «        s|                      ¦   «          dS |  	                    ¦   «         }|�t          ||¦  «        S t          ||¦  «        S )a  Check isinstance without triggering realization when possible.

        LazyConstantVariable only wraps primitive types (int, float, bool, str)
        which always realize to ConstantVariable, so we can answer isinstance
        checks by checking if the target class is ConstantVariable or a parent.

        However, when specialize_int=False or specialize_float=False, integers
        and floats may realize to SymNodeVariable instead of ConstantVariable,
        so we must fall back to full realization for those cases.
        r	   r°   r   F)
r²   r±   Útensorr   rT   rH   rQ   r€   r½   rÕ   )r   rM   r±   r   r×   rJ   s        €r    rQ   z$LazyConstantVariable.lazy_isinstanceÉ  sÓ   ø€ ð 	/Ð.Ð.Ð.Ð.Ð.Ø+Ð+Ð+Ð+Ð+Ð+ð ×ÒÑÔð 	0Ý‘7”7×*Ò*¨3Ñ/Ô/Ð/õ Ð*¨CÑ0Ô0ð 	½Ø˜Sñ:
ô :
ð 	ð ×#Ò#Ñ%Ô%Ð%Ø�5à×4Ò4Ñ6Ô6ˆØÐ$Ý˜m¨SÑ1Ô1Ð1ÝÐ*¨CÑ0Ô0Ð0r"   )r   r   r   r   r<   r   r   r   rœ   r2   r�   r¡   rŸ   )r   rÎ   rž   )r3   r4   r5   r6   rÑ   rÓ   rN   ra   r@   r9   r‚   r£   r,   r!   r½   r1   rÈ   rË   rÍ   rÕ   ro   rQ   r§   r¨   s   @r    r?   r?   ,  sV  ø€ € € € € ðð ð ˜E 4¨Ð-€OàØØðð 
Ô	+ð	€Nð ðXð Xð Xñ „\ðXð,/ð /ð /ð /ð /ð /ð%ð %ð %ð %ðð ð ð ð ð ð< ð  ð  ð  ð  ð  ðð ð ð ð
ð ð ð ðð ð ð ð6"ð "ð "ð "ð"1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1r"   r?   c                  ó   — e Zd Zdd„Zdd	„Zd
S )r   Úsym_node_variabler   Úfmt_spec_varr   r   r   c                ó„   — ddl m} || _        |                     d|                     ¦   «         z   dz   ¦  «        | _        d S )Nr	   r°   z{:Ú})r²   r±   Úsym_node_varr,   Úas_python_constantÚfmt_var)r   rÛ   rÜ   r±   s       r    r!   z LazySymNodeFormatString.__init__ê  sR   € ð 	/Ð.Ð.Ð.Ð.Ð.à-ˆÔØ'×.Ò.Ø�<×2Ò2Ñ4Ô4Ñ4°sÑ:ñ
ô 
ˆŒˆˆr"   ra   c                ó®   — t                                | j                             ¦   «         t          | j                             ¦   «         ¦  «        ¦  «        S rW   )ra   Úformatrá   rà   rß   Úevaluate_exprrL   s    r    r¥   z LazySymNodeFormatString.__repr__ô  sC   € Ý�zŠzØŒL×+Ò+Ñ-Ô-Ý�Ô!×/Ò/Ñ1Ô1Ñ2Ô2ñ
ô 
ð 	
r"   N)rÛ   r   rÜ   r   r   r   r    )r3   r4   r5   r!   r¥   r7   r"   r    r   r   é  s<   € € € € € ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð 
ð 
r"   r   r`   ra   r   ú.Callable[[LazyVariableTracker, Any, Any], Any]c                ón   ‡ — t          j        t          t          ‰ ¦  «        ¦  «        dˆ fd„¦   «         }|S )	Nr   r9   Úargsr   rF   r   c                óT   •—  t          |                      ¦   «         ‰¦  «        |i |¤ŽS rW   rk   )r   rç   rF   r`   s      €r    Úrealize_and_forwardz8_create_realize_and_forward.<locals>.realize_and_forwardþ  s,   ø€ ð -�w�t—|’|‘~”~ tÑ,Ô,¨dÐ=°fÐ=Ð=Ð=r"   )r   r9   rç   r   rF   r   r   r   )Ú	functoolsÚwrapsrl   r   )r`   ré   s   ` r    Ú_create_realize_and_forwardrì   û  sJ   ø€ õ „_•W�_¨dÑ3Ô3Ñ4Ô4ð>ð >ð >ð >ð >ñ 5Ô4ð>ð
 Ðr"   r   c                 óÎ   — t           j                             ¦   «         D ]E\  } }| t          j        vr2t	          |¦  «        r#t          t          | t          | ¦  «        ¦  «         ŒFd S rW   )r   r�   rˆ   r9   ÚcallableÚsetattrrì   )r`   r   s     r    Ú	_populaterð     sm   € Ý&Ô/×5Ò5Ñ7Ô7ð Vð V‰ˆˆeØÕ*Ô3Ð3Ð3Ý˜‰Œð VÝÕ+¨TÕ3NÈtÑ3TÔ3TÑUÔUÐUøðVð Vr"   )r`   ra   r   rå   r2   )Ú
__future__r   r†   rê   r’   Útypingr   r   r)   r   Úutilsr   Úbaser
   r   r   Úcollections.abcr   Útyping_extensionsr   r(   r   rÙ   r   r   r9   r?   r   rì   rð   r7   r"   r    ú<module>r÷      sâ  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fð ð (Ø(Ð(Ð(Ð(Ð(Ð(Ø&Ð&Ð&Ð&Ð&Ð&à<Ð<Ð<Ð<Ð<Ð<Ø'Ð'Ð'Ð'Ð'Ð'ð*!ð *!ð *!ð *!ð *!ñ *!ô *!ð *!ðZg"ð g"ð g"ð g"ð g"˜/Ð5Hð g"ñ g"ô g"ð g"ðTz1ð z1ð z1ð z1ð z1Ð.ñ z1ô z1ð z1ðz
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð$	ð 	ð 	ð 	ðVð Vð Vð Vð 
€	�„€€€r"   