
    ȅiX                        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 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      V/home/james-whalen/.local/lib/python3.13/site-packages/torch/_dynamo/variables/lazy.py__init__LazyCache.__init__   s/    %!899M6
%)*.    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         O0UR                  X0R                  5      " U R                  5      U l         U R                  b%  U R                   R                  U R                  5        U ?U ?U ?g )Nr   )InstructionTranslatorr   )builder)r   symbolic_convertr    r    
current_txr   r   r   SourcelessBuildercreateVariableBuilderr   r   set_name_hint)r   r   r    txs       r   realizeLazyCache.realize   s    ww<"--/djj"9:://66r::FDG--b++>tzzJDG>>%GG!!$..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                  (  ^  \ 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 jj5       rSS jrSS jrSS jrSrU =r$ )$LazyVariableTracker2   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                0    [        [        X5      4SU0UD6$ )Nr   )r6   r   )r   r   optionss      r   r%   LazyVariableTracker.createD   s    "9U#;VFVgVVr   c                `   > [        U[        5      (       d   e[        TU ]  " S0 UD6  Xl        g )Nr4   )r   r   superr   r8   )r   r8   kwargs	__class__s      r   r   LazyVariableTracker.__init__H   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)r8   r   r)   r   s    r   r)   LazyVariableTracker.realizeM   sB    ;;>>!KK!;;>>---{{~~r   c                H    [         R                  XR                  5       5      $ )zNCheck isinstance after realizing, used by ImplicitRealizingVariableTrackerMeta)type__instancecheck__r)   )r   clss     r   lazy_isinstance#LazyVariableTracker.lazy_isinstanceT   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_realizedr8   r   rB   s    r   unwrapLazyVariableTracker.unwrapX   s8    ;;>>---;;>>!r   c                2    U R                   R                  S L$ r   )r8   r   rB   s    r   rK   LazyVariableTracker.is_realized_   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$ )Nr8   r   )getr8   r   r)   r	   clonerL   )r   r>   s     r   rR   LazyVariableTracker.cloneb   sc    zz(DKK0DKK???::h,DKK?LLN$$T[[]=f==r   c                n    U R                  5       (       a   e[        U R                  R                  5      $ r   )rK   rE   r8   r   rB   s    r   	peek_typeLazyVariableTracker.peek_typeh   s,    ##%%%%DKK%%&&r   c                \    U R                  5       (       a   eU R                  R                  $ r   rK   r8   r   rB   s    r   
peek_valueLazyVariableTracker.peek_valuel   s'    ##%%%%{{   r   c                    U R                  5       (       a&  U R                  R                  R                  U5        g XR                  l        g r   )rK   r8   r   r'   r   )r   names     r   r'   !LazyVariableTracker.set_name_hintp   s1    KKNN((.$(KK!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: )rK   reprrL   rU   )r   variable_infos     r   __str__LazyVariableTracker.__str__v   s`    .z$t{{}*=)>a@@M  |DNN,<+=Q??Mr   c                6    [        U R                  5       U5      $ r   getattrr)   )r   items     r   __getattr__LazyVariableTracker.__getattr__   s    t||~t,,r   c           	       ^ ^ Tc  0 m[        U5      nUT;   a  TU   S   $ [        U5      n[        U[        5      (       a!  T R	                  UR                  5       T5      nO[        U[        5      (       aA  UnUR                  nUR                  nU H   nX;  d  M
  T R	                  Xh   T5      Xh'   M"     OU[        L a#  U V	s/ s H  n	T R	                  U	T5      PM     nn	O{U[        L a  [        UU 4S jU 5       5      nO[U[        [        R                  4;   a?  [        UR                  5       5       V
V	s0 s H  u  pU
T R	                  U	T5      _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   c              3  H   >#    U  H  nTR                  UT5      v   M     g 7fr   )realize_all).0vcacherG   s     r   	<genexpr>2LazyVariableTracker.realize_all.<locals>.<genexpr>   s     De3??1e44es   ")idrE   
issubclassr6   rl   r)   r	   __dict___nonvar_fieldslisttupledictcollectionsOrderedDictitems)rG   r   ro   idx	value_clsresult
value_dictnonvarskeyrn   ks   ` `        r   rl   LazyVariableTracker.realize_all   sR    =Ei%<:a= K	i!455__U]]_e<F	?33FJ**G!%&)oojou&MJO " $9>?Acooa/F?F%DeDDF4!8!899?CEKKM?RS?RtqaE22?RFSFF _c
 @ Ts   E':E,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	isbuiltinrs   rE   r   )r   s    r   _helper0LazyVariableTracker.is_hashable.<locals>._helper   s7     !!%( 1d5k401)%0r   c              3  4   >#    U  H  nT" U5      v   M     g 7fr   r4   )rm   rn   r   s     r   rp   2LazyVariableTracker.is_hashable.<locals>.<genexpr>   s     15awqzz5s   )r   r   r+   bool)rK   r8   r   r   rw   all)r   r   r   s     @r   is_hashableLazyVariableTracker.is_hashable   sV    	 ##%%%%!!eU##15111u~r   c                \    U R                  5       (       a   eU R                  R                  $ r   rX   rB   s    r   original_value"LazyVariableTracker.original_value   s'    ##%%%%{{   r   c                \    U R                  5       (       a   eU R                  R                  $ r   )rK   r8   r   rB   s    r   original_source#LazyVariableTracker.original_source   s'    ##%%%%{{!!!r   )r8   )r   r   r   r   r:   r   r+   r6   )r8   r   r>   r   r+   r,   )r+   r	   )rG   rE   r+   r   )r+   zVariableTracker | Self)r+   r   )r>   r   r+   r	   )r+   z	type[Any])r+   r   )r\   strr+   r,   r+   r   )rg   r   r+   r   r   )r   r   ro   z!dict[int, tuple[Any, Any]] | Noner+   r   )r.   r/   r0   r1   r2   _no_implicit_realizer	   ru   staticmethodr%   r   r)   rH   rL   rK   rR   rU   rY   r'   rb   rh   visit__repr__classmethodrl   r   r   r   r3   __classcell__)r?   s   @r   r6   r6   2   s      @!?!?@NW W
;*>'!)- !!EH 48%% 1% 
	% %N$!
" "r   r6   )	metaclassc                  4    \ rS rSr      SS jrSS jrSrg)r      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4s:
r   c                    [         R                  U R                  R                  5       [        U R                  R                  5       5      5      $ r   )r   formatr   r   r   evaluate_exprrB   s    r   r    LazySymNodeFormatString.__repr__   s:    zzLL++-!!//12
 	
r   )r   r   N)r   r   r   r	   r+   r,   r   )r.   r/   r0   r1   r   r   r3   r4   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   re   )r   argsr>   r\   s      r   realize_and_forward8_create_realize_and_forward.<locals>.realize_and_forward   s"     t||~t,d=f==r   )r   r6   r   r   r>   r   r+   r   )	functoolswrapsrf   r	   )r\   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	   rt   r{   r6   callablesetattrr   )r\   r   s     r   	_populater      sH    &//557*333+T3Nt3TU 8r   )r\   r   r+   z.Callable[[LazyVariableTracker, Any, Any], Any]r-   )
__future__r   ry   r   r   typingr   r   utilsr   baser	   r
   collections.abcr   typing_extensionsr   tensorr   r   r6   r   r   r   r4   r   r   <module>r      sp    "    % * 6 (&' >V"/5H V"r
 
$	
	3	V 
r   