
    /j)                       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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      a/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/torch/_dynamo/variables/lazy.py__init__zLazyCache.__init__   s>    %!899 	MM6
%)*.    c                   | j         J ddlm} ddlm} |                                }t          | j        t                    r&|j	        
                    || j                  | _         n0 |                    || j        d          | j                  | _         | j        | j                             | j                   | `| `| `d S )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   realizezLazyCache.realize   s    w<<<<<<"--//dj"9:: 	/66r4:FFDGG
g--DKU .  j DG >%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d0dZd1dZd2dZd3dZd4dZd5dZd6d Zej        ZeZe	 d7d"d#d8d'            Zd0d(Zd3d)Zd3d*Z xZS )9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   r	   c                n   t          |           t          j        v rt          j        | |fi |S |i|sgddlm} |                                }|K|j        j        }|	                    |          }||S t          t          | |          |          }|||<   |S t          t          | |          fd|i|S )Nr   r   )r   r   )typeLazyConstantVariablesupported_typesr(   r$   r    r&   outputvariable_tracker_cachegetr4   r   )r   r   r6   r    r+   cachecachedr   s           r   r(   zLazyVariableTracker.createI   s    ;;.>>>'.ufHHHHH g@@@@@@&1133B~	86**%!M(5&)A)A&QQQ "f	"9UF#;#;VVFVgVVVr   r   kwargsr   c                v    t          |t                    sJ  t                      j        di | || _        d S )Nr2   )r   r   superr   r5   )r   r5   r@   	__class__s      r   r   zLazyVariableTracker.__init__^   sA    &),,,,,""6"""r   c                    | j         j        '| j                                          | j         j        J | j         j        S )z.Force construction of the real VariableTracker)r5   r   r,   r   s    r   r,   zLazyVariableTracker.realizec   s:    ;>!K!!!;>---{~r   clsr8   boolc                \    t                               ||                                           S )zNCheck isinstance after realizing, used by ImplicitRealizingVariableTrackerMeta)r8   __instancecheck__r,   )r   rF   s     r   lazy_isinstancez#LazyVariableTracker.lazy_isinstancej   s     %%c4<<>>:::r   VariableTracker | Selfc                b    |                                  r| j        j        J | j        j        S | S )z4Return the real VariableTracker if it already exists)is_realizedr5   r   rE   s    r   unwrapzLazyVariableTracker.unwrapn   s5     	";>---;>!r   c                    | j         j        d uS r   )r5   r   rE   s    r   rM   zLazyVariableTracker.is_realizedu   s    {~T))r   c                    |                     d| j                  | j        u sJ |                     d| j                  | j        ur|                                  t	          j        |                                 fi |S )Nr5   r   )r=   r5   r   r,   r	   clonerN   )r   r@   s     r   rQ   zLazyVariableTracker.clonex   sp    zz(DK00DK????::h,,DK??LLNNN$T[[]]==f===r   	type[Any]c                `    |                                  rJ t          | j        j                  S r   )rM   r8   r5   r   rE   s    r   	peek_typezLazyVariableTracker.peek_type~   s-    ##%%%%%DK%&&&r   c                F    |                                  rJ | j        j        S r   rM   r5   r   rE   s    r   
peek_valuezLazyVariableTracker.peek_value   s%    ##%%%%%{  r   namestrc                    |                                  r!| j        j                            |           d S || j        _        d S r   )rM   r5   r   r*   r   )r   rX   s     r   r*   z!LazyVariableTracker.set_name_hint   sD     	)KN((.....$(DK!!!r   c                    d}|                                  r)|dt          |                                            dz  }n|d|                                  dz  }|S )NzLazyVariableTracker(z
realized: )zunrealized: )rM   reprrN   rT   )r   variable_infos     r   __str__zLazyVariableTracker.__str__   sj    . 	@@$t{{}}*=*=@@@@MM?DNN,<,<????Mr   itemc                F    t          |                                 |          S r   getattrr,   )r   r`   s     r   __getattr__zLazyVariableTracker.__getattr__   s    t||~~t,,,r   NFr"   r>   !dict[int, tuple[Any, Any]] | Noner#   c                   i t          |          }|v r|         d         S t          |          }t          |t                    rHot	          |t
                    }|r|}n
                     |                                          }nt          |t                    rB|}||f|<   |j	        }|j
        }	|D ]'}
|
|	vr!                     ||
                   ||
<   (n|t          u r fd|D             }nn|t          u rt           fd|D                       }nG|t          t          j        fv r0 fdt          |                                          D             }n|}||f|<   |S )zP
        Walk an object and realize all LazyVariableTrackers inside it.
        Nr   r"   c                @    g | ]}                     |           S r"   realize_all.0vr#   r>   rF   s     r   
<listcomp>z3LazyVariableTracker.realize_all.<locals>.<listcomp>   s<        5>QRR  r   c              3  H   K   | ]}                     |           V  dS )r"   Nri   rk   s     r   	<genexpr>z2LazyVariableTracker.realize_all.<locals>.<genexpr>   sJ         5>QRR     r   c                H    i | ]\  }}|                     |           S rh   ri   )rl   krm   r#   r>   rF   s      r   
<dictcomp>z3LazyVariableTracker.realize_all.<locals>.<dictcomp>   sB       Aq 3??1eAT?UU  r   )idr8   
issubclassr4   r   r9   rj   r,   r	   __dict___nonvar_fieldslisttupledictcollectionsOrderedDictitems)rF   r   r>   r#   idx	value_cls	keep_lazyresult
value_dictnonvarskeys   ` ``       r   rj   zLazyVariableTracker.realize_all   s    =Eii%<<:a= KK	i!455 %	+W
5BV0W0WI MMOOU@S )   	?33 	F %E#JJ*G!  g%%&)oo"3DW '6 ' 'JsO
 $       FF %          FF 4!8999      //  FF
 F e_c
r   c                    dd|                                  rJ | j        j        }t          |t                    rt          fd|D                       S  |          S )Nr   r   r   rG   c                    t          j        |           p0t          t          |           t                    pt	          |           S r   )inspect	isbuiltinru   r8   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   r2   )rl   rm   r   s     r   rp   z2LazyVariableTracker.is_hashable.<locals>.<genexpr>   s+      11awwqzz111111r   )r   r   r   rG   )rM   r5   r   r   ry   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   rV   rE   s    r   original_valuez"LazyVariableTracker.original_value   s%    ##%%%%%{  r   c                F    |                                  rJ | j        j        S r   )rM   r5   r   rE   s    r   original_sourcez#LazyVariableTracker.original_source   s%    ##%%%%%{!!r   )r   r   r   r   r6   r   r   r	   )r5   r   r@   r   r   r   )r   r	   )rF   r8   r   rG   )r   rK   )r   rG   )r@   r   r   r	   )r   rR   )r   r   )rX   rY   r   r   r   rY   )r`   rY   r   r   r   )r   r   r>   re   r#   rG   r   r   )r.   r/   r0   r1   _no_implicit_realizer	   rw   staticmethodr(   r   r,   rJ   rN   rM   rQ   rT   rW   r*   r_   rd   visit__repr__classmethodrj   r   r   r   __classcell__)rC   s   @r   r4   r4   7   s          @!?@NW W W \W(     
   ; ; ; ;   * * * *> > > >' ' ' '! ! ! !) ) ) )   - - - - !EH 48;
 %*; ; ; ; ; [;z   $! ! ! !
" " " " " " " "r   r4   )	metaclassc                  6    e Zd ZdZeeeefZe	d	d            Z
dS )
r9   aU  
    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.
    r   r   r   r6   r   c                v    t          |           t          j        v sJ t          t          | |          fd|i|S )Nr   )r8   r9   r:   r   )r   r   r6   s      r   r(   zLazyConstantVariable.create  sD     E{{2BBBBB#IeV$<$<WWVWwWWWr   N)r   r   r   r   r6   r   r   r9   )r.   r/   r0   r1   intfloatrG   rY   r:   r   r(   r2   r   r   r9   r9      sR          E4-OX X X \X X Xr   r9   c                      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   rY   c                    t                               | j                                        t          | j                                                            S r   )rY   formatr   r   r   evaluate_exprrE   s    r   r   z LazySymNodeFormatString.__repr__  sC    zzL++--!//1122
 
 	
r   N)r   r   r   r	   r   r   r   )r.   r/   r0   r   r   r2   r   r   r   r     s<        
 
 
 

 
 
 
 
 
r   r   rX   rY   r   .Callable[[LazyVariableTracker, Any, Any], Any]c                n     t          j        t          t                               d fd            }|S )	Nr   r4   argsr   r@   r   c                T     t          |                                           |i |S r   rb   )r   r   r@   rX   s      r   realize_and_forwardz8_create_realize_and_forward.<locals>.realize_and_forward"  s,     -wt||~~t,,d=f===r   )r   r4   r   r   r@   r   r   r   )	functoolswrapsrc   r	   )rX   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	   rv   r}   r4   callablesetattrr   )rX   r   s     r   	_populater   +  sm    &/5577 V Ve*333 V+T3Nt3T3TUUUV Vr   )rX   rY   r   r   r-   )
__future__r   r{   r   r   typingr   r   utilsr   baser	   r
   collections.abcr   typing_extensionsr   tensorr   r   r4   r9   r   r   r   r2   r   r   <module>r      s   " " " " " "          % % % % % % % % * * * * * * 6 6 6 6 6 6 6 6  (((((((&&&&&&''''''! ! ! ! ! ! ! !H}" }" }" }" }"/5H }" }" }" }"@X X X X X. X X X,
 
 
 
 
 
 
 
$	 	 	 	V V V V 
	r   