
    N j)                       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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      m/root/GenerationalWealth/GenerationalWealth/venv/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         O/UR                  X0R                  SS9" U R                  5      U l         U R                  b%  U R                   R                  U R                  5        U ?U ?U ?g )Nr   InstructionTranslatorr   )builderFallow_lazy_constant)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
 --KKU . jjDG >>%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                  4  ^  \ 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.       S%S jjj5       rSS jrS S jrS S jrSrU =r$ )&LazyVariableTracker7   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                h   [        U 5      [        R                  ;   a  [        R                  " X40 UD6$ Ube  U(       d^  SSKJn  UR                  5       nUbE  UR                  R                  nUR                  U5      nUb  U$ [        [        X5      US9nXuU'   U$ [        [        X5      4SU0UD6$ )Nr   r   )r   r   )typeLazyConstantVariablesupported_typesr(   r$   r    r&   outputvariable_tracker_cachegetr9   r   )r   r   optionsr    r+   cachecachedr   s           r   r(   LazyVariableTracker.createI   s    ;.>>>'..uHHH g@&113B~		886*%!M(5)A&Q "f	"9U#;VFVgVVr   c                `   > [        U[        5      (       d   e[        TU ]  " S0 UD6  Xl        g )Nr7   )r   r   superr   r;   )r   r;   kwargs	__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)r;   r   r,   r   s    r   r,   LazyVariableTracker.realizec   sB    ;;>>!KK!;;>>---{{~~r   c                H    [         R                  XR                  5       5      $ )zNCheck isinstance after realizing, used by ImplicitRealizingVariableTrackerMeta)r=   __instancecheck__r,   )r   clss     r   lazy_isinstance#LazyVariableTracker.lazy_isinstancej   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_realizedr;   r   rM   s    r   unwrapLazyVariableTracker.unwrapn   s8    ;;>>---;;>>!r   c                2    U R                   R                  S L$ r   )r;   r   rM   s    r   rU   LazyVariableTracker.is_realizedu   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$ )Nr;   r   )rB   r;   r   r,   r	   clonerV   )r   rI   s     r   r[   LazyVariableTracker.clonex   sc    zz(DKK0DKK???::h,DKK?LLN$$T[[]=f==r   c                n    U R                  5       (       a   e[        U R                  R                  5      $ r   )rU   r=   r;   r   rM   s    r   	peek_typeLazyVariableTracker.peek_type~   s,    ##%%%%DKK%%&&r   c                \    U R                  5       (       a   eU R                  R                  $ r   rU   r;   r   rM   s    r   
peek_valueLazyVariableTracker.peek_value   s'    ##%%%%{{   r   c                    U R                  5       (       a&  U R                  R                  R                  U5        g XR                  l        g r   )rU   r;   r   r*   r   )r   names     r   r*   !LazyVariableTracker.set_name_hint   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: )rU   reprrV   r^   )r   variable_infos     r   __str__LazyVariableTracker.__str__   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   Fr"   c               6  ^ ^^ Tc  0 m[        U5      nUT;   a  TU   S   $ [        U5      n[        U[        5      (       aE  T=(       a    [	        U[
        5      nU(       a  UnGO"T R                  UR                  5       TTS9nGO[        U[        5      (       aF  UnXq4TU'   UR                  nUR                  n	U H  n
X;  d  M
  T R                  X   TTS9X'   M!     OU[        L a"  U Vs/ s H  nT R                  UTTS9PM     nnO{U[        L a  [        UUU 4S jU 5       5      nOZU[        [        R                  4;   a>  [        UR!                  5       5       VVs0 s H  u  pUT R                  UTTS9_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   r"   c              3  F   >#    U  H  nTR                  UTTS 9v   M     g7f)r"   N)realize_all).0vr#   rD   rQ   s     r   	<genexpr>2LazyVariableTracker.realize_all.<locals>.<genexpr>   s(      A 5>QRs   !)idr=   
issubclassr9   r   r>   ru   r,   r	   __dict___nonvar_fieldslisttupledictcollectionsOrderedDictitems)rQ   r   rD   r#   idx	value_cls	keep_lazyresult
value_dictnonvarskeyrw   ks   ` ``         r   ru   LazyVariableTracker.realize_all   s    =Ei%<:a= K	i!455+W
5BV0WIMMOU@S )  	?33F E#JJ**G!%&)oo"DW '6 'JO "
 $ A 5>QR  F %  F 4!8!899 !//DA 3??1eAT?UU/  F
 F _c
's   /F$F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	isbuiltinr{   r=   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   r7   )rv   rw   r   s     r   rx   2LazyVariableTracker.is_hashable.<locals>.<genexpr>   s     15awqzz5s   )r   r   r.   bool)rU   r;   r   r   r   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   ra   rM   s    r   original_value"LazyVariableTracker.original_value   s'    ##%%%%{{   r   c                \    U R                  5       (       a   eU R                  R                  $ r   )rU   r;   r   rM   s    r   original_source#LazyVariableTracker.original_source   s'    ##%%%%{{!!!r   )r;   )r   r   r   r   rC   r   r.   r	   )r;   r   rI   r   r.   r/   )r.   r	   )rQ   r=   r.   r   )r.   zVariableTracker | Self)r.   r   )rI   r   r.   r	   )r.   z	type[Any])r.   r   )re   strr.   r/   r.   r   )rp   r   r.   r   r   )r   r   rD   z!dict[int, tuple[Any, Any]] | Noner#   r   r.   r   )r1   r2   r3   r4   r5   _no_implicit_realizer	   r}   staticmethodr(   r   r,   rR   rV   rU   r[   r^   rb   r*   rk   rq   visit__repr__classmethodru   r   r   r   r6   __classcell__)rJ   s   @r   r9   r9   7   s      @!?!?@NW W(
;*>'!)- !!EH 48;
 %*;; 1;
 "; 
; ;z$!
" "r   r9   )	metaclassc                  H    \ rS rSrSr\\\\4r	\
        SS j5       rSrg)r>      a=  
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.
c                n    [        U 5      [        R                  ;   d   e[        [        X5      4SU0UD6$ )Nr   )r=   r>   r?   r   )r   r   rC   s      r   r(   LazyConstantVariable.create  s7     E{2BBBBB#Ie$<WVWwWWr   r7   N)r   r   r   r   rC   r   r.   r>   )r1   r2   r3   r4   r5   intfloatr   r   r?   r   r(   r6   r7   r   r   r>   r>      sS     E4-OXXX X 
	X Xr   r>   c                  4    \ rS rSr      SS jrSS jrSrg)r   i  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_exprrM   s    r   r    LazySymNodeFormatString.__repr__  s:    zzLL++-!!//12
 	
r   )r   r   N)r   r   r   r	   r.   r/   r   )r1   r2   r3   r4   r   r   r6   r7   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   rn   )r   argsrI   re   s      r   realize_and_forward8_create_realize_and_forward.<locals>.realize_and_forward"  s"     t||~t,d=f==r   )r   r9   r   r   rI   r   r.   r   )	functoolswrapsro   r	   )re   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	   r|   r   r9   callablesetattrr   )re   r   s     r   	_populater   +  sH    &//557*333+T3Nt3TU 8r   )re   r   r.   z.Callable[[LazyVariableTracker, Any, Any], Any]r0   )
__future__r   r   r   r   typingr   r   utilsr   baser	   r
   collections.abcr   typing_extensionsr   tensorr   r   r9   r>   r   r   r   r7   r   r   <module>r      s    "    % * 6 (&'! !H}"/5H }"@X. X,
 
$	
	3	V 
r   