Ë
    P/æj,  ã                   ó�   — d dl Z d dl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„ Zd„ Z e«        y)é    N)ÚOptionalé   )ÚVariableTracker)ÚSymNodeVariablec                   ó   — e Zd ZdZdd„Zd„ Zy)Ú	LazyCachez+Container to cache the real VariableTrackerNc                 óV   — t        |t        «      s|sJ ‚|| _        || _        d | _        y ©N)Ú
isinstanceÚLazySymNodeFormatStringÚvalueÚsourceÚvt)Úselfr   r   s      ú_/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/_dynamo/variables/lazy.pyÚ__init__zLazyCache.__init__   s)   € Ü˜%Ô!8Ô9ÙˆM�6ØˆŒ
ØˆŒØ-1ˆ�ó    c                 ó,  — | j                   �J ‚ddlm} ddlm}m} |j                  «       }t        | j                  t        «      r"|j                  || j                  «      | _         n(  ||| j                  «      | j                  «      | _         | `| `y )Né   )ÚInstructionTranslatorr   )ÚSourcelessBuilderÚVariableBuilder)r   Úsymbolic_convertr   Úbuilderr   r   Ú
current_txr   r   r   Úcreater   )r   r   r   r   Útxs        r   ÚrealizezLazyCache.realize   sr   € Ø�w‰wˆÐˆÝ<ß?à"×-Ñ-Ó/ˆÜ�d—j‘jÔ"9Ô:Ø'×.Ñ.¨r°4·:±:Ó>ˆD�Gà6‘o b¨$¯+©+Ó6°t·z±zÓBˆDŒGàˆJØ‰Kr   ©ÚreturnN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   © r   r   r   r   
   s   „ Ù5ó2ór   r   c                   óÆ   ‡ — e Zd ZdZdhej
                  £Zed„ «       Zdˆ fd„Zdefd„Z	d„ Z
d„ Zd	„ Zdefd
„Zd„ Zej                   Zej"                  Ze	 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 VariableBuilder 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.
    Ú_cachec                 ó2   — t        t        | |«      fd|i|¤ŽS )Nr   )r'   r   )r   r   Úoptionss      r   r   zLazyVariableTracker.create3   s   € ä"¤9¨U°FÓ#;ÑVÀFÐVÈgÑVÐVr   r    c                 óV   •— t        |t        «      sJ ‚t        ‰| �  di |¤Ž || _        y )Nr%   )r   r   Úsuperr   r(   )r   r(   ÚkwargsÚ	__class__s      €r   r   zLazyVariableTracker.__init__7   s*   ø€ Ü˜&¤)Ô,Ð,Ð,Ü‰ÑÑ"˜6Ò"Øˆ�r   c                 ó¾   — | j                   j                  €2| 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<   sB   € à�;‰;�>‰>Ð!Ø�K‰K×ÑÔ!Ø—;‘;—>‘>Ð-Ð-Ð-Ø�{‰{�~‰~Ðr   c                 óR   — | j                  «       r| j                  j                  S | S )z4Return the real VariableTracker if it already exists)Úis_realizedr(   r   r0   s    r   ÚunwrapzLazyVariableTracker.unwrapC   s!   € à×ÑÔØ—;‘;—>‘>Ð!Øˆr   c                 ó2   — | j                   j                  d uS r
   )r(   r   r0   s    r   r2   zLazyVariableTracker.is_realizedI   s   € Ø�{‰{�~‰~ TÐ)Ð)r   c                 ó  — |j                  d| j                  «      | j                  u sJ ‚|j                  d| j                  «      | j                  ur| j                  «        t	        j
                  | j                  «       fi |¤ŽS )Nr(   r   )Úgetr(   r   r   r   Úcloner3   )r   r-   s     r   r7   zLazyVariableTracker.cloneL   sc   € Ø�z‰z˜( D§K¡KÓ0°D·K±KÑ?Ð?Ð?Ø�:‰:�h §¡Ó,°D·K±KÑ?Ø�L‰LŒNÜ×$Ñ$ T§[¡[£]Ñ=°fÑ=Ð=r   c                 ó¤   — | j                  «       r| j                  «       j                  «       S t        j                  | j                  «       «      S r
   )r2   r3   Ú__str__r   r0   s    r   r9   zLazyVariableTracker.__str__R   s:   € Ø×ÑÔØ—;‘;“=×(Ñ(Ó*Ð*Ü×&Ñ& t§{¡{£}Ó5Ð5r   c                 ó6   — t        | j                  «       |«      S r
   ©Úgetattrr   )r   Úitems     r   Ú__getattr__zLazyVariableTracker.__getattr__W   s   € Ü�t—|‘|“~ tÓ,Ð,r   c           	      ó´  ‡ ‡— ‰€i Št        |«      }|‰v r‰|   d   S t        |«      }t        |t        «      r!‰ j	                  |j                  «       ‰«      }nìt        |t        «      r?|}|j                  }|j                  }|D ]  }||vsŒ‰ j	                  ||   ‰«      ||<   Œ! n�|t        u r |D �	cg c]  }	‰ j	                  |	‰«      ‘Œ }}	nu|t        u rt        ˆˆ fd„|D «       «      }nW|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   c              3   óB   •K  — | ]  }‰j                  |‰«      –— Œ y ­wr
   )Úrealize_all)Ú.0ÚvÚcacheÚclss     €€r   ú	<genexpr>z2LazyVariableTracker.realize_all.<locals>.<genexpr>|   s   øè ø€ ÒD¸˜3Ÿ?™?¨1¨e×4ÑDùs   ƒ)ÚidÚtypeÚ
issubclassr'   rA   r   r   Ú__dict__Ú_nonvar_fieldsÚlistÚtupleÚdictÚcollectionsÚOrderedDictÚitems)rE   r   rD   ÚidxÚ	value_clsÚresultÚ
value_dictÚnonvarsÚkeyrC   Úks   ` `        r   rA   zLazyVariableTracker.realize_all^   sU  ù€ ð ˆ=ØˆEä�‹iˆØ�%‰<Ø˜‘:˜a‘=Ð ä˜“Kˆ	Ü�iÔ!4Ô5Ø—_‘_ U§]¡]£_°eÓ<‰FÜ˜	¤?Ô3àˆFØŸ™ˆJØ×*Ñ*ˆGØ!ò N�Ø˜gÒ%Ø&)§o¡o°jÀ±oÀuÓ&M�J˜s’OñNð œ$ÑØ9>Ö?°A�c—o‘o a¨Õ/Ð?ˆFÑ?Øœ%ÑÜÔD¸eÔDÓD‰FØœ4¤×!8Ñ!8Ð9Ñ9Ü?CÀEÇKÁKÃMÓ?R×S±t°q¸!�a˜Ÿ™¨¨EÓ2Ñ2ÐSˆFÒSàˆFð ˜e�_ˆˆc‰
Øˆùò @ùó Ts   Â5EÄ#Er   r
   )r!   r"   r#   r$   r   rK   Ústaticmethodr   r   r   r3   r2   r7   Ústrr9   r>   ÚvisitÚ__repr__ÚclassmethodrA   Ú__classcell__)r.   s   @r   r'   r'   #   s‘   ø„ ñð Ð@ ×!?Ñ!?Ð@€NàñWó ðWõð
˜ó òò*ò>ð6˜ó 6ò
-ð ×!Ñ!€EØ×'Ñ'€Hàð ò%ó ô%r   r'   c                   ó,   — e Zd Zdededdfd„Zdefd„Zy)r   Úsym_node_variableÚfmt_spec_varr    Nc                 ór   — ddl m} || _        |j                  d|j	                  «       z   dz   «      | _        y )Nr   )ÚConstantVariablez{:ú})Úconstantrc   Úsym_node_varr   Úas_python_constantÚfmt_var)r   r`   ra   rc   s       r   r   z LazySymNodeFormatString.__init__ˆ   s7   € õ 	/à-ˆÔØ'×.Ñ.Ø�<×2Ñ2Ó4Ñ4°sÑ:ó
ˆ�r   c                 ó    — t         j                  | j                  j                  «       t        | j                  j                  «       «      «      S r
   )rZ   Úformatrh   rg   rf   Úevaluate_exprr0   s    r   r9   zLazySymNodeFormatString.__str__’   s:   € Ü�z‰zØ�L‰L×+Ñ+Ó-Ü�×!Ñ!×/Ñ/Ó1Ó2ó
ð 	
r   )r!   r"   r#   r   r   r   rZ   r9   r%   r   r   r   r   ‡   s+   „ ð
Ø!0ð
Ø@Oð
à	ó
ð
˜ô 
r   r   c                 ó^   ‡ — t        j                  t        t        ‰ «      «      ˆ fd„«       }|S )Nc                 óD   •—  t        | j                  «       ‰«      |i |¤ŽS r
   r;   )r   Úargsr-   Únames      €r   Úrealize_and_forwardz8_create_realize_and_forward.<locals>.realize_and_forwardš   s"   ø€ à,Œw�t—|‘|“~ tÓ,¨dÐ=°fÑ=Ð=r   )Ú	functoolsÚwrapsr<   r   )ro   rp   s   ` r   Ú_create_realize_and_forwardrs   ™   s-   ø€ Ü‡_�_”Wœ_¨dÓ3Ó4ó>ó 5ð>ð Ðr   c                  óÂ   — t         j                  j                  «       D ]>  \  } }| t        j                  vsŒt	        |«      sŒ%t        t        | t        | «      «       Œ@ y r
   )r   rJ   rQ   r'   ÚcallableÚsetattrrs   )ro   r   s     r   Ú	_populaterw   ¡   sO   € Ü&×/Ñ/×5Ñ5Ó7ò V‰ˆˆeØÔ*×3Ñ3Ò3Ü˜�ÜÔ+¨TÔ3NÈtÓ3TÕUñVr   )rO   rq   Útypingr   Úbaser   Útensorr   r   r'   r   rs   rw   r%   r   r   ú<module>r{      sI   ðã Û Ý å !Ý #÷ñ ô2a˜/ô a÷H
ñ 
ò$òVñ 
…r   