
    קg,                         d dl Z d dlZd dlmZ ddlmZ ddlmZ  G d d          Z G d d	e          Z	 G d
 d          Z
d Zd Z e             dS )    N)Optional   )VariableTracker)SymNodeVariablec                        e Zd ZdZddZd ZdS )	LazyCachez+Container to cache the real VariableTrackerreturnNc                 b    t          |t                    s|sJ || _        || _        d | _        d S N)
isinstanceLazySymNodeFormatStringvaluesourcevt)selfr   r   s      X/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/_dynamo/variables/lazy.py__init__zLazyCache.__init__   s7    %!899 	MMM
-1    c                 "   | j         J ddlm} ddlm}m} |                                }t          | j        t                    r!|
                    || j                  | _         n$  ||| j                  | j                  | _         | `| `d S )N   )InstructionTranslatorr   )SourcelessBuilderVariableBuilder)r   symbolic_convertr   builderr   r   
current_txr   r   r   creater   )r   r   r   r   txs        r   realizezLazyCache.realize   s    w<<<<<<????????"--//dj"9:: 	C'..r4:>>DGG6oob$+66tzBBDGJKKKr   r	   N)__name__
__module____qualname____doc__r   r    r   r   r   r   
   s=        552 2 2 2    r   r   c                        e Zd ZdZdhej        Zed             Zd fdZdefdZ	d Z
d	 Zd
 ZdefdZd Zej        Zej        Ze	 d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 VariableBuilder 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.
    _cachec                 <    t          t          | |          fd|i|S )Nr   )r'   r   )r   r   optionss      r   r   zLazyVariableTracker.create3   s'    "9UF#;#;VVFVgVVVr   r	   Nc                 v    t          |t                    sJ  t                      j        di | || _        d S )Nr%   )r   r   superr   r(   )r   r(   kwargs	__class__s      r   r   zLazyVariableTracker.__init__7   sA    &),,,,,""6"""r   c                     | j         j        '| j                                          | j         j        J | j         j        S )z.Force construction of the real VariableTracker)r(   r   r   r   s    r   r   zLazyVariableTracker.realize<   s:    ;>!K!!!;>---{~r   c                 F    |                                  r| j        j        S | S )z4Return the real VariableTracker if it already exists)is_realizedr(   r   r0   s    r   unwrapzLazyVariableTracker.unwrapC   s%     	";>!r   c                     | j         j        d uS r   )r(   r   r0   s    r   r2   zLazyVariableTracker.is_realizedI   s    {~T))r   c                     |                     d| j                  | j        u sJ |                     d| j                  | j        ur|                                  t	          j        |                                 fi |S )Nr(   r   )getr(   r   r   r   cloner3   )r   r-   s     r   r7   zLazyVariableTracker.cloneL   sp    zz(DK00DK????::h,,DK??LLNNN$T[[]]==f===r   c                     |                                  r&|                                                                 S t          j        |                                           S r   )r2   r3   __str__r   r0   s    r   r9   zLazyVariableTracker.__str__R   sI     	+;;==((***&t{{}}555r   c                 F    t          |                                 |          S r   getattrr   )r   items     r   __getattr__zLazyVariableTracker.__getattr__W   s    t||~~t,,,r   c                     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vcacheclss     r   
<listcomp>z3LazyVariableTracker.realize_all.<locals>.<listcomp>z   s'    ???Acooa//???r   c              3   D   K   | ]}                     |          V  d S r   rA   rC   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%   rA   )rD   krE   rF   rG   s      r   
<dictcomp>z3LazyVariableTracker.realize_all.<locals>.<dictcomp>~   s-    SSStq!aE22SSSr   )idtype
issubclassr'   rB   r   r   __dict___nonvar_fieldslisttupledictcollectionsOrderedDictitems)	rG   r   rF   idx	value_clsresult
value_dictnonvarskeys	   ` `      r   rB   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   r    r   )r!   r"   r#   r$   r   rR   staticmethodr   r   r   r3   r2   r7   strr9   r>   visit__repr__classmethodrB   __classcell__)r.   s   @r   r'   r'   #   s         @!?@NW W \W     
      * * *> > >6 6 6 6 6
- - - !E'H % % % [% % % % %r   r'   c                   .    e Zd ZdededdfdZdefdZdS )r   sym_node_variablefmt_spec_varr	   Nc                     ddl m} || _        |                    d|                                z   dz             | _        d S )Nr   )ConstantVariablez{:})constantri   sym_node_varr   as_python_constantfmt_var)r   rf   rg   ri   s       r   r   z LazySymNodeFormatString.__init__   sR     	/.....-'..<22444s:
 
r   c                     t                               | j                                        t          | j                                                            S r   )r`   formatrn   rm   rl   evaluate_exprr0   s    r   r9   zLazySymNodeFormatString.__str__   sC    zzL++--!//1122
 
 	
r   )r!   r"   r#   r   r   r   r`   r9   r%   r   r   r   r      s[        
!0
@O
	
 
 
 

 
 
 
 
 
 
r   r   c                 l     t          j        t          t                                fd            }|S )Nc                 T     t          |                                           |i |S r   r;   )r   argsr-   names      r   realize_and_forwardz8_create_realize_and_forward.<locals>.realize_and_forward   s*    ,wt||~~t,,d=f===r   )	functoolswrapsr<   r   )ru   rv   s   ` r   _create_realize_and_forwardry      sC    _W_d3344> > > > 54> r   c                      t           j                                        D ]E\  } }| t          j        vr2t	          |          r#t          t          | t          |                      Fd S r   )r   rQ   rX   r'   callablesetattrry   )ru   r   s     r   	_populater}      sm    &/5577 V Ve*333 V+T3Nt3T3TUUUV Vr   )rV   rw   typingr   baser   tensorr   r   r'   r   ry   r}   r%   r   r   <module>r      s                 ! ! ! ! ! ! # # # # # #       2a a a a a/ a a aH
 
 
 
 
 
 
 
$  V V V 
	r   