
    i                         d dl Z d dlZd dlZd dlmZmZmZmZmZ d dl	m
Z
 ddlmZ ddlmZ ddlmZ  G d	 d
      Ze G d de             Z G d d      Zdedeeeegef   fdZddZ e        y)    N)AnyCallablefinalOptionalUnion)Self   )is_function_or_wrapper   )VariableTracker)SymNodeVariablec                   ,    e Zd ZdZdededdfdZddZy)		LazyCachez+Container to cache the real VariableTrackervaluesourcereturnNc                 d    t        |t              s|sJ || _        || _        d | _        d | _        y N)
isinstanceLazySymNodeFormatStringr   r   	name_hintvt)selfr   r   s      V/var/www/html/engine/venv/lib/python3.12/site-packages/torch/_dynamo/variables/lazy.py__init__zLazyCache.__init__   s0    %!89M6
(,-1    c                    | j                   J ddlm} ddlm} |j                         }t        | j                  t              r,|j                  j                  || j                        | _         n1 |j                  || j                        | j                        | _         | j                  %| j                   j                  | j                         | `| `| `y )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    ww<"--/djj"9://66r4::FDG>g--b$++>tzzJDG>>%GG!!$..1JKNr   r   N)__name__
__module____qualname____doc__r   r   r(    r   r   r   r      s$    52c 23 24 2r   r   c                   x    e Zd ZdZdhej
                  Zededededd fd       Zde	dedd	f fd
Z
defdZdeeef   fdZdefdZdedefdZdee   fdZdefdZdedd	fdZdef fdZdedefdZej2                  ZeZe	 ddedeeeeeef   f      defd       Z defdZ!defdZ"def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 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                 2    t        t        | |      fd|i|S )Nr   )r0   r   )r   r   r2   s      r   r$   zLazyVariableTracker.create<   s    "9UF#;VFVgVVr   kwargsNc                 V    t        |t              sJ t        |   di | || _        y )Nr.   )r   r   superr   r1   )r   r1   r4   	__class__s      r   r   zLazyVariableTracker.__init__@   s*    &),,,"6"r   c                     | j                   j                  2| j                   j                          | j                   j                  J | j                   j                  S )z.Force construction of the real VariableTracker)r1   r   r(   r   s    r   r(   zLazyVariableTracker.realizeE   sB    ;;>>!KK!;;>>---{{~~r   c                     | j                         r.| j                  j                  J | j                  j                  S | S )z4Return the real VariableTracker if it already exists)is_realizedr1   r   r9   s    r   unwrapzLazyVariableTracker.unwrapL   s5    ;;>>---;;>>!r   c                 2    | j                   j                  d uS r   )r1   r   r9   s    r   r;   zLazyVariableTracker.is_realizedS   s    {{~~T))r   c                    |j                  d| j                        | j                  u sJ |j                  d| j                        | j                  ur| j                          t	        j
                  | j                         fi |S )Nr1   r   )getr1   r   r(   r   cloner<   )r   r4   s     r   r@   zLazyVariableTracker.cloneV   sc    zz(DKK0DKK???::h,DKK?LLN$$T[[]=f==r   c                 d    | j                         rJ t        | j                  j                        S r   )r;   typer1   r   r9   s    r   	peek_typezLazyVariableTracker.peek_type\   s)    ##%%%DKK%%&&r   c                 R    | j                         rJ | j                  j                  S r   r;   r1   r   r9   s    r   
peek_valuezLazyVariableTracker.peek_value`   s$    ##%%%{{   r   namec                     | j                         r&| j                  j                  j                  |       y || j                  _        y r   )r;   r1   r   r&   r   )r   rG   s     r   r&   z!LazyVariableTracker.set_name_hintd   s0    KKNN((.$(DKK!r   c                 r    | j                         rt        | j                               S t        |          S r   )r;   reprr<   r6   __repr__)r   r7   s    r   __str__zLazyVariableTracker.__str__j   s.    &&w!!r   itemc                 6    t        | j                         |      S r   getattrr(   )r   rM   s     r   __getattr__zLazyVariableTracker.__getattr__o   s    t||~t,,r   cachec           	          i t        |      }|v r|   d   S t        |      }t        |t              r! j	                  |j                               }nt        |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vrR   clss     r   	<genexpr>z2LazyVariableTracker.realize_all.<locals>.<genexpr>   s     D3??1e4Ds   )idrB   
issubclassr0   rU   r(   r   __dict___nonvar_fieldslisttupledictcollectionsOrderedDictitems)rX   r   rR   idx	value_clsresult
value_dictnonvarskeyrW   ks   ` `        r   rU   zLazyVariableTracker.realize_allv   sU    =Ei%<:a= K	i!45__U]]_e<F	?3FJ**G! Ng%&)oojou&MJsON $9>?Acooa/?F?%DeDDF4!8!899?CEKKM?RStq!aE22SFSF e_c
 @ Ts   5E#Ec                     dt         dt        fd| j                         rJ | j                  j                  }t        |t              rt        fd|D              S  |      S )Nr   r   c                 |    t        j                  |       xs& t        t        |       t              xs t	        |       S r   )inspect	isbuiltinr[   rB   r
   )r   s    r   _helperz0LazyVariableTracker.is_hashable.<locals>._helper   s7     !!%( 1d5k401)%0r   c              3   .   K   | ]  } |        y wr   r.   )rV   rW   ro   s     r   rY   z2LazyVariableTracker.is_hashable.<locals>.<genexpr>   s     1awqz1s   )r   boolr;   r1   r   r   r_   all)r   r   ro   s     @r   is_hashablezLazyVariableTracker.is_hashable   s^    	3 	4 	 ##%%%!!eU#15111u~r   c                 R    | j                         rJ | j                  j                  S r   rE   r9   s    r   original_valuez"LazyVariableTracker.original_value   s$    ##%%%{{   r   c                 R    | j                         rJ | j                  j                  S r   )r;   r1   r   r9   s    r   original_sourcez#LazyVariableTracker.original_source   s$    ##%%%{{!!!r   r   )%r*   r+   r,   r-   r   r]   staticmethodr   r$   r   r   r(   r   r   r<   rq   r;   r@   rB   rC   rF   strr&   rL   rQ   visitrK   classmethodr   r`   intr_   rU   rs   ru   rw   __classcell__)r7   s   @r   r0   r0   +   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   r0   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{:})constantr   sym_node_varr$   as_python_constantfmt_var)r   r   r   r   s       r   r   z LazySymNodeFormatString.__init__   s7     	/-'..<2244s:
r   c                     t         j                  | j                  j                         t        | j                  j                                     S r   )ry   formatr   r   r   evaluate_exprr9   s    r   rK   z LazySymNodeFormatString.__repr__   s:    zzLL++-!!//12
 	
r   )r*   r+   r,   r   r   r   ry   rK   r.   r   r   r   r      s+    
!0
@O
	

# 
r   r   rG   r   c           	           t        j                  t        t                     dt        dt
        dt
        dt
        f fd       }|S )Nr   argsr4   r   c                 D     t        | j                               |i |S r   rO   )r   r   r4   rG   s      r   realize_and_forwardz8_create_realize_and_forward.<locals>.realize_and_forward   s$     -wt||~t,d=f==r   )	functoolswrapsrP   r   r0   r   )rG   r   s   ` r   _create_realize_and_forwardr      sO     __W_d34>!>*->9<>	> 5>
 r   c                      t         j                  j                         D ]>  \  } }| t        j                  vst	        |      s%t        t        | t        |              @ y r   )r   r\   rc   r0   callablesetattrr   )rG   r   s     r   	_populater      sO    &//557 Ve*333+T3Nt3TUVr   r)   )ra   r   rm   typingr   r   r   r   r   typing_extensionsr   utilsr
   baser   tensorr   r   r0   r   ry   r   r   r.   r   r   <module>r      s       8 8 " * ! # > L"/ L" L"^
 
$	
	"C-s23	V 
r   