§
    ž²Åjö  ã                   óì   — d dl Z d dlZd dlmZmZmZmZmZ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¦  «        Z G d„ d¦  «        Zdedeeeegef         fd„Zdd„Z e¦   «          dS )é    N)ÚAnyÚCallableÚDictÚOptionalÚTupleÚUnion)ÚSelfé   )ÚVariableTracker)ÚSymNodeVariablec                   ó.   — e Zd ZdZdededdfd„Zdd„ZdS )	Ú	LazyCachez+Container to cache the real VariableTrackerÚvalueÚsourceÚreturnNc                 ób   — t          |t          ¦  «        s|sJ ‚|| _        || _        d | _        d S ©N)Ú
isinstanceÚLazySymNodeFormatStringr   r   Úvt)Úselfr   r   s      úMC:\Projects\Historical\venv\Lib\site-packages\torch/_dynamo/variables/lazy.pyÚ__init__zLazyCache.__init__   s7   € Ý˜%Õ!8Ñ9Ô9ð 	ØˆMˆM�6ØˆŒ
ØˆŒØ-1ˆŒˆˆó    c                 óÜ   — | j         �J ‚ddlm} |                     ¦   «         }t	          | j        t          ¦  «        rd }n| j        }t          j	        || j        |¦  «        | _         | `| `d S )Né   )ÚInstructionTranslator)
r   Úsymbolic_convertr   Ú
current_txr   r   r   r   r   Úbuild)r   r   Útxr   s       r   ÚrealizezLazyCache.realize   sy   € ØŒwˆˆˆØ<Ð<Ð<Ð<Ð<Ð<à"×-Ò-Ñ/Ô/ˆå�d”jÕ"9Ñ:Ô:ð 	!ØˆFˆFà”[ˆFå!Ô'¨¨D¬J¸Ñ?Ô?ˆŒØˆJØˆKˆKˆKr   ©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r"   © r   r   r   r   
   sW   € € € € € Ø5Ð5ð2˜cð 2¨3ð 2°4ð 2ð 2ð 2ð 2ðð ð ð ð ð r   r   c                   óZ  ‡ — e Zd ZdZdhej        £Zededededd fd„¦   «         Zde	dedd	fˆ fd
„Z
defd„Zdeeef         fd„Zdefd„Zdedefd„Zdee         fd„Zdefd„Zdefˆ fd„Zdedefd„Zej        ZeZe	 ddedeeeeeef         f                  def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.
    Ú_cacher   r   Úoptionsr   c                 ó<   — t          t          | |¦  «        fd|i|¤ŽS )Nr   )r*   r   )r   r   r,   s      r   ÚcreatezLazyVariableTracker.create4   s'   € å"¥9¨U°FÑ#;Ô#;ÐVÐVÀFÐVÈgÐVÐVÐVr   ÚkwargsNc                 óv   •— t          |t          ¦  «        sJ ‚ t          ¦   «         j        di |¤Ž || _        d S )Nr(   )r   r   Úsuperr   r+   )r   r+   r/   Ú	__class__s      €r   r   zLazyVariableTracker.__init__8   sA   ø€ Ý˜&¥)Ñ,Ô,Ð,Ð,Ð,Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ØˆŒˆˆr   c                 ó€   — | j         j        €'| j                              ¦   «          | j         j        €J ‚| j         j        S )z.Force construction of the real VariableTracker)r+   r   r"   ©r   s    r   r"   zLazyVariableTracker.realize=   s:   € àŒ;Œ>Ð!ØŒK×ÒÑ!Ô!Ð!Ø”;”>Ð-Ð-Ð-ØŒ{Œ~Ðr   c                 ób   — |                       ¦   «         r| j        j        €J ‚| j        j        S | S )z4Return the real VariableTracker if it already exists)Úis_realizedr+   r   r4   s    r   ÚunwrapzLazyVariableTracker.unwrapD   s5   € à×ÒÑÔð 	"Ø”;”>Ð-Ð-Ð-Ø”;”>Ð!Øˆr   c                 ó   — | j         j        d uS r   )r+   r   r4   s    r   r6   zLazyVariableTracker.is_realizedK   s   € ØŒ{Œ~ TÐ)Ð)r   c                 óþ   — |                      d| j        ¦  «        | j        u sJ ‚|                      d| j        ¦  «        | j        ur|                      ¦   «          t	          j        |                      ¦   «         fi |¤ŽS )Nr+   r   )Úgetr+   r   r"   r   Úcloner7   )r   r/   s     r   r;   zLazyVariableTracker.cloneN   sp   € Ø�zŠz˜( D¤KÑ0Ô0°D´KÐ?Ð?Ð?Ð?Ø�:Š:�h ¤Ñ,Ô,°D´KÐ?Ð?Ø�LŠL‰NŒNˆNÝÔ$ T§[¢[¡]¤]Ð=Ð=°fÐ=Ð=Ð=r   c                 ó`   — |                       ¦   «         rJ ‚t          | j        j        ¦  «        S r   )r6   Útyper+   r   r4   s    r   Ú	peek_typezLazyVariableTracker.peek_typeT   s-   € Ø×#Ò#Ñ%Ô%Ð%Ð%Ð%Ý�D”KÔ%Ñ&Ô&Ð&r   c                 óF   — |                       ¦   «         rJ ‚| j        j        S r   )r6   r+   r   r4   s    r   Ú
peek_valuezLazyVariableTracker.peek_valueX   s%   € Ø×#Ò#Ñ%Ô%Ð%Ð%Ð%ØŒ{Ô Ð r   c                 ó®   •— |                       ¦   «         r!t          |                      ¦   «         ¦  «        S t          ¦   «                              ¦   «         S r   )r6   Úreprr7   r1   Ú__repr__)r   r2   s    €r   Ú__str__zLazyVariableTracker.__str__\   sC   ø€ Ø×ÒÑÔð 	'Ý˜Ÿš™œÑ&Ô&Ð&Ý‰wŒw×ÒÑ!Ô!Ð!r   Úitemc                 óF   — t          |                      ¦   «         |¦  «        S r   ©Úgetattrr"   )r   rE   s     r   Ú__getattr__zLazyVariableTracker.__getattr__a   s   € Ý�t—|’|‘~”~ tÑ,Ô,Ð,r   Úcachec                 ó¢  ‡ ‡— ‰€i Št          |¦  «        }|‰v r‰|         d         S t          |¦  «        }t          |t          ¦  «        r)‰                      |                     ¦   «         ‰¦  «        }nÓt          |t          ¦  «        r9|}|j        }|j        }|D ]%}||vr‰                      ||         ‰¦  «        ||<   Œ&n…|t          u rˆˆ fd„|D ¦   «         }nl|t          u rt          ˆˆ fd„|D ¦   «         ¦  «        }nF|t          t          j        fv r/ˆˆ fd„t          |                     ¦   «         ¦  «        D ¦   «         }n|}||f‰|<   |S )zP
        Walk an object and realize all LazyVariableTrackers inside it.
        Nr   c                 ó<   •— g | ]}‰                      |‰¦  «        ‘ŒS r(   ©Úrealize_all©Ú.0ÚvrJ   Úclss     €€r   ú
<listcomp>z3LazyVariableTracker.realize_all.<locals>.<listcomp>„   s'   ø€ Ð?Ð?Ð?°A�c—o’o a¨Ñ/Ô/Ð?Ð?Ð?r   c              3   óD   •K  — | ]}‰                      |‰¦  «        V — Œd S r   rM   rO   s     €€r   ú	<genexpr>z2LazyVariableTracker.realize_all.<locals>.<genexpr>†   s1   øè è € ÐDÐD¸˜3Ÿ?š?¨1¨eÑ4Ô4ÐDÐDÐDÐDÐDÐDr   c                 óD   •— i | ]\  }}|‰                      |‰¦  «        “ŒS r(   rM   )rP   ÚkrQ   rJ   rR   s      €€r   ú
<dictcomp>z3LazyVariableTracker.realize_all.<locals>.<dictcomp>ˆ   s-   ø€ ÐSÐSÐS±t°q¸!�a˜Ÿš¨¨EÑ2Ô2ÐSÐSÐSr   )Úidr=   Ú
issubclassr*   rN   r"   r   Ú__dict__Ú_nonvar_fieldsÚlistÚtupleÚdictÚcollectionsÚOrderedDictÚitems)	rR   r   rJ   ÚidxÚ	value_clsÚresultÚ
value_dictÚnonvarsÚkeys	   ` `      r   rN   zLazyVariableTracker.realize_allh   sˆ  øø€ ð ˆ=ØˆEå�‰iŒiˆØ�%ˆ<ˆ<Ø˜”:˜a”=Ð å˜‘K”Kˆ	Ý�iÕ!4Ñ5Ô5ð 	Ø—_’_ U§]¢]¡_¤_°eÑ<Ô<ˆFˆFÝ˜	¥?Ñ3Ô3ð 	àˆFØœˆJØÔ*ˆGØ!ð Nð N�Ø˜gÐ%Ð%Ø&)§o¢o°jÀ´oÀuÑ&MÔ&M�J˜s‘OøðNð �$ÐÐØ?Ð?Ð?Ð?Ð?¸Ð?Ñ?Ô?ˆFˆFØ�%ÐÐÝÐDÐDÐDÐDÐD¸eÐDÑDÔDÑDÔDˆFˆFØ�4¥Ô!8Ð9Ð9Ð9ØSÐSÐSÐSÐS½tÀEÇKÂKÁMÄMÑ?RÔ?RÐSÑSÔSˆFˆFàˆFð ˜e�_ˆˆc‰
Øˆr   r   )!r$   r%   r&   r'   r   r\   Ústaticmethodr   r.   r   r   r"   r   r	   r7   Úboolr6   r;   r=   r>   r@   ÚstrrD   rI   ÚvisitrC   Úclassmethodr   r   Úintr   rN   Ú__classcell__)r2   s   @r   r*   r*   $   s  ø€ € € € € ðð ð Ð@ Ô!?Ð@€NàðW�cð W 3ð W°3ð WÐ;Pð Wð Wð Wñ „\ðWð˜yð °Cð ¸Dð ð ð ð ð ð ð
˜ð ð ð ð ð˜˜o¨tÐ3Ô4ð ð ð ð ð*˜Tð *ð *ð *ð *ð>˜cð > oð >ð >ð >ð >ð'˜4 œ9ð 'ð 'ð 'ð 'ð!˜Cð !ð !ð !ð !ð"˜ð "ð "ð "ð "ð "ð "ð
- ð -¨ð -ð -ð -ð -ð Ô!€EØ€Hàð 7;ð%ð %àð%ð ˜˜S %¨¨S¨¤/Ð1Ô2Ô3ð%ð 
ð	%ð %ð %ñ „[ð%ð %ð %ð %ð %r   r*   c                   ó.   — e Zd Zdededdfd„Zdefd„ZdS )r   Úsym_node_variableÚfmt_spec_varr   Nc                 ó„   — ddl m} || _        |                     d|                     ¦   «         z   dz   ¦  «        | _        d S )Nr
   )ÚConstantVariablez{:Ú})Úconstantrt   Úsym_node_varr.   Úas_python_constantÚfmt_var)r   rq   rr   rt   s       r   r   z LazySymNodeFormatString.__init__’   sR   € ð 	/Ð.Ð.Ð.Ð.Ð.à-ˆÔØ'×.Ò.Ø�<×2Ò2Ñ4Ô4Ñ4°sÑ:ñ
ô 
ˆŒˆˆr   c                 ó®   — t                                | j                             ¦   «         t          | j                             ¦   «         ¦  «        ¦  «        S r   )rk   Úformatry   rx   rw   Úevaluate_exprr4   s    r   rC   z LazySymNodeFormatString.__repr__œ   sC   € Ý�zŠzØŒL×+Ò+Ñ-Ô-Ý�Ô!×/Ò/Ñ1Ô1Ñ2Ô2ñ
ô 
ð 	
r   )r$   r%   r&   r   r   r   rk   rC   r(   r   r   r   r   ‘   s[   € € € € € ð
Ø!0ð
Ø@Oð
à	ð
ð 
ð 
ð 
ð
˜#ð 
ð 
ð 
ð 
ð 
ð 
r   r   Únamer   c           	      ó¦   ‡ — t          j        t          t          ‰ ¦  «        ¦  «        dt          dt
          dt
          dt
          fˆ fd„¦   «         }|S )Nr   Úargsr/   r   c                 óT   •—  t          |                      ¦   «         ‰¦  «        |i |¤ŽS r   rG   )r   r   r/   r}   s      €r   Úrealize_and_forwardz8_create_realize_and_forward.<locals>.realize_and_forward¦   s,   ø€ ð -�w�t—|’|‘~”~ tÑ,Ô,¨dÐ=°fÐ=Ð=Ð=r   )Ú	functoolsÚwrapsrH   r   r*   r   )r}   r�   s   ` r   Ú_create_realize_and_forwardr„   £   sj   ø€ õ „_•W�_¨dÑ3Ô3Ñ4Ô4ð>Ý!ð>Ý*-ð>Ý9<ð>å	ð>ð >ð >ð >ð >ñ 5Ô4ð>ð
 Ðr   c                  óÎ   — t           j                             ¦   «         D ]E\  } }| t          j        vr2t	          |¦  «        r#t          t          | t          | ¦  «        ¦  «         ŒFd S r   )r   r[   rb   r*   Ú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#   )r`   r‚   Útypingr   r   r   r   r   r   Útyping_extensionsr	   Úbaser   Útensorr   r   r*   r   rk   r„   rˆ   r(   r   r   ú<module>r�      se  ðØ Ð Ð Ð Ø Ð Ð Ð Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø "Ð "Ð "Ð "Ð "Ð "à !Ð !Ð !Ð !Ð !Ð !Ø #Ð #Ð #Ð #Ð #Ð #ðð ð ð ð ñ ô ð ð4jð jð jð jð j˜/ñ jô jð jðZ
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð$	Ø
ð	àÐ" C¨Ð-¨sÐ2Ô3ð	ð 	ð 	ð 	ðVð Vð Vð Vð 
€	�„€€€r   