
    9i                        d dl mZ d dlZd dlZd dlZd dlmZmZ ddlm	Z	 ddl
mZmZ erd dlmZ d d	lmZ dd
lmZ  G d d          Z G d dee          Z G d d          ZddZddZ e             dS )    )annotationsN)AnyTYPE_CHECKING   )is_function_or_wrapper   )VariableTrackerVariableTrackerMeta)Callable)Self)SymNodeVariablec                  "    e Zd ZdZd
dZddZd	S )	LazyCachez+Container to cache the real VariableTrackervaluer   sourcereturnNonec                p    t          |t                    s|sJ || _        || _        d | _        d | _        d S N)
isinstanceLazySymNodeFormatStringr   r   	name_hintvt)selfr   r   s      O/var/www/icac/venv/lib/python3.11/site-packages/torch/_dynamo/variables/lazy.py__init__zLazyCache.__init__   s>    %!899 	MMM
%)*.    c                   | j         J ddlm} ddlm} |                                }t          | j        t                    r&|j	        
                    || j                  | _         n. |                    || j                  | j                  | _         | j        | j                             | j                   | `| `| `d S )Nr   )InstructionTranslatorr   )builder)r   symbolic_convertr    r    
current_txr   r   r   SourcelessBuildercreateVariableBuilderr   r   set_name_hint)r   r   r    txs       r   realizezLazyCache.realize   s    w<<<<<<"--//dj"9:: 	K/66r4:FFDGG>g--b$+>>tzJJDG>%G!!$.111JKNNNr   N)r   r   r   r   r   r   r   r   )__name__
__module____qualname____doc__r   r)    r   r   r   r      sB        55/ / / /     r   r   c                       e Zd ZdZdZdhej        Zed(d	            Zd) fdZ	d*dZ
d+dZd,dZd-dZd.dZd/dZd0dZd1dZd2dZd3d Zej        ZeZe	 d4d5d$            Zd-d%Zd0d&Zd0d'Z xZS )6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.
    T_cacher   r   r   optionsr   c                <    t          t          | |          fd|i|S )Nr   )r1   r   )r   r   r3   s      r   r%   zLazyVariableTracker.createE   s'    "9UF#;#;VVFVgVVVr   r   kwargsr   c                v    t          |t                    sJ  t                      j        di | || _        d S )Nr/   )r   r   superr   r2   )r   r2   r5   	__class__s      r   r   zLazyVariableTracker.__init__I   sA    &),,,,,""6"""r   r	   c                    | j         j        '| j                                          | j         j        J | j         j        S )z.Force construction of the real VariableTracker)r2   r   r)   r   s    r   r)   zLazyVariableTracker.realizeN   s:    ;>!K!!!;>---{~r   clstypeboolc                \    t                               ||                                           S )zNCheck isinstance after realizing, used by ImplicitRealizingVariableTrackerMeta)r<   __instancecheck__r)   )r   r;   s     r   lazy_isinstancez#LazyVariableTracker.lazy_isinstanceU   s     %%c4<<>>:::r   VariableTracker | Selfc                b    |                                  r| j        j        J | j        j        S | S )z4Return the real VariableTracker if it already exists)is_realizedr2   r   r:   s    r   unwrapzLazyVariableTracker.unwrapY   s5     	";>---;>!r   c                    | j         j        d uS r   )r2   r   r:   s    r   rC   zLazyVariableTracker.is_realized`   s    {~T))r   c                    |                     d| j                  | j        u sJ |                     d| j                  | j        ur|                                  t	          j        |                                 fi |S )Nr2   r   )getr2   r   r)   r	   clonerD   )r   r5   s     r   rH   zLazyVariableTracker.clonec   sp    zz(DK00DK????::h,,DK??LLNNN$T[[]]==f===r   	type[Any]c                `    |                                  rJ t          | j        j                  S r   )rC   r<   r2   r   r:   s    r   	peek_typezLazyVariableTracker.peek_typei   s-    ##%%%%%DK%&&&r   c                F    |                                  rJ | j        j        S r   rC   r2   r   r:   s    r   
peek_valuezLazyVariableTracker.peek_valuem   s%    ##%%%%%{  r   namestrc                    |                                  r!| j        j                            |           d S || j        _        d S r   )rC   r2   r   r'   r   )r   rO   s     r   r'   z!LazyVariableTracker.set_name_hintq   sD     	)KN((.....$(DK!!!r   c                    d}|                                  r)|dt          |                                            dz  }n|d|                                  dz  }|S )NzLazyVariableTracker(z
realized: )zunrealized: )rC   reprrD   rK   )r   variable_infos     r   __str__zLazyVariableTracker.__str__w   sj    . 	@@$t{{}}*=*=@@@@MM?DNN,<,<????Mr   itemc                F    t          |                                 |          S r   getattrr)   )r   rW   s     r   __getattr__zLazyVariableTracker.__getattr__   s    t||~~t,,,r   Ncache!dict[int, tuple[Any, Any]] | Nonec                    i t          |          }|v r|         d         S t          |          }t          |t                    r)                     |                                          }nt          |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vr\   r;   s     r   
<listcomp>z3LazyVariableTracker.realize_all.<locals>.<listcomp>   s'    ???Acooa//???r   c              3  D   K   | ]}                     |          V  d S r   r`   rb   s     r   	<genexpr>z2LazyVariableTracker.realize_all.<locals>.<genexpr>   s1      DD3??1e44DDDDDDr   c                D    i | ]\  }}|                     |          S r/   r`   )rc   krd   r\   r;   s      r   
<dictcomp>z3LazyVariableTracker.realize_all.<locals>.<dictcomp>   s-    SSStq!aE22SSSr   )idr<   
issubclassr1   ra   r)   r	   __dict___nonvar_fieldslisttupledictcollectionsOrderedDictitems)	r;   r   r\   idx	value_clsresult
value_dictnonvarskeys	   ` `      r   ra   zLazyVariableTracker.realize_all   s    =Eii%<<:a= KK	i!455 	__U]]__e<<FF	?33 	FJ*G! N Ng%%&)oojou&M&MJsON $????????FF%DDDDDeDDDDDFF4!8999SSSSStEKKMM?R?RSSSFFF e_c
r   c                    dd|                                  rJ | j        j        }t          |t                    rt          fd|D                       S  |          S )Nr   r   r   r=   c                    t          j        |           p0t          t          |           t                    pt	          |           S r   )inspect	isbuiltinrl   r<   r   )r   s    r   _helperz0LazyVariableTracker.is_hashable.<locals>._helper   s?     !%(( 1d5kk4001)%00r   c              3  .   K   | ]} |          V  d S r   r/   )rc   rd   r   s     r   rg   z2LazyVariableTracker.is_hashable.<locals>.<genexpr>   s+      11awwqzz111111r   )r   r   r   r=   )rC   r2   r   r   rp   all)r   r   r   s     @r   is_hashablezLazyVariableTracker.is_hashable   s~    	 	 	 	 ##%%%%%!eU## 	211115111111wu~~r   c                F    |                                  rJ | j        j        S r   rM   r:   s    r   original_valuez"LazyVariableTracker.original_value   s%    ##%%%%%{  r   c                F    |                                  rJ | j        j        S r   )rC   r2   r   r:   s    r   original_sourcez#LazyVariableTracker.original_source   s%    ##%%%%%{!!r   )r   r   r   r   r3   r   r   r1   )r2   r   r5   r   r   r   )r   r	   )r;   r<   r   r=   )r   rA   )r   r=   )r5   r   r   r	   )r   rI   )r   r   )rO   rP   r   r   r   rP   )rW   rP   r   r   r   )r   r   r\   r]   r   r   )r+   r,   r-   r.   _no_implicit_realizer	   rn   staticmethodr%   r   r)   r@   rD   rC   rH   rK   rN   r'   rV   r[   visit__repr__classmethodra   r   r   r   __classcell__)r8   s   @r   r1   r1   3   s          @!?@NW W W \W     
   ; ; ; ;   * * * *> > > >' ' ' '! ! ! !) ) ) )   - - - - !EH 48% % % % [%N   $! ! ! !
" " " " " " " "r   r1   )	metaclassc                      e Zd ZddZdd	Zd
S )r   sym_node_variabler   fmt_spec_varr	   r   r   c                    ddl m} || _        |                    d|                                z   dz             | _        d S )Nr   )ConstantVariablez{:})constantr   sym_node_varr%   as_python_constantfmt_var)r   r   r   r   s       r   r   z LazySymNodeFormatString.__init__   sR     	/.....-'..<22444s:
 
r   rP   c                    t                               | j                                        t          | j                                                            S r   )rP   formatr   r   r   evaluate_exprr:   s    r   r   z LazySymNodeFormatString.__repr__   sC    zzL++--!//1122
 
 	
r   N)r   r   r   r	   r   r   r   )r+   r,   r-   r   r   r/   r   r   r   r      s<        
 
 
 

 
 
 
 
 
r   r   rO   rP   r   .Callable[[LazyVariableTracker, Any, Any], Any]c                n     t          j        t          t                               d fd            }|S )	Nr   r1   argsr   r5   r   c                T     t          |                                           |i |S r   rY   )r   r   r5   rO   s      r   realize_and_forwardz8_create_realize_and_forward.<locals>.realize_and_forward   s,     -wt||~~t,,d=f===r   )r   r1   r   r   r5   r   r   r   )	functoolswrapsrZ   r	   )rO   r   s   ` r   _create_realize_and_forwardr      sJ     _W_d3344> > > > > 54>
 r   r   c                     t           j                                        D ]E\  } }| t          j        vr2t	          |          r#t          t          | t          |                      Fd S r   )r	   rm   rt   r1   callablesetattrr   )rO   r   s     r   	_populater      sm    &/5577 V Ve*333 V+T3Nt3T3TUUUV Vr   )rO   rP   r   r   r*   )
__future__r   rr   r   r}   typingr   r   utilsr   baser	   r
   collections.abcr   typing_extensionsr   tensorr   r   r1   r   r   r   r/   r   r   <module>r      s   " " " " " "          % % % % % % % % * * * * * * 6 6 6 6 6 6 6 6  (((((((&&&&&&''''''       @V" V" V" V" V"/5H V" V" V" V"r
 
 
 
 
 
 
 
$	 	 	 	V V V V 
	r   