o
    ei                     @   sX	  d Z ddlZddlZddlZddl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mZmZmZ ddlmZ dd	lmZmZmZ e	rLd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e de,fddZ-ddede*de,fddZ.eddG dd deZ/eddG dd deZ0eddG dd deZ1eddG dd deZ2eddG d d! d!eZ3eddG d"d# d#eZ4eddG d$d% d%eZ5eddG d&d' d'e5Z6eddG d(d) d)eZ7eddG d*d+ d+e7Z8eddG d,d- d-eZ9eddG d.d/ d/eZ:eddG d0d1 d1eZ;eddG d2d3 d3eZ<eddG d4d5 d5eZ=eddG d6d7 d7eZ>eddG d8d9 d9eZ?eddG d:d; d;e7Z@eddG d<d= d=e7ZAeddG d>d? d?eZBeddG d@dA dAeZCG dBdC dCejDZEeddG dDdE dEeZFeddG dFdG dGeZGeddG dHdI dIeZHeddG dJdK dKeZIeddG dLdM dMeZJeddG dNdO dOeZKeddG dPdQ dQeZLG dRdS dSeZMeddG dTdU dUeZNeddG dVdW dWeZOeddG dXdY dYeZPeddG dZd[ d[eZQeddG d\d] d]eZReddG d^d_ d_eZSeddG d`da daeOZTeddG dbdc dceOZUeddG ddde deeZVeddG dfdg dgeZWeddG dhdi dieZXeddG djdk dkeZYeddG dldm dmeZZeddG dndo doeZZ[eddG dpdq dqe[Z\eddG drds dseZZ]eddG dtdu dueZ^eddG dvdw dweZ_eddG dxdy dyeZ`eddG dzd{ d{eZaeddG d|d} d}eZbeddG d~d deZceddG dd deZdeddG dd deZeeddG dd deZfeddG dd deZgeddG dd deZhejidddede*dee, fddZjejidddede*de*fddZkejidede*fddZlejidedB de,dB fddZmejidede*fddZnejidede*fddZoejidedede*fddZpejidede*fddZqejidede*fddZrejidede*fddZsejidede*fddZtejidede*fddZuejidede*fddZvejidede*fddZwd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)Callable)AnyOptionalTYPE_CHECKINGUnion)device)ChainedSourcedataclass_with_cached_hashGuardGuardSourceSource   )utils)create_binary_subscrcreate_build_tuplecreate_call_function)	PyCodegensourcereturnc                 C   s<   t | trdS z| j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   ^/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/torch/_dynamo/source.pyis_constant_sourcem   s   
r   c                 C   s*   | d u rdS z| j W S  ty   Y dS w )Nz<unknown source>)namer   r   r   r   r   _get_source_debug_namey   s   r    Fs
apply_reprc                 C   s*   |rt | } nt| } | ddddS )a!  
    Escapes curly brackets for format strings.
    e.g. "frozenset({0})" becomes "frozenset({{0}})".
    This is used by _name_template for example, because it's
    expected to return a format string, but we may wish to include
    strings that should not be accidentally formatted.
    {z{{}z}})reprstrreplace)r!   r"   r   r   r   _esc_str   s   
r(   T)frozenc                   @   sr   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ed	efddZej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 r0   )r   LOCALr5   r   r   r   r         zLocalSource.guard_sourcec                 C      dt | jdd dS )NzL[Tr"   ]r(   r+   r9   r   r   r   _name_template      zLocalSource._name_templater/   r   r   N)__name__
__module____qualname__r&   __annotations__r,   boolr-   r   	frozensetr.   r6   propertyr   r   	functoolscached_propertyr?   r   r   r   r   r*      s   
 
r*   c                   @   sD   e Zd ZU eed< dddZedefdd	Zedefd
dZ	dS )TempLocalSourcer+   r/   r   r   Nc                 C      | || j d S r0   r2   r3   r+   r4   r   r   r   r6         zTempLocalSource.reconstructc                 C   r7   r0   )r   
TEMP_LOCALr9   r   r   r   r      r:   zTempLocalSource.guard_sourcec                 C   s   t d)NzhCannot create guard on TempLocalSource - this is an internal Dynamo bug. Please file an issue on GitHub.r   r9   r   r   r   r?      s   zTempLocalSource._name_templaterA   )
rB   rC   rD   r&   rE   r6   rH   r   r   r?   r   r   r   r   rK      s   
 
rK   c                   @   F   e Zd ZU eed< dddZedefdd	Ze	j
defd
dZdS )SyntheticLocalSourcer+   r/   r   r   Nc                 C   rL   r0   rM   r4   r   r   r   r6      rN   z SyntheticLocalSource.reconstructc                 C   r7   r0   )r   SYNTHETIC_LOCALr9   r   r   r   r      r:   z!SyntheticLocalSource.guard_sourcec                 C   r;   )NzSYNTHETIC_LOCAL[Tr<   r=   r>   r9   r   r   r   r?      r@   z#SyntheticLocalSource._name_templaterA   rB   rC   rD   r&   rE   r6   rH   r   r   rI   rJ   r?   r   r   r   r   rR         
 
rR   c                   @   sF   e Zd ZU eed< edefddZddd	Ze	j
defd
dZdS )RandomValueSourcerandom_call_indexr   c                 C   r7   r0   )r   RANDOM_VALUEr9   r   r   r   r      r:   zRandomValueSource.guard_sourcer/   r   Nc                 C   s8   | ||jjj | || j | t  d S r0   )r2   r3   txoutputrandom_values_varcreate_load_constrW   r   r4   r   r   r   r6      s   zRandomValueSource.reconstructc                 C      dt | j S )Nrandom_value_)r(   rW   r9   r   r   r   r?         z RandomValueSource._name_templaterA   )rB   rC   rD   intrE   rH   r   r   r6   rI   rJ   r&   r?   r   r   r   r   rV      s   
 
rV   c                   @   rQ   )GlobalSourceglobal_namer/   r   r   Nc                 C      | |j| jdd d S NTaddr2   create_load_globalrb   r4   r   r   r   r6         zGlobalSource.reconstructc                 C   r7   r0   r   GLOBALr9   r   r   r   r      r:   zGlobalSource.guard_sourcec                 C   r;   )NG[Tr<   r=   r(   rb   r9   r   r   r   r?      r@   zGlobalSource._name_templaterA   rT   r   r   r   r   ra      rU   ra   c                   @   rQ   )GlobalWeakRefSourcerb   r/   r   r   Nc                    (      fdd  tdd d S )Nc                      s      jjddS rd   rg   r   r/   r5   r   r   <lambda>   s    z1GlobalWeakRefSource.reconstruct.<locals>.<lambda>r   Fadd_push_nullextend_outputr   r4   r   rp   r   r6      s   zGlobalWeakRefSource.reconstructc                 C   r7   r0   rj   r9   r   r   r   r     r:   z GlobalWeakRefSource.guard_sourcec                 C   r;   )Nrl   Tr<   z]()rm   r9   r   r   r   r?     r@   z"GlobalWeakRefSource._name_templaterA   rT   r   r   r   r   rn      s   
 
rn   c                   @   (   e Zd Zd	ddZedefddZdS )
WeakRefCallSourcer/   r   r   Nc                    ro   )Nc                      s
    j S r0   baser   rp   r   r   rq     s   
 z/WeakRefCallSource.reconstruct.<locals>.<lambda>r   Frr   r4   r   rp   r   r6     s   zWeakRefCallSource.reconstructc                 C      dS )Nz{0}()r   r9   r   r   r   r?        z WeakRefCallSource._name_templaterA   rB   rC   rD   r6   rH   r&   r?   r   r   r   r   rv         
rv   c                   @      e Zd ZdS )CallFunctionNoArgsSourceNrB   rC   rD   r   r   r   r   r~         r~   c                   @   >   e Zd ZU eed< dddZddd	Zejdefd
dZ	dS )
AttrSourcememberr   Nc                 C   .   | j sJ dd| jvsJ d| jdd S )Nz9Can't construct an AttrSource without a valid base source.z,AttrSource member must not contain '.', got =. Use OutputGraph.get_chained_attr_source() for dotted paths.rx   r   r9   r   r   r   __post_init__  s   zAttrSource.__post_init__r/   r   c                 C       || j  ||| j d S r0   rx   rt   create_load_attrsr   r4   r   r   r   r6   &     
zAttrSource.reconstructc                 C   s0   | j  sdt| j dd dS dt| j  S )Nzgetattr({0}, Tr<   ){0}.)r   isidentifierr(   r9   r   r   r   r?   *  s   
zAttrSource._name_templater   NrA   
rB   rC   rD   r&   rE   r   r6   rI   rJ   r?   r   r   r   r   r     s   
 

r   c                   @   s0   e Zd ZU dZejddZeed< d	ddZ	dS )
CellContentsSourcez
    Source for closure cell contents that also stores the freevar name.
    This allows guard failure messages to show which variable the closure cell refers to.
     )defaultfreevar_namer   Nc                 C   s$   | j sJ d| jdksJ dd S )Nz@Can't construct a CellContentsSource without a valid base sourcecell_contentsz8CellContentsSource should only be used for cell_contentsr   r9   r   r   r   r   :  s   z CellContentsSource.__post_init__r   )
rB   rC   rD   __doc__dataclassesfieldr   r&   rE   r   r   r   r   r   r   1  s   
 r   c                   @   r   )GenericAttrSourcer   r   Nc                 C   r   )Nz?Can't construct a GenericAttrSource without a valid base sourcer   z3GenericAttrSource member must not contain '.', got r   r   r9   r   r   r   r   G  s   zGenericAttrSource.__post_init__r/   r   c                 C   r   r0   r   r4   r   r   r   r6   P  r   zGenericAttrSource.reconstructc                 C   r;   )Nzobject.__getattribute__({0}, Tr<   r   r(   r   r9   r   r   r   r?   T     z GenericAttrSource._name_templater   rA   r   r   r   r   r   r   C  s   
 

	r   c                   @   ru   )
TypeDictSourcer/   r   r   Nc                 C      || j  ||d d S )N__dict__rx   rt   r   r4   r   r   r   r6   ^     
zTypeDictSource.reconstructc                 C   ry   )Nzdict({0}.__dict__)r   r9   r   r   r   r?   b  s   zTypeDictSource._name_templaterA   r{   r   r   r   r   r   \  r|   r   c                   @   ru   )
TypeMROSourcer/   r   r   Nc                 C   r   )N__mro__r   r4   r   r   r   r6   n  r   zTypeMROSource.reconstructc                 C   ry   )Nz{0}.__mro__r   r9   r   r   r   r?   r  rz   zTypeMROSource._name_templaterA   r{   r   r   r   r   r   l  r|   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   rL   r0   )r2   create_load_closurer+   r4   r   r   r   r6     s   zLocalCellSource.reconstructrA   )rB   rC   rD   r   r&   rE   r6   r   r   r   r   r   w  s   
 r   c                   @   ru   )

CodeSourcer/   r   r   Nc                 C   r   )N__code__r   r4   r   r   r   r6     r   zCodeSource.reconstructc                 C   ry   )Nz{0}.__code__r   r9   r   r   r   r?     rz   zCodeSource._name_templaterA   r{   r   r   r   r   r     r|   r   c                   @   ru   )
ClosureSourcer/   r   r   Nc                 C   r   )N__closure__r   r4   r   r   r   r6     r   zClosureSource.reconstructc                 C   ry   )Nz{0}.__closure__r   r9   r   r   r   r?     rz   zClosureSource._name_templaterA   r{   r   r   r   r   r     r|   r   c                   @   s8   e Zd ZU dZeed< dddZejdefd	d
Z	dS )
GradSourcegradr   r/   r   r   Nc                 C   r   r0   r   r4   r   r   r   r6     r   zGradSource.reconstructc                 C   r]   )Nr   r   r9   r   r   r   r?     r_   zGradSource._name_templaterA   )
rB   rC   rD   r   r&   rE   r6   rI   rJ   r?   r   r   r   r   r     s
   
 
r   c                   @       e Zd ZejdefddZdS )ParamBufferSourcer   c                 C      t | jj S r0   #_GUARD_SOURCE_SPECIALIZED_NN_MODULErx   r   r9   r   r   r   r        zParamBufferSource.guard_sourceNrB   rC   rD   rI   rJ   r   r   r   r   r   r   r         r   c                   @   r}   )UnspecializedParamBufferSourceNr   r   r   r   r   r     r   r   c                   @   sl   e Zd ZU dZee ed< edefddZ	e
j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   r7   r0   )r   	EPHEMERALr9   r   r   r   r     r:   zEphemeralSource.guard_sourcec                 C   s(   | j d ur
d| j  nd}dt| dS )Nz: r   z
<ephemeral>)r   r(   )r5   r   r   r   r   r?     s   zEphemeralSource._name_templatefn.c                 C      t r0   rP   r5   r   r   r   r   
make_guard     zEphemeralSource.make_guardc                 C   ry   NTr   r9   r   r   r   is_ephemeral  r   zEphemeralSource.is_ephemeral)rB   rC   rD   r   r   r&   rE   rH   r   r   rI   rJ   r?   r   r   r
   r   rF   r   r   r   r   r   r     s   
 r   c                   @   ru   )
SkipGuardSourcer/   r   r   Nc                 C   s   | j | d S r0   )rx   r6   r4   r   r   r   r6     s   zSkipGuardSource.reconstructc                 C   ry   Nz{0}r   r9   r   r   r   r?     rz   zSkipGuardSource._name_templaterA   r{   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   s<   | t ju rdS | t ju rdS | t ju rdS tdt|  )Nsizestridestorage_offset
unhandled )r   SIZESTRIDESTORAGE_OFFSETAssertionErrorr(   r9   r   r   r   method_name  s   


zTensorProperty.method_nameN)rB   rC   rD   r   r   r   r&   r   r   r   r   r   r     s
    r   c                   @   sN   e Zd ZU eed< dZee ed< dddZdd	d
Z	e
j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 r0   )rx   r   r   r   r   r9   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tj  S )Ncall_)load_import_fromr   rB   r(   r   r   r   rp   r   r   rq     s    z2TensorPropertySource.reconstruct.<locals>.<lambda>r   r   F)rs   rx   r   r2   r\   rt   r   r4   r   rp   r   r6     s   

z TensorPropertySource.reconstructc                 C   sn   | j tju rdt| j dS | j tju rdt| j dS | j tju r-| jd u s+J dS tdt| j  )Nz{0}.size()[r=   z{0}.stride()[z{0}.storage_offset()r   )r   r   r   r(   r   r   r   r   r9   r   r   r   r?     s   z#TensorPropertySource._name_templater   rA   )rB   rC   rD   r   rE   r   r   r`   r   r6   rI   rJ   r&   r?   r   r   r   r   r     s   
 

r   c                   @   >   e Zd ZU eed< dddZddd	Zejde	fd
dZ
dS )IndexedSourcer   r   Nc                 C      | j d usJ d S r0   rw   r9   r   r   r   r   "     zIndexedSource.__post_init__r/   r   c                 C   r   r0   rP   r4   r   r   r   r6   %  r   zIndexedSource.reconstructc                 C   s   dt | j dS )N(z, {0}))r(   r   r9   r   r   r   r?   (  s   zIndexedSource._name_templater   rA   )rB   rC   rD   r`   rE   r   r6   rI   rJ   r&   r?   r   r   r   r   r     s   
 

r   c                   @   2   e Zd ZdddZdddZedefd	d
ZdS )NegateSourcer   Nc                 C   r   r0   rw   r9   r   r   r   r   /  r   zNegateSource.__post_init__r/   r   c                 C   r   r0   rP   r4   r   r   r   r6   2  r   zNegateSource.reconstructc                 C   ry   )Nz{0}.__neg__()r   r9   r   r   r   r?   5  s   zNegateSource._name_templater   rA   rB   rC   rD   r   r6   rH   r&   r?   r   r   r   r   r   -  
    

r   c                   @   r   )ConvertIntSourcer   Nc                 C   r   r0   rw   r9   r   r   r   r   =  r   zConvertIntSource.__post_init__r/   r   c                 C      || j  d S r0   rw   r4   r   r   r   r6   @     zConvertIntSource.reconstructc                 C   ry   )Nz%cast_symbool_to_symint_guardless({0})r   r9   r   r   r   r?   C  rz   zConvertIntSource._name_templater   rA   r   r   r   r   r   r   ;  r   r   c                   @   s<   e Zd ZU eed< dddZddd	Zedefd
dZ	dS )DynamicScalarSourceis_intr   Nc                 C   r   r0   rw   r9   r   r   r   r   L  r   z!DynamicScalarSource.__post_init__r/   r   c                    0      fdd  | j  tdd d S )Nc                           ddS )Nbuiltinsr`   r   r   r/   r   r   rq   T      z1DynamicScalarSource.reconstruct.<locals>.<lambda>r   Frs   rx   rt   r   r4   r   r   r   r6   O  s   
zDynamicScalarSource.reconstructc                 C   ry   )Nzint({0})r   r9   r   r   r   r?   X  rz   z"DynamicScalarSource._name_templater   rA   )
rB   rC   rD   rF   rE   r   r6   rH   r&   r?   r   r   r   r   r   H  s   
 

	r   c                   @   r   )FlattenScriptObjectSourcer   Nc                 C   r   r0   rw   r9   r   r   r   r   _  r   z'FlattenScriptObjectSource.__post_init__r/   r   c                 C   r   r0   rw   r4   r   r   r   r6   b  r   z%FlattenScriptObjectSource.reconstructc                 C   ry   )Nz{0}.__obj_flatten__()r   r9   r   r   r   r?   e  rz   z(FlattenScriptObjectSource._name_templater   rA   r   r   r   r   r   r   ]  r   r   c                   @   r   )ScriptObjectQualifiedNameSourcer   Nc                 C   r   r0   rw   r9   r   r   r   r   l  r   z-ScriptObjectQualifiedNameSource.__post_init__r/   r   c                 C   r   r0   rw   r4   r   r   r   r6   o  r   z+ScriptObjectQualifiedNameSource.reconstructc                 C   ry   )Nz{0}._type().qualified_name()r   r9   r   r   r   r?   r  rz   z.ScriptObjectQualifiedNameSource._name_templater   rA   r   r   r   r   r   r   j  r   r   c                   @   ru   )
AttrProxySourcer/   r   r   Nc                 C   r   r0   rw   r4   r   r   r   r6   x  r   zAttrProxySource.reconstructc                 C   ry   )Nz{0}.get_base()r   r9   r   r   r   r?   {  rz   zAttrProxySource._name_templaterA   r{   r   r   r   r   r   w  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ejdefddZdS )DefaultsSourceidx_keyFis_kw)initr%   comparer   _namer   Nc              	   C   s   | j sJ d| jr/t| jtsJ t| dd t| ddt| j dt| j d d S t| jt	s7J t| dd t| ddt| j d	t| 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   r   z['z']__defaults__[r=   )
rx   r   r   r   r&   object__setattr__r(   r   r`   r9   r   r   r   r     s     zDefaultsSource.__post_init__r/   r   c                 C   s>   || j  ||| j ||| j |t  d S r0   )rx   rt   r   r   r2   r\   r   r   r4   r   r   r   r6     s   
zDefaultsSource.reconstructc                 C      | j S r0   )r   r9   r   r   r   r?     r:   zDefaultsSource._name_templater   rA   )rB   rC   rD   r   r`   r&   rE   r   rF   r   r   r   r   r6   rI   rJ   r?   r   r   r   r   r     s   
 

r   c                       s`   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
ej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)rx   r   r   slicesuperr   
__reduce__r9   	__class__r   r   r     s
   zGetItemSource.__post_init__r/   r   c                 C   sH   || j  | jr|||   n	||| j |t  d S r0   )rx   r   r2   r\   unpack_slicer   r   r4   r   r   r   r6     s
   
zGetItemSource.reconstructc                 C   s   | j sJ | j\}}|| S r0   )r   r   )r5   slice_class
slice_argsr   r   r   r     s   

zGetItemSource.unpack_slicec                 C   sD   t | jtrJ | jrdt|  dd dS dt| jdd dS )N{0}[Tr<   r=   )r   r   r   r   r(   r   r9   r   r   r   r?     s   zGetItemSource._name_templater   rA   )rB   rC   rD   r   rE   r   rF   r   r6   r   r   rI   rJ   r&   r?   __classcell__r   r   r   r   r     s   
 
r   c                   @   sB   e Zd ZU eed< dddZejdefdd	Z	de
fd
dZdS )ConstDictKeySourcer   r/   r   r   Nc                    B      fdd  | j   | j  tdd d S )Nc                           tjdS )Ndict_keys_getitemr   r   rB   r   r   r   r   rq         z0ConstDictKeySource.reconstruct.<locals>.<lambda>r   Frs   rx   r2   r\   r   rt   r   r4   r   r   r   r6        

zConstDictKeySource.reconstructc                 C   r;   )Nzlist(dict.keys({0}))[Tr<   r=   r(   r   r9   r   r   r   r?        z!ConstDictKeySource._name_templatec                 C   ry   r   r   r9   r   r   r   is_dict_key  r   zConstDictKeySource.is_dict_keyrA   )rB   rC   rD   r   rE   r6   rI   rJ   r&   r?   rF   r  r   r   r   r   r    s   
 
r  c                   @   sL   e Zd ZU eed< dddZddd	Zej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   r5   r  r   r   r   r     s   z-NonSerializableSetGetItemSource.__post_init__r/   r   c                    r  )Nc                      r  )Nset_getitemr  r   r   r   r   rq     r	  z=NonSerializableSetGetItemSource.reconstruct.<locals>.<lambda>r   Fr
  r4   r   r   r   r6     r  z+NonSerializableSetGetItemSource.reconstructc                 C   r;   )Nz
list({0})[Tr<   r=   r  r9   r   r   r   r?     r  z.NonSerializableSetGetItemSource._name_templatec                 C   ry   )NFr   r9   r   r   r   r    r   z+NonSerializableSetGetItemSource.is_dict_keyr   rA   )rB   rC   rD   r`   rE   r   r6   rI   rJ   r&   r?   rF   r  r   r   r   r   r    s   
 

r  c                   @   r   )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__r/   r   c                 C   sD   || j  t| jtr|| j n	||| j |t  d S r0   )rx   r   r   r   r2   r\   r   r4   r   r   r   r6     s
   
zDictGetItemSource.reconstructc                 C   s6   t | jtrdt| jj dS dt| jdd dS )Nr  r=   Tr<   r   r   r  r(   r   r9   r   r   r   r?        z DictGetItemSource._name_templater   rA   rB   rC   rD   r   rE   r   r6   rI   rJ   r&   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__r/   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   rq   0  r	  z7DictSubclassGetItemSource.reconstruct.<locals>.<lambda>r   F)	rs   rx   r   r   r   r2   r\   rt   r   r4   r   r   r   r6   +  s   

z%DictSubclassGetItemSource.reconstructc                 C   s6   t | jtrdt| jj dS dt| jdd dS )Nzdict.__getitem__({0}, r   r  Tr<   r=   r  r9   r   r   r   r?   >  r  z(DictSubclassGetItemSource._name_templater   rA   r  r   r   r   r   r    s   
 

r  c                   @   s.   e Zd ZdZd
ddZej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   rq   R  r	  z/ListGetItemSource.reconstruct.<locals>.<lambda>>List[slice] is a temporary object and should not have a sourcer   F)	rs   rx   r   RuntimeErrorr2   r\   r   rt   r   r4   r   r   r   r6   L  s   

zListGetItemSource.reconstructc                 C   s4   t | jtrJ | jrtddt| jdd dS )Nr!  zlist.__getitem__({0}, Tr<   r   )r   r   r   r   r"  r(   r9   r   r   r   r?   b  s   z ListGetItemSource._name_templaterA   )	rB   rC   rD   r   r6   rI   rJ   r&   r?   r   r   r   r   r  F  s
    
r  c                   @   s*   e Zd Zd	ddZejdefddZdS )
TupleIteratorGetItemSourcer/   r   r   Nc                    r  )Nc                      r  )Ntuple_iterator_getitemr  r   r   r   r   rq   t  r	  z8TupleIteratorGetItemSource.reconstruct.<locals>.<lambda>r   Fr
  r4   r   r   r   r6   r  r  z&TupleIteratorGetItemSource.reconstructc                 C   r;   )Nz___tuple_iterator_getitem({0}, Tr<   r   r  r9   r   r   r   r?   z  r   z)TupleIteratorGetItemSource._name_templaterA   )rB   rC   rD   r6   rI   rJ   r&   r?   r   r   r   r   r#  p  s    
r#  c                   @   ru   )
NamedTupleFieldsSourcer/   r   r   Nc                 C   r   )N_fieldsr   r4   r   r   r   r6     r   z"NamedTupleFieldsSource.reconstructc                 C   ry   )Nz___namedtuple_fields({0})r   r9   r   r   r   r?     rz   z%NamedTupleFieldsSource._name_templaterA   r{   r   r   r   r   r%    r|   r%  c                   @   ru   )
DataclassFieldsSourcer/   r   r   Nc                    r   )Nc                      r  )Ndataclass_fieldsr  r   r   r   r   rq     r	  z3DataclassFieldsSource.reconstruct.<locals>.<lambda>r   Fr   r4   r   r   r   r6     s
   

z!DataclassFieldsSource.reconstructc                 C   ry   )Nz___dataclass_fields({0})r   r9   r   r   r   r?     rz   z$DataclassFieldsSource._name_templaterA   r{   r   r   r   r   r'    s    
r'  c                   @   r   )
TypeSourcer   Nc                 C   r   r0   rw   r9   r   r   r   r     r   zTypeSource.__post_init__r/   r   c                    r   )Nc                      r   )Nr   typer   r   r   r   r   rq     r   z(TypeSource.reconstruct.<locals>.<lambda>r   Fr   r4   r   r   r   r6        
zTypeSource.reconstructc                 C   ry   )Nz	type({0})r   r9   r   r   r   r?     rz   zTypeSource._name_templater   rA   r   r   r   r   r   r)    s
    

r)  c                   @   ru   )
OptimizerSourcer/   r   r   Nc                 C   r   r0   rw   r4   r   r   r   r6     r   zOptimizerSource.reconstructc                 C   ry   r   r   r9   r   r   r   r?     rz   zOptimizerSource._name_templaterA   r{   r   r   r   r   r,    r   r,  c                   @   s<   e Zd ZdddZejdefddZede	fd	d
Z
dS )NNModuleSourcer/   r   r   Nc                 C   r   r0   rw   r4   r   r   r   r6     r   zNNModuleSource.reconstructc                 C   r   r0   r   r9   r   r   r   r     r   zNNModuleSource.guard_sourcec                 C   ry   r   r   r9   r   r   r   r?     rz   zNNModuleSource._name_templaterA   )rB   rC   rD   r6   rI   rJ   r   r   rH   r&   r?   r   r   r   r   r-    s    
r-  c                   @   r   )UnspecializedNNModuleSourcer   c                 C   r   r0   )%_GUARD_SOURCE_UNSPECIALIZED_NN_MODULErx   r   r9   r   r   r   r     r   z(UnspecializedNNModuleSource.guard_sourceNr   r   r   r   r   r.    r   r.  c                   @   r   )"UnspecializedBuiltinNNModuleSourcer   c                 C   r   r0   )-_GUARD_SOURCE_UNSPECIALIZED_BUILTIN_NN_MODULErx   r   r9   r   r   r   r     r   z/UnspecializedBuiltinNNModuleSource.guard_sourceNr   r   r   r   r   r0    r   r0  c                   @   r   )FSDPNNModuleSourcer   c                 C   r   r0   )_GUARD_SOURCE_FSDP_MODULErx   r   r9   r   r   r   r     r   zFSDPNNModuleSource.guard_sourceNr   r   r   r   r   r2    r   r2  c                   @   0   e Zd ZedefddZedefddZdS )GlobalStateSourcer   c                 C   ry   Nr   r   r9   r   r   r   r?     rz   z GlobalStateSource._name_templatec                 C   r7   r0   rj   r9   r   r   r   r     r:   zGlobalStateSource.guard_sourceNrB   rC   rD   rH   r&   r?   r   r   r   r   r   r   r5    
    r5  c                   @   sT   e Zd ZU dZeed< dddZejdefddZ	dddZ
edefddZdS )ImportSourcezPoints to an imported module - used instead of GlobalSource
    in case the user has overridden the module name in their local namespacemodule_namer   Nc                 C   s$   ddl m}m} || |j d S )Nr   )GuardBuilderinstall_guard)guardsr;  r<  r   ID_MATCH)r5   r;  r<  r   r   r   r     s   zImportSource.__post_init__c                 C   s   d| j  dS )Nz__import__('z'))r:  r9   r   r   r   r?     s   zImportSource._name_templater/   r   c                 C   s&   | |dtd|| jg d S )Nr   )rt   r\   r   create_import_namer:  r4   r   r   r   r6     s   
zImportSource.reconstructc                 C   r7   r0   rj   r9   r   r   r   r     r:   zImportSource.guard_sourcer   rA   )rB   rC   rD   r   r&   rE   r   rI   rJ   r?   r6   rH   r   r   r   r   r   r   r9    s   
 

	r9  c                   @   sT   e Zd ZU eed< ejdefddZdefddZ	dd
dZ
edefddZd	S )TorchFunctionModeStackSourceindr   c                 C   s   dt |   dS )Nz$___get_torch_function_mode_stack_at(r   )r(   
_get_indexr9   r   r   r   r?     s   z+TorchFunctionModeStackSource._name_templatec                 C   s   ddl m} || jS )Nr   )TorchFunctionModeStackVariable)variables.torch_functionrC  get_mode_indexrA  )r5   rC  r   r   r   rB    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   rq     s    z:TorchFunctionModeStackSource.reconstruct.<locals>.<lambda>r   F)rs   rt   r\   rB  r   r4   r   r   r   r6     s
   
z(TorchFunctionModeStackSource.reconstructc                 C   r7   r0   rj   r9   r   r   r   r     r:   z)TorchFunctionModeStackSource.guard_sourcerA   )rB   rC   rD   r`   rE   rI   rJ   r&   r?   rB  r6   rH   r   r   r   r   r   r   r@    s   
 
	r@  c                   @   sX   e Zd ZU eed< dddZedefdd	Ze	j
defd
dZdedefddZdS )r   source_namer/   r   r   Nc                 C   rc   )NFre   )r2   rh   rG  r4   r   r   r   r6     ri   zConstantSource.reconstructc                 C   r7   r0   )r   r   r9   r   r   r   r   !  r:   zConstantSource.guard_sourcec                 C   r   r0   )rG  r9   r   r   r   r?   %  r:   zConstantSource._name_templater   c                 C   r   r0   rP   r   r   r   r   r   )  r   zConstantSource.make_guardrA   )rB   rC   rD   r&   rE   r6   rH   r   r   rI   rJ   r?   r   r   r   r   r   r   r     s   
 
r   c                   @   s(   e Zd ZedefddZd	ddZdS )
NumpyTensorSourcer   c                 C   ry   )Nz___from_numpy({0})r   r9   r   r   r   r?   /  rz   z NumpyTensorSource._name_templater/   r   Nc                    r   )Nc                      r   )Ntorch	as_tensorr   r   r   r   r   rq   4  r   z/NumpyTensorSource.reconstruct.<locals>.<lambda>r   Fr   r4   r   r   r   r6   3  r+  zNumpyTensorSource.reconstructrA   )rB   rC   rD   rH   r&   r?   r6   r   r   r   r   rH  -  s    rH  c                   @      e Zd ZedefddZdS )SubclassAttrListSourcer   c                 C   ry   )Nz{0}.__tensor_flatten__()[0]r   r9   r   r   r   r?   ;  rz   z%SubclassAttrListSource._name_templateNrB   rC   rD   rH   r&   r?   r   r   r   r   rL  9      rL  c                   @   rK  )FloatTensorSourcer   c                 C   ry   )Nz___as_tensor({0})r   r9   r   r   r   r?   D  rz   z FloatTensorSource._name_templateNrM  r   r   r   r   rO  B  rN  rO  c                   @   rK  )CallMethodItemSourcer   c                 C   ry   )Nz
{0}.item()r   r9   r   r   r   r?   K  rz   z#CallMethodItemSource._name_templateNrM  r   r   r   r   rP  I  rN  rP  c                   @   r4  )ShapeEnvSourcer   c                 C   ry   r6  r   r9   r   r   r   r?   U  rz   zShapeEnvSource._name_templatec                 C   r7   r0   )r   	SHAPE_ENVr9   r   r   r   r   Y  r:   zShapeEnvSource.guard_sourceNr7  r   r   r   r   rQ  S  r8  rQ  c                   @   sF   e Zd ZU eed< ejdefddZddd	Z	e
defd
dZdS )CurrentStreamSourcer   r   c                 C   s"   dt | jj dt | jj dS )Nz$___get_current_stream(torch.device('z', z)))r(   r   r*  r   r9   r   r   r   r?   b  s   "z"CurrentStreamSource._name_templater/   r   Nc                    s   d}   fdd    fdd   | jjg | jjd ur4|d7 }  | jjg  t|d  tdd d S )Nr   c                      r  )Nget_current_streamr  r   r   r   r   rq   i  r	  z1CurrentStreamSource.reconstruct.<locals>.<lambda>c                      r   )NrI  r   r   r   r   r   r   rq   k  r   F)rs   rt   r\   r   r*  r   r   )r5   r/   num_argsr   r   r   r6   f  s   
zCurrentStreamSource.reconstructc                 C   r7   r0   rj   r9   r   r   r   r   s  r:   z CurrentStreamSource.guard_sourcerA   )rB   rC   rD   device_typerE   rI   rJ   r&   r?   r6   rH   r   r   r   r   r   r   rS  ^  s   
 
rS  c                   @   r4  )BackwardStateSourcer   c                 C   ry   r6  r   r9   r   r   r   r?   z  rz   z"BackwardStateSource._name_templatec                 C   r7   r0   )r   BACKWARD_STATEr9   r   r   r   r   ~  r:   z BackwardStateSource.guard_sourceNr7  r   r   r   r   rW  x  r8  rW  only_allow_inputrZ  c                C   s:   t | trt| j|dS t | tsd S |r| jsd S | jS NrY  )r   r   get_local_source_namerx   r*   r,   r+   r   rZ  r   r   r   r\    s   


r\  c                C   s   t | |dd uS r[  )r\  r]  r   r   r   is_from_local_source  r_   r^  c                 C   s   t | d uS r0   )get_global_source_namer   r   r   r   is_from_global_source  r   r`  c                 C   s(   t | tr
t| jS t | tsd S | jS r0   )r   r   r_  rx   ra   rb   r   r   r   r   r_    s
   


r_  c                 C   s,   t | tr
t| jS t | to| jo| j S r0   )r   r   is_from_nonlocal_sourcerx   r*   r.   r,   r   r   r   r   ra    s   


ra  c                 C   &   t | trdS t | trt| jS dS r   )r   r   r   is_from_closure_sourcerx   r   r   r   r   rc    
   


rc  targetc                 C   s   t | trt| j|S | |kS r0   )r   r   is_from_sourcerx   )r   re  r   r   r   rf    s   
rf  c                 C   rb  r   )r   r.  r   &is_from_unspecialized_nn_module_sourcerx   r   r   r   r   rg    rd  rg  c                 C   rb  r   )r   r0  r   .is_from_unspecialized_builtin_nn_module_sourcerx   r   r   r   r   rh    rd  rh  c                 C   rb  r   )r   r   r   )is_from_unspecialized_param_buffer_sourcerx   r   r   r   r   ri    rd  ri  c                 C   rb  r   )r   r   r   $is_from_flatten_script_object_sourcerx   r   r   r   r   rj    rd  rj  c                 C   rb  r   )r   r,  r   is_from_optimizer_sourcerx   r   r   r   r   rk    rd  rk  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  rx   r   r   r   r   is_from_defaultsr   r   r   r   rl    s"   




rl  c                 C   rb  r   )r   r   r   is_from_skip_guard_sourcerx   r   r   r   r   rm    s
   


rm  )F)xr   r   enumrI   collections.abcr   typingr   r   r   r   rI  r   rV  torch._guardsr   r	   r
   r   r   r   r   bytecode_transformationr   r   r   r/   r   r8   LOCAL_SPECIALIZED_NN_MODULErk   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/  r1  r3  rF   r   r&   r    r(   r*   rK   rR   rV   ra   rn   rv   r~   r   r   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.  r0  r2  r5  r9  r@  r   rH  rL  rO  rP  rQ  rS  rW  	lru_cacher\  r^  r`  r_  ra  rc  rf  rg  rh  ri  rj  rk  rl  rm  r   r   r   r   <module>   s   


	&	$$"()
	
	



