o
    Zhq                     @   s  d Z ddlZddlZddlmZmZmZ ddlmZm	Z	m
Z
 ddlmZ ddlmZ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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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,G d&d' d'ej-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 d0d1 d1eZ3ejd
dG d2d3 d3eZ4G d4d5 d5eZ5ejd
dG d6d7 d7eZ6ejd
dG d8d9 d9eZ7ejd
dG d:d; d;eZ8ejd
dG d<d= d=eZ9ejd
dG d>d? d?e7Z:ejd
dG d@dA dAe7Z;ejd
dG dBdC dCeZ<ejd
dG dDdE dEeZ=ejd
dG dFdG dGeZ>ejd
dG dHdI dIe>Z?ejd
dG dJdK dKe?Z@ejd
dG dLdM dMe>ZAejd
dG dNdO dOe
ZBejd
dG dPdQ dQe
ZCejd
dG dRdS dSe
ZDejd
dG dTdU dUeZEejd
dG dVdW dWeZFejd
dG dXdY dYeZGejd
dG dZd[ d[eZHejd
dG d\d] d]e
ZIejd
dG d^d_ d_e
ZJd`dadbe
fdcddZKdbe
fdedfZLdbe
fdgdhZMdbe
fdidjZNdbe
fdkdlZOdS )ma  
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OptionalUnion)ChainedSourceGuardSourceSource   )utils)create_call_functioncreate_instructionc                 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source r   C/var/www/auris/lib/python3.10/site-packages/torch/_dynamo/source.pyis_constant_source_   s   
r   T)frozenc                   @   sZ   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 Zd	d
 Zdd ZdS )LocalSource
local_nameFis_inputNdynamismis_derefed_cell_contentsc                 C   s,   | j r|| j d S ||| j d S N)r   Z
load_derefr   append_outputcreate_loadselfcodegenr   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   name      zLocalSource.name)__name__
__module____qualname__str__annotations__r   boolr   r   	frozensetr   r#   r   r+   r   r   r   r   r   k   s   
 r   c                   @   .   e Zd ZU eed< dd Zdd Zdd ZdS )	SyntheticLocalSourcer   c                 C      | || j d S r   )r   r   r   r    r   r   r   r#         z SyntheticLocalSource.reconstructc                 C   r$   r   )r   ZSYNTHETIC_LOCALr&   r   r   r   r      r'   z!SyntheticLocalSource.guard_sourcec                 C   s   d| j dS )NzSYNTHETIC_LOCAL[r)   )r   r&   r   r   r   r+         zSyntheticLocalSource.nameNr-   r.   r/   r0   r1   r#   r   r+   r   r   r   r   r5      
   
 r5   c                   @   r4   )	RandomValueSourcerandom_call_indexc                 C   r$   r   )r   ZRANDOM_VALUEr&   r   r   r   r      r'   zRandomValueSource.guard_sourcec                 C   s:   | ||jjj | || j | td d S NBINARY_SUBSCR)r   r   ZtxoutputZrandom_values_varcreate_load_constr<   r   r    r   r   r   r#      s   zRandomValueSource.reconstructc                 C   s   d| j  S )NZrandom_value_)r<   r&   r   r   r   r+      s   zRandomValueSource.nameN)r-   r.   r/   intr1   r   r#   r+   r   r   r   r   r;      s
   
 r;   c                   @   r4   )	GlobalSourceglobal_namec                 C      | |j| jdd d S NTaddr   create_load_globalrC   r    r   r   r   r#         zGlobalSource.reconstructc                 C   r$   r   r   GLOBALr&   r   r   r   r      r'   zGlobalSource.guard_sourcec                 C   r(   )NG[r)   r*   rC   r&   r   r   r   r+      r,   zGlobalSource.nameNr9   r   r   r   r   rB      r:   rB   c                   @   r4   )	GlobalWeakRefSourcerC   c                    (      fdd  tdd d S )Nc                      s      jjddS rE   rH   r   r"   r!   r   r   <lambda>   s    z1GlobalWeakRefSource.reconstruct.<locals>.<lambda>r   Fadd_push_nullextend_outputr
   r    r   rQ   r   r#      s   zGlobalWeakRefSource.reconstructc                 C   r$   r   rK   r&   r   r   r   r      r'   z GlobalWeakRefSource.guard_sourcec                 C   r(   )NrM   z]()rN   r&   r   r   r   r+      r,   zGlobalWeakRefSource.nameNr9   r   r   r   r   rO      s
   
 rO   c                   @   $   e Zd Zdd Zdd Zdd ZdS )WeakRefCallSourcec                    rP   )Nc                      s
    j S r   baser   rQ   r   r   rR      s   
 z/WeakRefCallSource.reconstruct.<locals>.<lambda>r   FrS   r    r   rQ   r   r#      s   zWeakRefCallSource.reconstructc                 C   
   | j  S r   rY   r   r&   r   r   r   r         
zWeakRefCallSource.guard_sourcec                 C      | j   dS )Nz()rY   r+   r&   r   r   r   r+         zWeakRefCallSource.nameNr-   r.   r/   r#   r   r+   r   r   r   r   rW      s    rW   c                   @      e Zd ZdS )CallFunctionNoArgsSourceNr-   r.   r/   r   r   r   r   rb          rb   c                   @   6   e Zd ZU eed< dd Zdd Zdd Zdd	 Zd
S )
AttrSourcememberc                 C   sb   | 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.rY   rg   )rY   rg   splitobject__setattr__rf   join)r!   Zmember_partsr   r   r   __post_init__   s   
zAttrSource.__post_init__c                 C       || j  ||| j d S r   rY   rU   create_load_attrsrg   r    r   r   r   r#         
zAttrSource.reconstructc                 C   rZ   r   r[   r&   r   r   r   r      r\   zAttrSource.guard_sourcec                 C   s:   | j  sd| j  d| j dS | j  d| j  S )Nzgetattr(, )rh   )rg   isidentifierrY   r+   r&   r   r   r   r+      s   
zAttrSource.nameN)	r-   r.   r/   r0   r1   rn   r#   r   r+   r   r   r   r   rf      s   
 	rf   c                   @   s"   e Zd ZU dZeed< dd ZdS )LocalCellSourcez
    Conceptually, this class is `LocalSource` for cell objects implicitly
    generated by Python (e.g., captured variables).
    r   c                 C   r6   r   )r   Zcreate_load_closurer   r    r   r   r   r#      s   zLocalCellSource.reconstructN)r-   r.   r/   __doc__r0   r1   r#   r   r   r   r   rv      s   
 rv   c                   @   s2   e Zd ZU dZeed< dd Zdd Zdd Zd	S )

GradSourceZgradrg   c                 C   ro   r   rp   r    r   r   r   r#     rr   zGradSource.reconstructc                 C   rZ   r   r[   r&   r   r   r   r     r\   zGradSource.guard_sourcec                 C   s   | j   d| j S )Nrh   )rY   r+   rg   r&   r   r   r   r+     r7   zGradSource.nameN)	r-   r.   r/   rg   r0   r1   r#   r   r+   r   r   r   r   rx   
  s
   
 rx   c                   @      e Zd Zdd ZdS )ParamBufferSourcec                 C      t | j  S r   #_GUARD_SOURCE_SPECIALIZED_NN_MODULErY   r   r&   r   r   r   r     r8   zParamBufferSource.guard_sourceNr-   r.   r/   r   r   r   r   r   rz         rz   c                   @   ra   )UnspecializedParamBufferSourceNrc   r   r   r   r   r      rd   r   c                   @   s>   e Zd ZU dZee ed< dd Zdd Zdd Z	d	d
 Z
dS )EphemeralSourceNdescc                 C   r$   r   )r   Z	EPHEMERALr&   r   r   r   r   2  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+   5  s   &zEphemeralSource.namec                 C      t r   r   r!   fnr   r   r   
make_guard8     zEphemeralSource.make_guardc                 C      dS NTr   r&   r   r   r   is_ephemeral;  r   zEphemeralSource.is_ephemeral)r-   r.   r/   r   r   r0   r1   r   r+   r   r   r   r   r   r   r   .  s   
 r   c                   @   s    e Zd ZdZdZdZdd ZdS )TensorPropertyr   r      c                 C   s.   | t ju rdS | t ju rdS | t ju rdS d S )NsizeZstrideZstorage_offset)r   SIZESTRIDESTORAGE_OFFSETr&   r   r   r   method_nameD  s   


zTensorProperty.method_nameN)r-   r.   r/   r   r   r   r   r   r   r   r   r   ?  s
    r   c                   @   sF   e Zd ZU eed< dZee ed< dd Zdd Z	dd	 Z
d
d ZdS )TensorPropertySourcepropNidxc                 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   )rY   r   r   r   r   r&   r   r   r   rn   R  s   z"TensorPropertySource.__post_init__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 )NZcall_)load_import_fromr	   r-   r   r   r   rQ   r   r   rR   [  s    z2TensorPropertySource.reconstruct.<locals>.<lambda>r   r   F)rT   rY   r   r   r@   rU   r
   r    r   rQ   r   r#   Y  s   

z TensorPropertySource.reconstructc                 C   rZ   r   r[   r&   r   r   r   r   g  r\   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()[r)   z
.stride()[z.storage_offset()z
unhandled )	r   r   r   rY   r+   r   r   r   AssertionErrorr&   r   r   r   r+   j  s   zTensorPropertySource.name)r-   r.   r/   r   r1   r   r   rA   rn   r#   r   r+   r   r   r   r   r   M  s   
 r   c                   @   re   )IndexedSourcer   c                 C      | j d usJ d S r   rX   r&   r   r   r   rn   z  r,   zIndexedSource.__post_init__c                 C   r   r   r   r    r   r   r   r#   }  r   zIndexedSource.reconstructc                 C   rZ   r   r[   r&   r   r   r   r     r\   zIndexedSource.guard_sourcec                 C   s   d| j  d| j  dS )N(rs   rt   )r   rY   r+   r&   r   r   r   r+     rJ   zIndexedSource.nameN)	r-   r.   r/   rA   r1   rn   r#   r   r+   r   r   r   r   r   v     
 r   c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
NegateSourcec                 C   r   r   rX   r&   r   r   r   rn     r,   zNegateSource.__post_init__c                 C   r   r   r   r    r   r   r   r#     r   zNegateSource.reconstructc                 C   rZ   r   r[   r&   r   r   r   r     r\   zNegateSource.guard_sourcec                 C   r]   )Nz
.__neg__()r^   r&   r   r   r   r+     s   zNegateSource.nameNr-   r.   r/   rn   r#   r   r+   r   r   r   r   r     
    r   c                   @   r   )
ConvertIntSourcec                 C   r   r   rX   r&   r   r   r   rn     r,   zConvertIntSource.__post_init__c                 C      || j  d S r   rX   r    r   r   r   r#     r8   zConvertIntSource.reconstructc                 C   rZ   r   r[   r&   r   r   r   r     r\   zConvertIntSource.guard_sourcec                 C      d| j   dS )Nz!cast_symbool_to_symint_guardless(rt   r^   r&   r   r   r   r+     r,   zConvertIntSource.nameNr   r   r   r   r   r     r   r   c                   @   r   )
FlattenScriptObjectSourcec                 C   r   r   rX   r&   r   r   r   rn     r,   z'FlattenScriptObjectSource.__post_init__c                 C   r   r   rX   r    r   r   r   r#     r8   z%FlattenScriptObjectSource.reconstructc                 C   rZ   r   r[   r&   r   r   r   r     r\   z&FlattenScriptObjectSource.guard_sourcec                 C   r]   )Nz.__obj_flatten__()r^   r&   r   r   r   r+     r_   zFlattenScriptObjectSource.nameNr   r   r   r   r   r     r   r   c                   @   r   )
ScriptObjectQualifiedNameSourcec                 C   r   r   rX   r&   r   r   r   rn     r,   z-ScriptObjectQualifiedNameSource.__post_init__c                 C   r   r   rX   r    r   r   r   r#     r8   z+ScriptObjectQualifiedNameSource.reconstructc                 C   rZ   r   r[   r&   r   r   r   r     r\   z,ScriptObjectQualifiedNameSource.guard_sourcec                 C   r]   )Nz._type().qualified_name()r^   r&   r   r   r   r+     r_   z$ScriptObjectQualifiedNameSource.nameNr   r   r   r   r   r     r   r   c                   @   rV   )AttrProxySourcec                 C   r   r   rX   r    r   r   r   r#     r8   zAttrProxySource.reconstructc                 C   rZ   r   r[   r&   r   r   r   r     r\   zAttrProxySource.guard_sourcec                 C   r]   )Nz.get_base()r^   r&   r   r   r   r+     r_   zAttrProxySource.nameNr`   r   r   r   r   r     s    r   c                   @   sz   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 Zd	d
 Zdd Zdd ZdS )DefaultsSourceidx_keyFis_kw)initr*   comparefield_namec              
   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   rh   z['z']__defaults__[r)   )
rY   r   r   r   r0   rk   rl   r+   r   rA   r&   r   r   r   rn     s   ""zDefaultsSource.__post_init__c                 C   s@   || j  ||| j ||| j |td d S r=   )rY   rU   rq   r   r   r@   r   r   r    r   r   r   r#     s   
zDefaultsSource.reconstructc                 C   rZ   r   r[   r&   r   r   r   r     r\   zDefaultsSource.guard_sourcec                 C      | j S r   )r   r&   r   r   r   r+     r'   zDefaultsSource.nameN)r-   r.   r/   r   rA   r0   r1   r   r2   dataclassesr   r   rn   r#   r   r+   r   r   r   r   r     s   
 r   c                       sR   e Zd ZU eed< dZeed<  fddZdd Zdd	 Z	d
d Z
dd Z  ZS )GetItemSourceindexFindex_is_slicec                    sD   | j d usJ t| jtr t d| j  t dd d S d S )Nr   r   T)rY   r   r   slicesuperrl   
__reduce__r&   	__class__r   r   rn     s
   zGetItemSource.__post_init__c                 C   sJ   || j  | jr|||   n	||| j |td d S r=   )rY   r   r   r@   unpack_slicer   r   r    r   r   r   r#      s
   
zGetItemSource.reconstructc                 C   rZ   r   r[   r&   r   r   r   r     r\   zGetItemSource.guard_sourcec                 C   s   | j sJ | j\}}|| S r   )r   r   )r!   Zslice_classZ
slice_argsr   r   r   r     s   

zGetItemSource.unpack_slicec                 C   sH   t | jtrJ | jr| j  d|  dS | j  d| jdS )Nr   r)   )r   r   r   r   rY   r+   r   r&   r   r   r   r+     s   zGetItemSource.name)r-   r.   r/   r   r1   r   r2   rn   r#   r   r   r+   __classcell__r   r   r   r   r     s   
 r   c                   @   re   )ConstDictKeySourcer   c                 C   rZ   r   r[   r&   r   r   r   r     r\   zConstDictKeySource.guard_sourcec                    B      fdd  | j   | j  tdd d S )Nc                           tjdS )NZdict_keys_getitemr   r	   r-   r   r"   r   r   rR   $      z0ConstDictKeySource.reconstruct.<locals>.<lambda>r   FrT   rY   r   r@   r   rU   r
   r    r   r   r   r#   "     

zConstDictKeySource.reconstructc                 C      d| j   d| jdS )Nzlist(dict.keys(z))[r)   rY   r+   r   r&   r   r   r   r+   *  s   zConstDictKeySource.namec                 C   r   r   r   r&   r   r   r   is_dict_key.  r   zConstDictKeySource.is_dict_keyN)	r-   r.   r/   r   r1   r   r#   r+   r   r   r   r   r   r     s   
 r   c                   @   re   )DictGetItemSourcer   c                 C   s0   ddl m} t| jts|| jsJ d S d S )Nr   )ConstantVariable)	variablesr   r   r   r   Z
is_literal)r!   r   r   r   r   rn   :  s   
zDictGetItemSource.__post_init__c                 C   rZ   r   r[   r&   r   r   r   r   A  r\   zDictGetItemSource.guard_sourcec                    sZ      fdd  | j t| jtr | j n	  | j  tdd d S )Nc                      r   )NZdict_getitemr   r   r   r   r   rR   I  r   z/DictGetItemSource.reconstruct.<locals>.<lambda>r   F)	rT   rY   r   r   r   r   r@   rU   r
   r    r   r   r   r#   D  s   

zDictGetItemSource.reconstructc                 C   sB   t | jtrd| j  d| j  dS | j  d| jdS )Nzdict.__getitem__(rs   rt   r   r)   )r   r   r   rY   r+   r&   r   r   r   r+   W  s   zDictGetItemSource.nameN)	r-   r.   r/   r   r1   rn   r   r#   r+   r   r   r   r   r   3  s   
 r   c                   @   s    e Zd ZdZdd Zdd ZdS )ListGetItemSourcezY
    Same as GetItemSource with reconstruct and name overridden to be list specific.
    c                    sP      fdd  | j | jrtd  | j  tdd d S )Nc                      r   )NZlist_getitemr   r   r   r   r   rR   j  r   z/ListGetItemSource.reconstruct.<locals>.<lambda>>List[slice] is a temporary object and should not have a sourcer   F)	rT   rY   r   RuntimeErrorr   r@   r   rU   r
   r    r   r   r   r#   d  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__(rs   rt   )r   r   r   r   r   rY   r+   r&   r   r   r   r+   z  s   zListGetItemSource.nameN)r-   r.   r/   rw   r#   r+   r   r   r   r   r   ^  s    r   c                   @      e Zd Zdd Zdd ZdS )TupleIteratorGetItemSourcec                    r   )Nc                      r   )NZtuple_iterator_getitemr   r   r   r   r   rR     r   z8TupleIteratorGetItemSource.reconstruct.<locals>.<lambda>r   Fr   r    r   r   r   r#     r   z&TupleIteratorGetItemSource.reconstructc                 C   r   )Nz___tuple_iterator_getitem(rs   rt   r   r&   r   r   r   r+     rJ   zTupleIteratorGetItemSource.nameN)r-   r.   r/   r#   r+   r   r   r   r   r     s    r   c                   @   r   )

TypeSourcec                 C   r   r   rX   r&   r   r   r   rn     r,   zTypeSource.__post_init__c                    0      fdd  | j  tdd d S )Nc                           ddS )Nbuiltinstyper   r   r   r   r   rR         z(TypeSource.reconstruct.<locals>.<lambda>r   FrT   rY   rU   r
   r    r   r   r   r#        
zTypeSource.reconstructc                 C   rZ   r   r[   r&   r   r   r   r     r\   zTypeSource.guard_sourcec                 C   r   )Nztype(rt   r^   r&   r   r   r   r+     r,   zTypeSource.nameNr   r   r   r   r   r     s
    r   c                   @   rV   )OptimizerSourcec                 C   r   r   rX   r    r   r   r   r#     r8   zOptimizerSource.reconstructc                 C   rZ   r   r[   r&   r   r   r   r     r\   zOptimizerSource.guard_sourcec                 C   rZ   r   r^   r&   r   r   r   r+     r\   zOptimizerSource.nameNr`   r   r   r   r   r         r   c                   @   rV   )NNModuleSourcec                 C   r   r   rX   r    r   r   r   r#     r8   zNNModuleSource.reconstructc                 C   r{   r   r|   r&   r   r   r   r     r8   zNNModuleSource.guard_sourcec                 C   rZ   r   r^   r&   r   r   r   r+     r\   zNNModuleSource.nameNr`   r   r   r   r   r     r   r   c                   @   ry   )UnspecializedNNModuleSourcec                 C   r{   r   )%_GUARD_SOURCE_UNSPECIALIZED_NN_MODULErY   r   r&   r   r   r   r     r8   z(UnspecializedNNModuleSource.guard_sourceNr~   r   r   r   r   r     r   r   c                   @   ry   )"UnspecializedBuiltinNNModuleSourcec                 C   r{   r   )-_GUARD_SOURCE_UNSPECIALIZED_BUILTIN_NN_MODULErY   r   r&   r   r   r   r     r8   z/UnspecializedBuiltinNNModuleSource.guard_sourceNr~   r   r   r   r   r     r   r   c                   @   ry   )FSDPNNModuleSourcec                 C   r{   r   )_GUARD_SOURCE_FSDP_MODULErY   r   r&   r   r   r   r     r8   zFSDPNNModuleSource.guard_sourceNr~   r   r   r   r   r     r   r   c                   @   r   )GlobalStateSourcec                 C   r   Nr   r   r&   r   r   r   r+     r   zGlobalStateSource.namec                 C   r$   r   rK   r&   r   r   r   r     r'   zGlobalStateSource.guard_sourceNr-   r.   r/   r+   r   r   r   r   r   r         r   c                   @   re   )TorchFunctionModeStackSourceindc                 C   s   d|    dS )Nz$___get_torch_function_mode_stack_at(rt   )
_get_indexr&   r   r   r   r+     r_   z!TorchFunctionModeStackSource.namec                 C   s   ddl m} || jS )Nr   )TorchFunctionModeStackVariable)Zvariables.torch_functionr   Zget_mode_indexr   )r!   r   r   r   r   r     s   z'TorchFunctionModeStackSource._get_indexc                    s<      fdd   |  g  tdd d S )Nc                      r   )NZ get_torch_function_mode_stack_atr   r   r   r   r   rR     s    z:TorchFunctionModeStackSource.reconstruct.<locals>.<lambda>r   F)rT   rU   r@   r   r
   r    r   r   r   r#     s
   
z(TorchFunctionModeStackSource.reconstructc                 C   r$   r   rK   r&   r   r   r   r     r'   z)TorchFunctionModeStackSource.guard_sourceN)	r-   r.   r/   rA   r1   r+   r   r#   r   r   r   r   r   r     s   
 	r   c                   @   re   )r   source_namec                 C   rD   )NFrF   )r   rI   r   r    r   r   r   r#     rJ   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.namec                 C   r   r   r   r   r   r   r   r     r   zConstantSource.make_guardN)	r-   r.   r/   r0   r1   r#   r   r+   r   r   r   r   r   r     r   r   c                   @   s*   e Zd ZdefddZdd Zdd ZdS )	NumpyTensorSourcereturnc                 C   r   )Nz___from_numpy(rt   r^   r&   r   r   r   r+     r,   zNumpyTensorSource.namec                 C   rZ   r   r[   r&   r   r   r   r     r\   zNumpyTensorSource.guard_sourcec                    r   )Nc                      r   )NZtorchZ	as_tensorr   r   r   r   r   rR     r   z/NumpyTensorSource.reconstruct.<locals>.<lambda>r   Fr   r    r   r   r   r#     r   zNumpyTensorSource.reconstructN)r-   r.   r/   r0   r+   r   r#   r   r   r   r   r     s    r   c                   @   "   e Zd ZdefddZdd ZdS )SubclassAttrListSourcer   c                 C   r]   )Nz.__tensor_flatten__()[0]r^   r&   r   r   r   r+     r_   zSubclassAttrListSource.namec                 C   rZ   r   r[   r&   r   r   r   r     r\   z#SubclassAttrListSource.guard_sourceNr-   r.   r/   r0   r+   r   r   r   r   r   r         r   c                   @   r   )FloatTensorSourcer   c                 C   r   )Nz___as_tensor(rt   r^   r&   r   r   r   r+     r,   zFloatTensorSource.namec                 C   rZ   r   r[   r&   r   r   r   r   !  r\   zFloatTensorSource.guard_sourceNr   r   r   r   r   r     r   r   c                   @   r   )CallMethodItemSourcer   c                 C   r]   )Nz.item()r^   r&   r   r   r   r+   '  r_   zCallMethodItemSource.namec                 C   rZ   r   r[   r&   r   r   r   r   *  r\   z!CallMethodItemSource.guard_sourceNr   r   r   r   r   r   %  r   r   c                   @   r   )ShapeEnvSourcec                 C   r   r   r   r&   r   r   r   r+   3  r   zShapeEnvSource.namec                 C   r$   r   )r   Z	SHAPE_ENVr&   r   r   r   r   6  r'   zShapeEnvSource.guard_sourceNr   r   r   r   r   r   1  r   r   c                   @   r   )BackwardStateSourcec                 C   r   r   r   r&   r   r   r   r+   <  r   zBackwardStateSource.namec                 C   r$   r   )r   ZBACKWARD_STATEr&   r   r   r   r   ?  r'   z BackwardStateSource.guard_sourceNr   r   r   r   r   r   :  r   r   Fonly_allow_inputr   c                C   s8   t | trt| j|dS t | tsdS |r| jsdS dS )Nr   FT)r   r   is_from_local_sourcerY   r   r   )r   r   r   r   r   r   C  s   


r   c                 C   &   t | trdS t | trt| jS dS r   )r   r   r   )is_from_unspecialized_param_buffer_sourcerY   r   r   r   r   r   M  
   


r   c                 C   r   r   )r   r   r   $is_from_flatten_script_object_sourcerY   r   r   r   r   r   U  r   r   c                 C   r   r   )r   r   r   is_from_optimizer_sourcerY   r   r   r   r   r   ]  r   r   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   rY   rf   rg   r   r   is_from_defaultsr   r   r   r   r   g  s"   




r   )Prw   r   enumtypingr   r   r   Ztorch._guardsr   r   r   r   r	   Zbytecode_transformationr
   r   r%   ZLOCAL_SPECIALIZED_NN_MODULErL   ZGLOBAL_SPECIALIZED_NN_MODULEZLOCAL_UNSPECIALIZED_NN_MODULEZGLOBAL_UNSPECIALIZED_NN_MODULEZ%LOCAL_UNSPECIALIZED_BUILTIN_NN_MODULEZ&GLOBAL_UNSPECIALIZED_BUILTIN_NN_MODULEZLOCAL_FSDP_MODULEZGLOBAL_FSDP_MODULEr}   r   r   r   r   	dataclassr   r5   r;   rB   rO   rW   rb   rf   rv   rx   rz   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   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s  














(





$
&

*
(

















