
    9i                         S SK r S SKrS SKrS SKJrJrJrJrJr  S SK	J
r
  SSKJr  SSKJr  SSKJr   " S	 S
5      r\ " S S\5      5       r " S S5      rS\S\\\\/\4   4S jrSS jr\" 5         g)    N)AnyCallablefinalOptionalUnion)Self   )is_function_or_wrapper   )VariableTracker)SymNodeVariablec                   8    \ rS rSrSrS\S\SS4S jrS
S jrS	rg)	LazyCache   z+Container to cache the real VariableTrackervaluesourcereturnNc                 t    [        U[        5      (       d	  U(       d   eXl        X l        S U l        S U l        g N)
isinstanceLazySymNodeFormatStringr   r   	name_hintvt)selfr   r   s      \/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/torch/_dynamo/variables/lazy.py__init__LazyCache.__init__   s/    %!899M6
(,-1    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   r   N)	__name__
__module____qualname____firstlineno____doc__r   r   r*   __static_attributes__ r   r   r   r      s$    52c 23 24 2r   r   c                     ^  \ rS rSrSrS1\R                  kr\S\S\S\SS 4S j5       r	S\
S	\SS
4U 4S jjrS\4S jrS\\\4   4S jrS\4S jrS	\S\4S jrS\\   4S jrS\4S jrS\SS
4S jrS\4U 4S jjrS\S\4S jr\R4                  r\r\ SS\S\\\\ \\4   4      S\4S jj5       r!S\4S jr"S\4S jr#S\4S jr$Sr%U =r&$ )LazyVariableTracker+   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.
_cacher   r   optionsr   c                 0    [        [        X5      4SU0UD6$ )Nr   )r5   r   )r   r   r8   s      r   r&   LazyVariableTracker.create<   s    "9U#;VFVgVVr   kwargsNc                 `   > [        U[        5      (       d   e[        TU ]  " S0 UD6  Xl        g )Nr3   )r   r   superr   r7   )r   r7   r;   	__class__s      r   r   LazyVariableTracker.__init__@   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)r7   r   r*   r   s    r   r*   LazyVariableTracker.realizeE   sB    ;;>>!KK!;;>>---{{~~r   c                     U R                  5       (       a/  U R                  R                  c   eU R                  R                  $ U $ )z4Return the real VariableTracker if it already exists)is_realizedr7   r   rA   s    r   unwrapLazyVariableTracker.unwrapL   s8    ;;>>---;;>>!r   c                 2    U R                   R                  S L$ r   )r7   r   rA   s    r   rD   LazyVariableTracker.is_realizedS   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$ )Nr7   r   )getr7   r   r*   r   clonerE   )r   r;   s     r   rK   LazyVariableTracker.cloneV   sc    zz(DKK0DKK???::h,DKK?LLN$$T[[]=f==r   c                 n    U R                  5       (       a   e[        U R                  R                  5      $ r   )rD   typer7   r   rA   s    r   	peek_typeLazyVariableTracker.peek_type\   s,    ##%%%%DKK%%&&r   c                 \    U R                  5       (       a   eU R                  R                  $ r   rD   r7   r   rA   s    r   
peek_valueLazyVariableTracker.peek_value`   s'    ##%%%%{{   r   namec                     U R                  5       (       a&  U R                  R                  R                  U5        g XR                  l        g r   )rD   r7   r   r(   r   )r   rU   s     r   r(   !LazyVariableTracker.set_name_hintd   s1    KKNN((.$(KK!r   c                 |   > U R                  5       (       a  [        U R                  5       5      $ [        TU ]  5       $ r   )rD   reprrE   r=   __repr__)r   r>   s    r   __str__LazyVariableTracker.__str__j   s1    &&w!!r   itemc                 6    [        U R                  5       U5      $ r   getattrr*   )r   r]   s     r   __getattr__LazyVariableTracker.__getattr__o   s    t||~t,,r   cachec           	        ^ ^ 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vrc   clss     r   	<genexpr>2LazyVariableTracker.realize_all.<locals>.<genexpr>   s     De3??1e44es   ")idrN   
issubclassr5   rf   r*   r   __dict___nonvar_fieldslisttupledictcollectionsOrderedDictitems)ri   r   rc   idx	value_clsresult
value_dictnonvarskeyrh   ks   ` `        r   rf   LazyVariableTracker.realize_allv   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[        4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      $ )Nr   r   c                     [         R                  " U 5      =(       d+    [        [        U 5      [        5      =(       d    [	        U 5      $ r   )inspect	isbuiltinrm   rN   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   r3   )rg   rh   r   s     r   rj   2LazyVariableTracker.is_hashable.<locals>.<genexpr>   s     15awqzz5s   )r   boolrD   r7   r   r   rq   all)r   r   r   s     @r   is_hashableLazyVariableTracker.is_hashable   sd    	3 	4 	 ##%%%%!!eU##15111u~r   c                 \    U R                  5       (       a   eU R                  R                  $ r   rR   rA   s    r   original_value"LazyVariableTracker.original_value   s'    ##%%%%{{   r   c                 \    U R                  5       (       a   eU R                  R                  $ r   )rD   r7   r   rA   s    r   original_source#LazyVariableTracker.original_source   s'    ##%%%%{{!!!r   )r7   r   )'r-   r.   r/   r0   r1   r   ro   staticmethodr   r&   r   r   r*   r   r   rE   r   rD   rK   rN   rO   rS   strr(   r[   ra   visitrZ   classmethodr   rr   intrq   rf   r   r   r   r2   __classcell__)r>   s   @r   r5   r5   +   s    @!?!?@NWc W3 W3 W;P W Wy C D 
 ot34 *T *>c >o >'49 '!C !)# )$ )" "
- - - !!EH 7;%% S%S/123% 
	% %NT $! !
" " "r   r5   c                   8    \ rS rSrS\S\SS4S jrS\4S jrSr	g)	r      sym_node_variablefmt_spec_varr   Nc                 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   r   r   r   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_exprrA   s    r   rZ    LazySymNodeFormatString.__repr__   s:    zzLL++-!!//12
 	
r   )r   r   )
r-   r.   r/   r0   r   r   r   r   rZ   r2   r3   r   r   r   r      s+    
!0
@O
	

# 
r   r   rU   r   c           	         ^  [         R                  " [        [        T 5      5      S[        S[
        S[
        S[
        4U 4S jj5       nU$ )Nr   argsr;   r   c                 D   > [        U R                  5       T5      " U0 UD6$ r   r_   )r   r   r;   rU   s      r   realize_and_forward8_create_realize_and_forward.<locals>.realize_and_forward   s"     t||~t,d=f==r   )	functoolswrapsr`   r   r5   r   )rU   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   rn   ru   r5   callablesetattrr   )rU   r   s     r   	_populater      sH    &//557*333+T3Nt3TU 8r   r,   )rs   r   r   typingr   r   r   r   r   typing_extensionsr   utilsr
   baser   tensorr   r   r5   r   r   r   r   r3   r   r   <module>r      s       8 8 " * ! # > L"/ L" L"^
 
$	
	"C-s23	V 
r   