o
    ^i                     @   s  d Z 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mZmZmZ ddlmZ ddlmZmZ er>ddlmZ ejejejejejejejejejejejejejejejejejejejeji
Z ejejejejejejejejejejejejejejejejejejejeji
Z!ejejejejejejejejejejejejejejejejejejejeji
Z"ejejejejejejejejejejejejejejejejejejejeji
Z#d	ed
e$fddZ%d	ed
e&fddZ'ej(ddG dd deZ)ej(ddG dd deZ*ej(ddG dd deZ+ej(ddG dd deZ,ej(ddG dd deZ-ej(ddG dd deZ.ej(ddG dd de.Z/ej(ddG dd  d eZ0ej(ddG d!d" d"eZ1ej(ddG d#d$ d$eZ2ej(ddG d%d& d&eZ3ej(ddG d'd( d(eZ4ej(ddG d)d* d*eZ5ej(ddG d+d, d,eZ6ej(ddG d-d. d.eZ7ej(ddG d/d0 d0e0Z8ej(ddG d1d2 d2e0Z9ej(ddG d3d4 d4eZ:ej(ddG d5d6 d6eZ;G d7d8 d8ej<Z=ej(ddG d9d: d:eZ>ej(ddG d;d< d<eZ?ej(ddG d=d> d>eZ@ej(ddG d?d@ d@eZAej(ddG dAdB dBeZBej(ddG dCdD dDeZCG dEdF dFeZDej(ddG dGdH dHeZEej(ddG dIdJ dJeZFej(ddG dKdL dLeZGej(ddG dMdN dNeZHej(ddG dOdP dPeZIej(ddG dQdR dReZJej(ddG dSdT dTeFZKej(ddG dUdV dVeFZLej(ddG dWdX dXeZMej(ddG dYdZ dZeZNej(ddG d[d\ d\eZOej(ddG d]d^ d^eZPej(ddG d_d` d`eZQej(ddG dadb dbeQZRej(ddG dcdd ddeRZSej(ddG dedf dfeQZTej(ddG dgdh dheZUej(ddG didj djeZVej(ddG dkdl dleZWej(ddG dmdn dneZXej(ddG dodp dpeZYej(ddG dqdr dreZZej(ddG dsdt dteZ[ej(ddG dudv dveZ\ej(ddG dwdx dxeZ]ej(ddG dydz dzeZ^d{d|d	ed}e$d
ee& fd~dZ_d{d|d	ed}e$d
e$fddZ`d	ed
e$fddZad	ed
ee& fddZbd	ed
e$fddZcd	ed
e$fddZdd	eded
e$fddZeejfd	ed
e$fddZgejfd	ed
e$fddZhejfd	ed
e$fddZiejfd	ed
e$fddZjejfd	ed
e$fddZkejfd	ed
e$fddZlejfd	ed
e$fddZmdS )a  
This module provides Source classes that track the origins of values in PyTorch Dynamo.
Sources represent where values come from (e.g. local variables, globals, attributes) and
are used for guard generation and code reconstruction during compilation.

The module includes specialized sources for:
- Local variables and synthetic locals
- Global variables and constants
- Object attributes and method calls
- NN module specialization (specialized vs unspecialized)
- Random values and tensor properties
- Default argument handling
- FSDP (Fully Sharded Data Parallel) modules

Sources play a key role in Dynamo's guard system by tracking value origins for
guard generation, and in code reconstruction by providing methods to rebuild
the code needed to recreate values.
    N)AnyCallableOptionalTYPE_CHECKINGUnion)ChainedSourceGuardGuardSourceSource   )utils)create_call_functioncreate_instruction)	PyCodegensourcereturnc                 C   s>   t | trdS z|  tjkrW dS W dS  ty   Y dS w NTF)
isinstanceConstantSourceguard_sourcer	   CONSTANTNotImplementedErrorr    r   O/var/www/html/RAG/RAG_venv/lib/python3.10/site-packages/torch/_dynamo/source.pyis_constant_sourcea   s   
r   c                 C   s    z|   W S  ty   Y dS w )Nz<unknown source>)namer   r   r   r   r   _get_source_debug_namem   s
   
r   T)frozenc                   @   sh   e Zd ZU eed< dZeed< dZee	e  ed< dZ
eed< dd
dZd	efddZd	efddZdS )LocalSource
local_nameFis_inputNdynamismis_derefed_cell_contentscodegenr   r   c                 C   s,   | j r|| j d S ||| j d S N)r#   
load_derefr    append_outputcreate_loadselfr$   r   r   r   reconstruct   s   zLocalSource.reconstructc                 C      t jS r%   )r	   LOCALr*   r   r   r   r         zLocalSource.guard_sourcec                 C      dt | j dS )NzL[])reprr    r.   r   r   r   r         zLocalSource.namer$   r   r   N)__name__
__module____qualname__str__annotations__r!   boolr"   r   	frozensetr#   r+   r	   r   r   r   r   r   r   r   t   s   
 
r   c                   @   <   e Zd ZU eed< dddZdefdd	Zdefd
dZdS )SyntheticLocalSourcer    r$   r   r   Nc                 C      | || j d S r%   )r'   r(   r    r)   r   r   r   r+         z SyntheticLocalSource.reconstructc                 C   r,   r%   )r	   SYNTHETIC_LOCALr.   r   r   r   r      r/   z!SyntheticLocalSource.guard_sourcec                 C   s   d| j dS )NzSYNTHETIC_LOCAL[r1   )r    r.   r   r   r   r         zSyntheticLocalSource.namer4   	r5   r6   r7   r8   r9   r+   r	   r   r   r   r   r   r   r=      
   
 
r=   c                   @   s<   e Zd ZU eed< defddZddd	Zdefd
dZ	dS )RandomValueSourcerandom_call_indexr   c                 C   r,   r%   )r	   RANDOM_VALUEr.   r   r   r   r      r/   zRandomValueSource.guard_sourcer$   r   Nc                 C   s:   | ||jjj | || j | td d S NBINARY_SUBSCR)r'   r(   txoutputrandom_values_varcreate_load_constrE   r   r)   r   r   r   r+      s   zRandomValueSource.reconstructc                 C   s   d| j  S )Nrandom_value_)rE   r.   r   r   r   r         zRandomValueSource.namer4   )
r5   r6   r7   intr9   r	   r   r+   r8   r   r   r   r   r   rD      s
   
 
rD   c                   @   r<   )GlobalSourceglobal_namer$   r   r   Nc                 C      | |j| jdd d S NTaddr'   create_load_globalrQ   r)   r   r   r   r+         zGlobalSource.reconstructc                 C   r,   r%   r	   GLOBALr.   r   r   r   r      r/   zGlobalSource.guard_sourcec                 C   r0   )NG[r1   r2   rQ   r.   r   r   r   r      r3   zGlobalSource.namer4   rB   r   r   r   r   rP      rC   rP   c                   @   r<   )GlobalWeakRefSourcerQ   r$   r   r   Nc                    (      fdd  tdd d S )Nc                      s      jjddS rS   rV   r   r$   r*   r   r   <lambda>   s    z1GlobalWeakRefSource.reconstruct.<locals>.<lambda>r   Fadd_push_nullextend_outputr   r)   r   r_   r   r+      s   zGlobalWeakRefSource.reconstructc                 C   r,   r%   rY   r.   r   r   r   r      r/   z GlobalWeakRefSource.guard_sourcec                 C   r0   )Nr[   z]()r\   r.   r   r   r   r      r3   zGlobalWeakRefSource.namer4   rB   r   r   r   r   r]      s
   
 
r]   c                   @   2   e Zd ZdddZdefddZdefd	d
ZdS )WeakRefCallSourcer$   r   r   Nc                    r^   )Nc                      s
    j S r%   baser   r_   r   r   r`      s   
 z/WeakRefCallSource.reconstruct.<locals>.<lambda>r   Fra   r)   r   r_   r   r+      s   zWeakRefCallSource.reconstructc                 C   
   | j  S r%   rg   r   r.   r   r   r   r         
zWeakRefCallSource.guard_sourcec                 C      | j   dS )Nz()rg   r   r.   r   r   r   r         zWeakRefCallSource.namer4   r5   r6   r7   r+   r	   r   r8   r   r   r   r   r   re          
re   c                   @      e Zd ZdS )CallFunctionNoArgsSourceNr5   r6   r7   r   r   r   r   rq          rq   c                   @   F   e Zd ZU eed< dddZddd	Zdefd
dZdefddZ	dS )
AttrSourcememberr   Nc                 C   b   | j sJ dd| jv r/| jd}t| dt| j d|d d  t| d|d  d S d S Nz9Can't construct an AttrSource without a valid base source.rg   rv   rg   rv   splitobject__setattr__ru   joinr*   member_partsr   r   r   __post_init__      
zAttrSource.__post_init__r$   r   c                 C       || j  ||| j d S r%   rg   rc   create_load_attrsrv   r)   r   r   r   r+         
zAttrSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r      rj   zAttrSource.guard_sourcec                 C   s:   | j  sd| j  d| j dS | j  d| j  S )Nzgetattr(, )ry   )rv   isidentifierrg   r   r.   r   r   r   r      s   
zAttrSource.namer   Nr4   
r5   r6   r7   r8   r9   r   r+   r	   r   r   r   r   r   r   ru         
 

	ru   c                   @   rt   )GenericAttrSourcerv   r   Nc                 C   rw   rx   r{   r   r   r   r   r      r   zGenericAttrSource.__post_init__r$   r   c                 C   r   r%   r   r)   r   r   r   r+   	  r   zGenericAttrSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r     rj   zGenericAttrSource.guard_sourcec                 C      d| j   d| jdS )Nzobject.__getattribute__(r   r   rg   r   rv   r.   r   r   r   r     rX   zGenericAttrSource.namer   r4   r   r   r   r   r   r      r   r   c                   @   rd   )TypeDictSourcer$   r   r   Nc                 C      || j  ||d d S )N__dict__rg   rc   r   r)   r   r   r   r+        
zTypeDictSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r     rj   zTypeDictSource.guard_sourcec                 C      d| j   dS )Nzdict(z
.__dict__)rl   r.   r   r   r   r     s   zTypeDictSource.namer4   rn   r   r   r   r   r     ro   r   c                   @   rd   )TypeMROSourcer$   r   r   Nc                 C   r   )N__mro__r   r)   r   r   r   r+   )  r   zTypeMROSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r   -  rj   zTypeMROSource.guard_sourcec                 C   rk   )Nz.__mro__rl   r.   r   r   r   r   0  rm   zTypeMROSource.namer4   rn   r   r   r   r   r   '  ro   r   c                   @   s$   e Zd ZU dZeed< d	ddZdS )
LocalCellSourcez
    Conceptually, this class is `LocalSource` for cell objects implicitly
    generated by Python (e.g., captured variables).
    r    r$   r   r   Nc                 C   r>   r%   )r'   create_load_closurer    r)   r   r   r   r+   =  s   zLocalCellSource.reconstructr4   )r5   r6   r7   __doc__r8   r9   r+   r   r   r   r   r   4  s   
 r   c                   @   rd   )
CodeSourcer$   r   r   Nc                 C   r   )N__code__r   r)   r   r   r   r+   J  r   zCodeSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r   N  rj   zCodeSource.guard_sourcec                 C   rk   )Nz	.__code__rl   r.   r   r   r   r   Q  rm   zCodeSource.namer4   rn   r   r   r   r   r   H  ro   r   c                   @   rd   )ClosureSourcer$   r   r   Nc                 C   r   )N__closure__r   r)   r   r   r   r+   X  r   zClosureSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r   \  rj   zClosureSource.guard_sourcec                 C   rk   )Nz.__closure__rl   r.   r   r   r   r   _  rm   zClosureSource.namer4   rn   r   r   r   r   r   V  ro   r   c                   @   s@   e Zd ZU dZeed< dddZdefd	d
ZdefddZ	dS )
GradSourcegradrv   r$   r   r   Nc                 C   r   r%   r   r)   r   r   r   r+   k  r   zGradSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r   o  rj   zGradSource.guard_sourcec                 C   s   | j   d| j S )Nry   r   r.   r   r   r   r   r  r?   zGradSource.namer4   )
r5   r6   r7   rv   r8   r9   r+   r	   r   r   r   r   r   r   r   g  s
   
 
r   c                   @      e Zd ZdefddZdS )ParamBufferSourcer   c                 C      t | j  S r%   #_GUARD_SOURCE_SPECIALIZED_NN_MODULErg   r   r.   r   r   r   r   x  rA   zParamBufferSource.guard_sourceNr5   r6   r7   r	   r   r   r   r   r   r   v      r   c                   @   rp   )UnspecializedParamBufferSourceNrr   r   r   r   r   r   }  rs   r   c                   @   sb   e Zd ZU dZee ed< defddZdefddZ	de
d	ef defd
dZdefddZdS )EphemeralSourceNdescr   c                 C   r,   r%   )r	   	EPHEMERALr.   r   r   r   r     r/   zEphemeralSource.guard_sourcec                 C   s&   d| j d urd| j   dS d dS )Nz
<ephemeralz:  >)r   r.   r   r   r   r     s   &zEphemeralSource.namefn.c                 C      t r%   r   r*   r   r   r   r   
make_guard     zEphemeralSource.make_guardc                 C      dS NTr   r.   r   r   r   is_ephemeral  r   zEphemeralSource.is_ephemeral)r5   r6   r7   r   r   r8   r9   r	   r   r   r   r   r   r   r:   r   r   r   r   r   r     s   
 r   c                   @   rd   )SkipGuardSourcer$   r   r   Nc                 C   s   | j | d S r%   )rg   r+   r)   r   r   r   r+     rm   zSkipGuardSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r     rj   zSkipGuardSource.guard_sourcec                 C   rh   r%   rl   r.   r   r   r   r     rj   zSkipGuardSource.namer4   rn   r   r   r   r   r         
r   c                   @   s&   e Zd ZdZdZdZdefddZdS )TensorPropertyr   r      r   c                 C   s8   | t ju rdS | t ju rdS | t ju rdS td|  )Nsizestridestorage_offset
unhandled )r   SIZESTRIDESTORAGE_OFFSETAssertionErrorr.   r   r   r   method_name  s   


zTensorProperty.method_nameN)r5   r6   r7   r   r   r   r8   r   r   r   r   r   r     s
    r   c                   @   sV   e Zd ZU eed< dZee ed< dddZdd	d
Z	de
fddZdefddZdS )TensorPropertySourcepropNidxr   c                 C   s>   | j d usJ | jtju r| jd u sJ d S | jd usJ d S r%   )rg   r   r   r   r   r.   r   r   r   r     s   z"TensorPropertySource.__post_init__r$   r   c                    s\      fdd  j jd ur  j  tjd ur'dndd d S )Nc                      s     tjdj  S )Ncall_)load_import_fromr   r5   r   r   r   r_   r   r   r`     s    z2TensorPropertySource.reconstruct.<locals>.<lambda>r   r   F)rb   rg   r   r'   rL   rc   r   r)   r   r_   r   r+     s   

z TensorPropertySource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r     rj   z!TensorPropertySource.guard_sourcec                 C   s   | j tju r| j  d| j dS | j tju r$| j  d| j dS | j tju r9| jd u s1J | j  dS td| j  )Nz.size()[r1   z
.stride()[z.storage_offset()r   )	r   r   r   rg   r   r   r   r   r   r.   r   r   r   r     s   zTensorPropertySource.namer   r4   )r5   r6   r7   r   r9   r   r   rO   r   r+   r	   r   r8   r   r   r   r   r   r     s   
 

r   c                   @   sF   e Zd ZU eed< dddZddd	Zdefd
dZde	fddZ
dS )IndexedSourcer   r   Nc                 C      | j d usJ d S r%   rf   r.   r   r   r   r     r3   zIndexedSource.__post_init__r$   r   c                 C   r   r%   r   r)   r   r   r   r+     r   zIndexedSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r     rj   zIndexedSource.guard_sourcec                 C   s   d| j  d| j  dS )N(r   r   )r   rg   r   r.   r   r   r   r     rX   zIndexedSource.namer   r4   )r5   r6   r7   rO   r9   r   r+   r	   r   r8   r   r   r   r   r   r     s   
 

r   c                   @   <   e Zd ZdddZdddZdefd	d
ZdefddZdS )NegateSourcer   Nc                 C   r   r%   rf   r.   r   r   r   r     r3   zNegateSource.__post_init__r$   r   c                 C   r   r%   r   r)   r   r   r   r+     r   zNegateSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r     rj   zNegateSource.guard_sourcec                 C   rk   )Nz
.__neg__()rl   r.   r   r   r   r     s   zNegateSource.namer   r4   	r5   r6   r7   r   r+   r	   r   r8   r   r   r   r   r   r     
    

r   c                   @   r   )ConvertIntSourcer   Nc                 C   r   r%   rf   r.   r   r   r   r     r3   zConvertIntSource.__post_init__r$   r   c                 C      || j  d S r%   rf   r)   r   r   r   r+     rA   zConvertIntSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r   
  rj   zConvertIntSource.guard_sourcec                 C   r   )Nz!cast_symbool_to_symint_guardless(r   rl   r.   r   r   r   r     r3   zConvertIntSource.namer   r4   r   r   r   r   r   r     r   r   c                   @   r   )FlattenScriptObjectSourcer   Nc                 C   r   r%   rf   r.   r   r   r   r     r3   z'FlattenScriptObjectSource.__post_init__r$   r   c                 C   r   r%   rf   r)   r   r   r   r+     rA   z%FlattenScriptObjectSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r     rj   z&FlattenScriptObjectSource.guard_sourcec                 C   rk   )Nz.__obj_flatten__()rl   r.   r   r   r   r     rm   zFlattenScriptObjectSource.namer   r4   r   r   r   r   r   r     r   r   c                   @   r   )ScriptObjectQualifiedNameSourcer   Nc                 C   r   r%   rf   r.   r   r   r   r   "  r3   z-ScriptObjectQualifiedNameSource.__post_init__r$   r   c                 C   r   r%   rf   r)   r   r   r   r+   %  rA   z+ScriptObjectQualifiedNameSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r   (  rj   z,ScriptObjectQualifiedNameSource.guard_sourcec                 C   rk   )Nz._type().qualified_name()rl   r.   r   r   r   r   +  rm   z$ScriptObjectQualifiedNameSource.namer   r4   r   r   r   r   r   r      r   r   c                   @   rd   )AttrProxySourcer$   r   r   Nc                 C   r   r%   rf   r)   r   r   r   r+   0  rA   zAttrProxySource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r   3  rj   zAttrProxySource.guard_sourcec                 C   rk   )Nz.get_base()rl   r.   r   r   r   r   6  rm   zAttrProxySource.namer4   rn   r   r   r   r   r   /  s    
r   c                   @   s   e Zd ZU eeef ed< dZeed< e	j
ddddZ
eed< e	j
ddddZeed< dd	d
ZdddZdefddZdefddZdS )DefaultsSourceidx_keyFis_kw)initr2   comparefield_namer   Nc              
   C   s   | j sJ d| jr0t| jtsJ t| dd t| d| j   d| j d| j d d S t| jt	s8J t| dd t| d| j   d| j d	| j d
 d S )Nz]Base must be a valid source in order to properly track and guard this Defaults to its origin.r   __kwdefaults__r   ry   z['z']__defaults__[r1   )
rg   r   r   r   r8   r}   r~   r   r   rO   r.   r   r   r   r   A  s   ""zDefaultsSource.__post_init__r$   r   c                 C   s@   || j  ||| j ||| j |td d S rG   )rg   rc   r   r   r'   rL   r   r   r)   r   r   r   r+   R  s   
zDefaultsSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r   X  rj   zDefaultsSource.guard_sourcec                 C      | j S r%   )r   r.   r   r   r   r   [  r/   zDefaultsSource.namer   r4   )r5   r6   r7   r   rO   r8   r9   r   r:   dataclassesr   r   r   r+   r	   r   r   r   r   r   r   r   :  s   
 

r   c                       sh   e Zd ZU eed< dZeed< d fddZdd
dZde	fddZ
defddZdefddZ  ZS )GetItemSourceindexFindex_is_slicer   Nc                    sD   | j d usJ t| jtr t d| j  t dd d S d S )Nr   r   T)rg   r   r   slicesuperr~   
__reduce__r.   	__class__r   r   r   d  s
   zGetItemSource.__post_init__r$   r   c                 C   sJ   || j  | jr|||   n	||| j |td d S rG   )rg   r   r'   rL   unpack_slicer   r   r)   r   r   r   r+   k  s
   
zGetItemSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r   s  rj   zGetItemSource.guard_sourcec                 C   s   | j sJ | j\}}|| S r%   )r   r   )r*   slice_class
slice_argsr   r   r   r   v  s   

zGetItemSource.unpack_slicec                 C   sH   t | jtrJ | jr| j  d|  dS | j  d| jdS Nr   r1   )r   r   r
   r   rg   r   r   r.   r   r   r   r   {  s   zGetItemSource.namer   r4   )r5   r6   r7   r   r9   r   r:   r   r+   r	   r   r   r   r8   r   __classcell__r   r   r   r   r   _  s   
 
r   c                   @   sJ   e Zd ZU eed< defddZddd	Zdefd
dZ	de
fddZdS )ConstDictKeySourcer   r   c                 C   rh   r%   ri   r.   r   r   r   r     rj   zConstDictKeySource.guard_sourcer$   r   Nc                    B      fdd  | j   | j  tdd d S )Nc                           tjdS )Ndict_keys_getitemr   r   r5   r   r$   r   r   r`         z0ConstDictKeySource.reconstruct.<locals>.<lambda>r   Frb   rg   r'   rL   r   rc   r   r)   r   r   r   r+        

zConstDictKeySource.reconstructc                 C   r   )Nzlist(dict.keys(z))[r1   rg   r   r   r.   r   r   r   r        zConstDictKeySource.namec                 C   r   r   r   r.   r   r   r   is_dict_key  r   zConstDictKeySource.is_dict_keyr4   )r5   r6   r7   r   r9   r	   r   r+   r8   r   r:   r   r   r   r   r   r     s   
 
r   c                   @   sT   e Zd ZU eed< dddZdefddZdd
dZde	fddZ
defddZdS )NonSerializableSetGetItemSourcer   r   Nc                 C   s    ddl m} || jsJ d S Nr   )ConstantVariable)	variablesr   
is_literalr   r*   r   r   r   r   r     s   z-NonSerializableSetGetItemSource.__post_init__c                 C   rh   r%   ri   r.   r   r   r   r     rj   z,NonSerializableSetGetItemSource.guard_sourcer$   r   c                    r   )Nc                      r   )Nset_getitemr   r   r   r   r   r`     r   z=NonSerializableSetGetItemSource.reconstruct.<locals>.<lambda>r   Fr   r)   r   r   r   r+     r   z+NonSerializableSetGetItemSource.reconstructc                 C   r   )Nzlist(z)[r1   r   r.   r   r   r   r     r   z$NonSerializableSetGetItemSource.namec                 C   r   )NFr   r.   r   r   r   r     r   z+NonSerializableSetGetItemSource.is_dict_keyr   r4   )r5   r6   r7   rO   r9   r   r	   r   r+   r8   r   r:   r   r   r   r   r   r     s   
 

r   c                   @   F   e Zd ZU eed< dddZdefddZdd
dZde	fddZ
dS )DictGetItemSourcer   r   Nc                 C   0   ddl m} t| jts|| jsJ d S d S r   r   r   r   r   r   r   r   r   r   r   r        
zDictGetItemSource.__post_init__c                 C   rh   r%   ri   r.   r   r   r   r     rj   zDictGetItemSource.guard_sourcer$   r   c                 C   sF   || j  t| jtr|| j n	||| j |td d S rG   )rg   r   r   r
   r'   rL   r   r)   r   r   r   r+     s
   
zDictGetItemSource.reconstructc                 C   s@   t | jtr| j  d| j  dS | j  d| jdS r   r   r   r   rg   r   r.   r   r   r   r     s   zDictGetItemSource.namer   r4   r5   r6   r7   r   r9   r   r	   r   r+   r8   r   r   r   r   r   r    s   
 

r  c                   @   r  )DictSubclassGetItemSourcer   r   Nc                 C   r  r   r  r   r   r   r   r     r  z'DictSubclassGetItemSource.__post_init__c                 C   rh   r%   ri   r.   r   r   r   r     rj   z&DictSubclassGetItemSource.guard_sourcer$   r   c                    sZ      fdd  | j t| jtr | j n	  | j  tdd d S )Nc                      r   )Ndict_getitemr   r   r   r   r   r`     r   z7DictSubclassGetItemSource.reconstruct.<locals>.<lambda>r   F)	rb   rg   r   r   r
   r'   rL   rc   r   r)   r   r   r   r+     s   

z%DictSubclassGetItemSource.reconstructc                 C   sB   t | jtrd| j  d| j  dS | j  d| jdS )Nzdict.__getitem__(r   r   r   r1   r  r.   r   r   r   r     s   zDictSubclassGetItemSource.namer   r4   r  r   r   r   r   r	    s   
 

r	  c                   @   s(   e Zd ZdZd
ddZdefdd	ZdS )ListGetItemSourcezY
    Same as GetItemSource with reconstruct and name overridden to be list specific.
    r$   r   r   Nc                    sP      fdd  | j | jrtd  | j  tdd d S )Nc                      r   )Nlist_getitemr   r   r   r   r   r`     r   z/ListGetItemSource.reconstruct.<locals>.<lambda>>List[slice] is a temporary object and should not have a sourcer   F)	rb   rg   r   RuntimeErrorr'   rL   r   rc   r   r)   r   r   r   r+     s   

zListGetItemSource.reconstructc                 C   s8   t | jtrJ | jrtdd| j  d| jdS )Nr  zlist.__getitem__(r   r   )r   r   r
   r   r  rg   r   r.   r   r   r   r   &  s   zListGetItemSource.namer4   )r5   r6   r7   r   r+   r8   r   r   r   r   r   r  
  s    
r  c                   @   s$   e Zd Zd	ddZdefddZdS )
TupleIteratorGetItemSourcer$   r   r   Nc                    r   )Nc                      r   )Ntuple_iterator_getitemr   r   r   r   r   r`   7  r   z8TupleIteratorGetItemSource.reconstruct.<locals>.<lambda>r   Fr   r)   r   r   r   r+   5  r   z&TupleIteratorGetItemSource.reconstructc                 C   r   )Nz___tuple_iterator_getitem(r   r   r   r.   r   r   r   r   =  rX   zTupleIteratorGetItemSource.namer4   )r5   r6   r7   r+   r8   r   r   r   r   r   r  3  s    
r  c                   @   rd   )NamedTupleFieldsSourcer$   r   r   Nc                 C   r   )N_fieldsr   r)   r   r   r   r+   C  r   z"NamedTupleFieldsSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r   G  rj   z#NamedTupleFieldsSource.guard_sourcec                 C   r   )Nz___namedtuple_fields(r   rl   r.   r   r   r   r   J  r3   zNamedTupleFieldsSource.namer4   rn   r   r   r   r   r  A  ro   r  c                   @   rd   )DataclassFieldsSourcer$   r   r   Nc                    0      fdd  | j  tdd d S )Nc                      r   )Ndataclass_fieldsr   r   r   r   r   r`   R  r   z3DataclassFieldsSource.reconstruct.<locals>.<lambda>r   Frb   rg   rc   r   r)   r   r   r   r+   P  s
   

z!DataclassFieldsSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r   W  rj   z"DataclassFieldsSource.guard_sourcec                 C   r   )Nz___dataclass_fields(r   rl   r.   r   r   r   r   Z  r3   zDataclassFieldsSource.namer4   rn   r   r   r   r   r  N  s    
r  c                   @   r   )
TypeSourcer   Nc                 C   r   r%   rf   r.   r   r   r   r   `  r3   zTypeSource.__post_init__r$   r   c                    r  )Nc                           ddS )Nbuiltinstyper   r   r   r   r   r`   d      z(TypeSource.reconstruct.<locals>.<lambda>r   Fr  r)   r   r   r   r+   c     
zTypeSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r   h  rj   zTypeSource.guard_sourcec                 C   r   )Nztype(r   rl   r.   r   r   r   r   k  r3   zTypeSource.namer   r4   r   r   r   r   r   r  ^  s
    

r  c                   @   rd   )OptimizerSourcer$   r   r   Nc                 C   r   r%   rf   r)   r   r   r   r+   q  rA   zOptimizerSource.reconstructc                 C   rh   r%   ri   r.   r   r   r   r   t  rj   zOptimizerSource.guard_sourcec                 C   rh   r%   rl   r.   r   r   r   r   w  rj   zOptimizerSource.namer4   rn   r   r   r   r   r  o  r   r  c                   @   rd   )NNModuleSourcer$   r   r   Nc                 C   r   r%   rf   r)   r   r   r   r+   }  rA   zNNModuleSource.reconstructc                 C   r   r%   r   r.   r   r   r   r     rA   zNNModuleSource.guard_sourcec                 C   rh   r%   rl   r.   r   r   r   r     rj   zNNModuleSource.namer4   rn   r   r   r   r   r  {  r   r  c                   @   r   )UnspecializedNNModuleSourcer   c                 C   r   r%   )%_GUARD_SOURCE_UNSPECIALIZED_NN_MODULErg   r   r.   r   r   r   r     rA   z(UnspecializedNNModuleSource.guard_sourceNr   r   r   r   r   r     r   r   c                   @   r   )"UnspecializedBuiltinNNModuleSourcer   c                 C   r   r%   )-_GUARD_SOURCE_UNSPECIALIZED_BUILTIN_NN_MODULErg   r   r.   r   r   r   r     rA   z/UnspecializedBuiltinNNModuleSource.guard_sourceNr   r   r   r   r   r"    r   r"  c                   @   r   )FSDPNNModuleSourcer   c                 C   r   r%   )_GUARD_SOURCE_FSDP_MODULErg   r   r.   r   r   r   r     rA   zFSDPNNModuleSource.guard_sourceNr   r   r   r   r   r$    r   r$  c                   @   (   e Zd ZdefddZdefddZdS )GlobalStateSourcer   c                 C   r   Nr   r   r.   r   r   r   r     r   zGlobalStateSource.namec                 C   r,   r%   rY   r.   r   r   r   r     r/   zGlobalStateSource.guard_sourceNr5   r6   r7   r8   r   r	   r   r   r   r   r   r'        r'  c                       sT   e Zd ZdZdededdf fddZdefdd	ZdddZde	fddZ
  ZS )TorchSourcezPoints to the actual `torch` module - used instead of GlobalSource
    in case the user has overridden `torch` in their local namespaceargskwargsr   Nc                    s6   t  j|i | ddlm}m} || |j d S )Nr   )GuardBuilderinstall_guard)r   __init__guardsr.  r/  r   ID_MATCH)r*   r,  r-  r.  r/  r   r   r   r0    s   zTorchSource.__init__c                 C   r   )Nz__import__('torch')r   r.   r   r   r   r     r   zTorchSource.namer$   r   c                 C   s(   | |dtddd|dg d S )Nr   BUILD_TUPLE)argtorch)rc   rL   r   create_import_namer)   r   r   r   r+     s   
zTorchSource.reconstructc                 C   r,   r%   rY   r.   r   r   r   r     r/   zTorchSource.guard_sourcer4   )r5   r6   r7   r   r   r0  r8   r   r+   r	   r   r   r   r   r   r   r+    s    
	r+  c                   @   sJ   e Zd ZU eed< defddZdefddZdd
dZde	fddZ
d	S )TorchFunctionModeStackSourceindr   c                 C   s   d|    dS )Nz$___get_torch_function_mode_stack_at(r   )
_get_indexr.   r   r   r   r     rm   z!TorchFunctionModeStackSource.namec                 C   s   ddl m} || jS )Nr   )TorchFunctionModeStackVariable)variables.torch_functionr:  get_mode_indexr8  )r*   r:  r   r   r   r9    s   z'TorchFunctionModeStackSource._get_indexr$   r   Nc                    s<      fdd   |  g  tdd d S )Nc                      r   )N get_torch_function_mode_stack_atr   r   r   r   r   r`     s    z:TorchFunctionModeStackSource.reconstruct.<locals>.<lambda>r   F)rb   rc   rL   r9  r   r)   r   r   r   r+     s
   
z(TorchFunctionModeStackSource.reconstructc                 C   r,   r%   rY   r.   r   r   r   r     r/   z)TorchFunctionModeStackSource.guard_sourcer4   )r5   r6   r7   rO   r9   r8   r   r9  r+   r	   r   r   r   r   r   r7    s   
 
	r7  c                   @   sN   e Zd ZU eed< dddZdefdd	Zdefd
dZde	de	fddZ
dS )r   source_namer$   r   r   Nc                 C   rR   )NFrT   )r'   rW   r>  r)   r   r   r   r+     rX   zConstantSource.reconstructc                 C   r,   r%   )r	   r   r.   r   r   r   r     r/   zConstantSource.guard_sourcec                 C   r   r%   )r>  r.   r   r   r   r     r/   zConstantSource.namer   c                 C   r   r%   r   r   r   r   r   r     r   zConstantSource.make_guardr4   )r5   r6   r7   r8   r9   r+   r	   r   r   r   r   r   r   r   r   r     s   
 
r   c                   @   s2   e Zd ZdefddZdefddZdd	d
ZdS )NumpyTensorSourcer   c                 C   r   )Nz___from_numpy(r   rl   r.   r   r   r   r     r3   zNumpyTensorSource.namec                 C   rh   r%   ri   r.   r   r   r   r     rj   zNumpyTensorSource.guard_sourcer$   r   Nc                    r  )Nc                      r  )Nr5  	as_tensorr  r   r   r   r   r`     r  z/NumpyTensorSource.reconstruct.<locals>.<lambda>r   Fr  r)   r   r   r   r+     r  zNumpyTensorSource.reconstructr4   )r5   r6   r7   r8   r   r	   r   r+   r   r   r   r   r?    s    r?  c                   @   r&  )SubclassAttrListSourcer   c                 C   rk   )Nz.__tensor_flatten__()[0]rl   r.   r   r   r   r     rm   zSubclassAttrListSource.namec                 C   rh   r%   ri   r.   r   r   r   r     rj   z#SubclassAttrListSource.guard_sourceNr)  r   r   r   r   rA    r*  rA  c                   @   r&  )FloatTensorSourcer   c                 C   r   )Nz___as_tensor(r   rl   r.   r   r   r   r     r3   zFloatTensorSource.namec                 C   rh   r%   ri   r.   r   r   r   r     rj   zFloatTensorSource.guard_sourceNr)  r   r   r   r   rB     r*  rB  c                   @   r&  )CallMethodItemSourcer   c                 C   rk   )Nz.item()rl   r.   r   r   r   r     rm   zCallMethodItemSource.namec                 C   rh   r%   ri   r.   r   r   r   r     rj   z!CallMethodItemSource.guard_sourceNr)  r   r   r   r   rC  	  r*  rC  c                   @   r&  )ShapeEnvSourcer   c                 C   r   r(  r   r.   r   r   r   r     r   zShapeEnvSource.namec                 C   r,   r%   )r	   	SHAPE_ENVr.   r   r   r   r     r/   zShapeEnvSource.guard_sourceNr)  r   r   r   r   rD    r*  rD  c                   @   r&  )BackwardStateSourcer   c                 C   r   r(  r   r.   r   r   r   r      r   zBackwardStateSource.namec                 C   r,   r%   )r	   BACKWARD_STATEr.   r   r   r   r   #  r/   z BackwardStateSource.guard_sourceNr)  r   r   r   r   rF    r*  rF  Fonly_allow_inputrI  c                C   s:   t | trt| j|dS t | tsd S |r| jsd S | jS NrH  )r   r   get_local_source_namerg   r   r!   r    r   rI  r   r   r   rK  '  s   


rK  c                C   s   t | |dd uS rJ  )rK  rL  r   r   r   is_from_local_source3  rm   rM  c                 C   s   t | d uS r%   )get_global_source_namer   r   r   r   is_from_global_source7  rN   rO  c                 C   s(   t | tr
t| jS t | tsd S | jS r%   )r   r   rN  rg   rP   rQ   r   r   r   r   rN  ;  s
   


rN  c                 C   s,   t | tr
t| jS t | to| jo| j S r%   )r   r   is_from_nonlocal_sourcerg   r   r#   r!   r   r   r   r   rP  C  s   


rP  c                 C   &   t | trdS t | trt| jS dS r   )r   r   r   is_from_closure_sourcerg   r   r   r   r   rR  M  s
   


rR  targetc                 C   s   t | trt| j|S | |kS r%   )r   r   is_from_sourcerg   )r   rS  r   r   r   rT  U  s   
rT  c                 C   rQ  r   )r   r   r   &is_from_unspecialized_nn_module_sourcerg   r   r   r   r   rU  [  
   


rU  c                 C   rQ  r   )r   r"  r   .is_from_unspecialized_builtin_nn_module_sourcerg   r   r   r   r   rW  d  rV  rW  c                 C   rQ  r   )r   r   r   )is_from_unspecialized_param_buffer_sourcerg   r   r   r   r   rX  m  rV  rX  c                 C   rQ  r   )r   r   r   $is_from_flatten_script_object_sourcerg   r   r   r   r   rY  v  rV  rY  c                 C   rQ  r   )r   r  r   is_from_optimizer_sourcerg   r   r   r   r   rZ    rV  rZ  c                 C   sr   t | trdS t | trt | jtr| jjdkrdS t | tr-t | jtr-| jjdkr-dS t | tr7t| jS dS )NTr   r   F)	r   r   r  rg   ru   rv   r   r   is_from_defaultsr   r   r   r   r[    s"   




r[  c                 C   rQ  r   )r   r   r   is_from_skip_guard_sourcerg   r   r   r   r   r\    s
   


r\  )nr   r   enum	functoolstypingr   r   r   r   r   torch._guardsr   r   r	   r
   r   r   bytecode_transformationr   r   r$   r   r-   LOCAL_SPECIALIZED_NN_MODULErZ   GLOBAL_SPECIALIZED_NN_MODULELOCAL_UNSPECIALIZED_NN_MODULEGLOBAL_UNSPECIALIZED_NN_MODULE%LOCAL_UNSPECIALIZED_BUILTIN_NN_MODULE&GLOBAL_UNSPECIALIZED_BUILTIN_NN_MODULELOCAL_FSDP_MODULEGLOBAL_FSDP_MODULEr   r!  r#  r%  r:   r   r8   r   	dataclassr   r=   rD   rP   r]   re   rq   ru   r   r   r   r   r   r   r   r   r   r   r   Enumr   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r  r  r   r"  r$  r'  r+  r7  r   r?  rA  rB  rC  rD  rF  rK  rM  rO  rN  rP  rR  rT  	lru_cacherU  rW  rX  rY  rZ  r[  r\  r   r   r   r   <module>   sx   




















(





$
&


$
*
(


















	


