o
    h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   h/var/www/html/construction_image-detection-poc/venv/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   
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   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/   r0   r1   r2   r$   r   r,   r   r   r   r   r6      
   
 r6   c                   @   r5   )	RandomValueSourcerandom_call_indexc                 C   r%   r   )r   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    txoutputrandom_values_varcreate_load_constr>   r   r!   r   r   r   r$      s   zRandomValueSource.reconstructc                 C   s   d| j  S )Nrandom_value_)r>   r'   r   r   r   r,      s   zRandomValueSource.nameN)r.   r/   r0   intr2   r   r$   r,   r   r   r   r   r=      s
   
 r=   c                   @   r5   )	GlobalSourceglobal_namec                 C      | |j| jdd d S NTaddr   create_load_globalrI   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+   rI   r'   r   r   r   r,      r-   zGlobalSource.nameNr;   r   r   r   r   rH      r<   rH   c                   @   r5   )	GlobalWeakRefSourcerI   c                    (      fdd  tdd d S )Nc                      s      jjddS rK   rN   r   r#   r"   r   r   <lambda>   s    z1GlobalWeakRefSource.reconstruct.<locals>.<lambda>r   Fadd_push_nullextend_outputr
   r!   r   rW   r   r$      s   zGlobalWeakRefSource.reconstructc                 C   r%   r   rQ   r'   r   r   r   r      r(   z GlobalWeakRefSource.guard_sourcec                 C   r)   )NrS   z]()rT   r'   r   r   r   r,      r-   zGlobalWeakRefSource.nameNr;   r   r   r   r   rU      s
   
 rU   c                   @   $   e Zd Zdd Zdd Zdd ZdS )WeakRefCallSourcec                    rV   )Nc                      s
    j S r   baser   rW   r   r   rX      s   
 z/WeakRefCallSource.reconstruct.<locals>.<lambda>r   FrY   r!   r   rW   r   r$      s   zWeakRefCallSource.reconstructc                 C   
   | j  S r   r_   r   r'   r   r   r   r         
zWeakRefCallSource.guard_sourcec                 C      | j   dS )Nz()r_   r,   r'   r   r   r   r,         zWeakRefCallSource.nameNr.   r/   r0   r$   r   r,   r   r   r   r   r]      s    r]   c                   @      e Zd ZdS )CallFunctionNoArgsSourceNr.   r/   r0   r   r   r   r   rh          rh   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.r_   rm   )r_   rm   splitobject__setattr__rl   join)r"   member_partsr   r   r   __post_init__   s   
zAttrSource.__post_init__c                 C       || j  ||| j d S r   r_   r[   create_load_attrsrm   r!   r   r   r   r$         
zAttrSource.reconstructc                 C   r`   r   ra   r'   r   r   r   r      rb   zAttrSource.guard_sourcec                 C   s:   | j  sd| j  d| j dS | j  d| j  S )Nzgetattr(, )rn   )rm   isidentifierr_   r,   r'   r   r   r   r,      s   
zAttrSource.nameN)	r.   r/   r0   r1   r2   ru   r$   r   r,   r   r   r   r   rl      s   
 	rl   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   r7   r   )r   create_load_closurer   r!   r   r   r   r$      s   zLocalCellSource.reconstructN)r.   r/   r0   __doc__r1   r2   r$   r   r   r   r   r}      s   
 r}   c                   @   s2   e Zd ZU dZeed< dd Zdd Zdd Zd	S )

GradSourcegradrm   c                 C   rv   r   rw   r!   r   r   r   r$     ry   zGradSource.reconstructc                 C   r`   r   ra   r'   r   r   r   r     rb   zGradSource.guard_sourcec                 C   s   | j   d| j S )Nrn   )r_   r,   rm   r'   r   r   r   r,     r8   zGradSource.nameN)	r.   r/   r0   rm   r1   r2   r$   r   r,   r   r   r   r   r   
  s
   
 r   c                   @      e Zd Zdd ZdS )ParamBufferSourcec                 C      t | j  S r   #_GUARD_SOURCE_SPECIALIZED_NN_MODULEr_   r   r'   r   r   r   r     r:   zParamBufferSource.guard_sourceNr.   r/   r0   r   r   r   r   r   r         r   c                   @   rg   )UnspecializedParamBufferSourceNri   r   r   r   r   r      rj   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   	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/   r0   r   r   r1   r2   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sizestridestorage_offset)r   SIZESTRIDESTORAGE_OFFSETr'   r   r   r   method_nameD  s   


zTensorProperty.method_nameN)r.   r/   r0   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   )r_   r   r   r   r   r'   r   r   r   ru   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 )Ncall_)load_import_fromr	   r.   r   r   r   rW   r   r   rX   [  s    z2TensorPropertySource.reconstruct.<locals>.<lambda>r   r   F)rZ   r_   r   r   rE   r[   r
   r!   r   rW   r   r$   Y  s   

z TensorPropertySource.reconstructc                 C   r`   r   ra   r'   r   r   r   r   g  rb   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   r_   r,   r   r   r   AssertionErrorr'   r   r   r   r,   j  s   zTensorPropertySource.name)r.   r/   r0   r   r2   r   r   rG   ru   r$   r   r,   r   r   r   r   r   M  s   
 r   c                   @   rk   )IndexedSourcer   c                 C      | j d usJ d S r   r^   r'   r   r   r   ru   z  r-   zIndexedSource.__post_init__c                 C   r   r   r   r!   r   r   r   r$   }  r   zIndexedSource.reconstructc                 C   r`   r   ra   r'   r   r   r   r     rb   zIndexedSource.guard_sourcec                 C   s   d| j  d| j  dS )N(rz   r{   )r   r_   r,   r'   r   r   r   r,     rP   zIndexedSource.nameN)	r.   r/   r0   rG   r2   ru   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   r^   r'   r   r   r   ru     r-   zNegateSource.__post_init__c                 C   r   r   r   r!   r   r   r   r$     r   zNegateSource.reconstructc                 C   r`   r   ra   r'   r   r   r   r     rb   zNegateSource.guard_sourcec                 C   rc   )Nz
.__neg__()rd   r'   r   r   r   r,     s   zNegateSource.nameNr.   r/   r0   ru   r$   r   r,   r   r   r   r   r     
    r   c                   @   r   )
ConvertIntSourcec                 C   r   r   r^   r'   r   r   r   ru     r-   zConvertIntSource.__post_init__c                 C      || j  d S r   r^   r!   r   r   r   r$     r:   zConvertIntSource.reconstructc                 C   r`   r   ra   r'   r   r   r   r     rb   zConvertIntSource.guard_sourcec                 C      d| j   dS )Nz!cast_symbool_to_symint_guardless(r{   rd   r'   r   r   r   r,     r-   zConvertIntSource.nameNr   r   r   r   r   r     r   r   c                   @   r   )
FlattenScriptObjectSourcec                 C   r   r   r^   r'   r   r   r   ru     r-   z'FlattenScriptObjectSource.__post_init__c                 C   r   r   r^   r!   r   r   r   r$     r:   z%FlattenScriptObjectSource.reconstructc                 C   r`   r   ra   r'   r   r   r   r     rb   z&FlattenScriptObjectSource.guard_sourcec                 C   rc   )Nz.__obj_flatten__()rd   r'   r   r   r   r,     re   zFlattenScriptObjectSource.nameNr   r   r   r   r   r     r   r   c                   @   r   )
ScriptObjectQualifiedNameSourcec                 C   r   r   r^   r'   r   r   r   ru     r-   z-ScriptObjectQualifiedNameSource.__post_init__c                 C   r   r   r^   r!   r   r   r   r$     r:   z+ScriptObjectQualifiedNameSource.reconstructc                 C   r`   r   ra   r'   r   r   r   r     rb   z,ScriptObjectQualifiedNameSource.guard_sourcec                 C   rc   )Nz._type().qualified_name()rd   r'   r   r   r   r,     re   z$ScriptObjectQualifiedNameSource.nameNr   r   r   r   r   r     r   r   c                   @   r\   )AttrProxySourcec                 C   r   r   r^   r!   r   r   r   r$     r:   zAttrProxySource.reconstructc                 C   r`   r   ra   r'   r   r   r   r     rb   zAttrProxySource.guard_sourcec                 C   rc   )Nz.get_base()rd   r'   r   r   r   r,     re   zAttrProxySource.nameNrf   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   rn   z['z']__defaults__[r*   )
r_   r   r   r   r1   rq   rr   r,   r   rG   r'   r   r   r   ru     s   ""zDefaultsSource.__post_init__c                 C   s@   || j  ||| j ||| j |td d S r@   )r_   r[   rx   r   r   rE   r   r   r!   r   r   r   r$     s   
zDefaultsSource.reconstructc                 C   r`   r   ra   r'   r   r   r   r     rb   zDefaultsSource.guard_sourcec                 C      | j S r   )r   r'   r   r   r   r,     r(   zDefaultsSource.nameN)r.   r/   r0   r   rG   r1   r2   r   r3   dataclassesr   r   ru   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)r_   r   r   slicesuperrr   
__reduce__r'   	__class__r   r   ru     s
   zGetItemSource.__post_init__c                 C   sJ   || j  | jr|||   n	||| j |td d S r@   )r_   r   r   rE   unpack_slicer   r   r!   r   r   r   r$      s
   
zGetItemSource.reconstructc                 C   r`   r   ra   r'   r   r   r   r     rb   zGetItemSource.guard_sourcec                 C   s   | j sJ | j\}}|| S r   )r   r   )r"   slice_class
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   r_   r,   r   r'   r   r   r   r,     s   zGetItemSource.name)r.   r/   r0   r   r2   r   r3   ru   r$   r   r   r,   __classcell__r   r   r   r   r     s   
 r   c                   @   rk   )ConstDictKeySourcer   c                 C   r`   r   ra   r'   r   r   r   r     rb   zConstDictKeySource.guard_sourcec                    B      fdd  | j   | j  tdd d S )Nc                           tjdS )Ndict_keys_getitemr   r	   r.   r   r#   r   r   rX   $      z0ConstDictKeySource.reconstruct.<locals>.<lambda>r   FrZ   r_   r   rE   r   r[   r
   r!   r   r   r   r$   "     

zConstDictKeySource.reconstructc                 C      d| j   d| jdS )Nzlist(dict.keys(z))[r*   r_   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/   r0   r   r2   r   r$   r,   r   r   r   r   r   r     s   
 r   c                   @   rk   )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   
is_literal)r"   r   r   r   r   ru   :  s   
zDictGetItemSource.__post_init__c                 C   r`   r   ra   r'   r   r   r   r   A  rb   zDictGetItemSource.guard_sourcec                    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   rX   I  r   z/DictGetItemSource.reconstruct.<locals>.<lambda>r   F)	rZ   r_   r   r   r   r   rE   r[   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__(rz   r{   r   r*   )r   r   r   r_   r,   r'   r   r   r   r,   W  s   zDictGetItemSource.nameN)	r.   r/   r0   r   r2   ru   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   )Nlist_getitemr   r   r   r   r   rX   j  r   z/ListGetItemSource.reconstruct.<locals>.<lambda>>List[slice] is a temporary object and should not have a sourcer   F)	rZ   r_   r   RuntimeErrorr   rE   r   r[   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__(rz   r{   )r   r   r   r   r   r_   r,   r'   r   r   r   r,   z  s   zListGetItemSource.nameN)r.   r/   r0   r   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   )Ntuple_iterator_getitemr   r   r   r   r   rX     r   z8TupleIteratorGetItemSource.reconstruct.<locals>.<lambda>r   Fr   r!   r   r   r   r$     r   z&TupleIteratorGetItemSource.reconstructc                 C   r   )Nz___tuple_iterator_getitem(rz   r{   r   r'   r   r   r   r,     rP   zTupleIteratorGetItemSource.nameN)r.   r/   r0   r$   r,   r   r   r   r   r     s    r   c                   @   r   )

TypeSourcec                 C   r   r   r^   r'   r   r   r   ru     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   rX         z(TypeSource.reconstruct.<locals>.<lambda>r   FrZ   r_   r[   r
   r!   r   r   r   r$        
zTypeSource.reconstructc                 C   r`   r   ra   r'   r   r   r   r     rb   zTypeSource.guard_sourcec                 C   r   )Nztype(r{   rd   r'   r   r   r   r,     r-   zTypeSource.nameNr   r   r   r   r   r     s
    r   c                   @   r\   )OptimizerSourcec                 C   r   r   r^   r!   r   r   r   r$     r:   zOptimizerSource.reconstructc                 C   r`   r   ra   r'   r   r   r   r     rb   zOptimizerSource.guard_sourcec                 C   r`   r   rd   r'   r   r   r   r,     rb   zOptimizerSource.nameNrf   r   r   r   r   r         r   c                   @   r\   )NNModuleSourcec                 C   r   r   r^   r!   r   r   r   r$     r:   zNNModuleSource.reconstructc                 C   r   r   r   r'   r   r   r   r     r:   zNNModuleSource.guard_sourcec                 C   r`   r   rd   r'   r   r   r   r,     rb   zNNModuleSource.nameNrf   r   r   r   r   r     r   r   c                   @   r   )UnspecializedNNModuleSourcec                 C   r   r   )%_GUARD_SOURCE_UNSPECIALIZED_NN_MODULEr_   r   r'   r   r   r   r     r:   z(UnspecializedNNModuleSource.guard_sourceNr   r   r   r   r   r     r   r   c                   @   r   )"UnspecializedBuiltinNNModuleSourcec                 C   r   r   )-_GUARD_SOURCE_UNSPECIALIZED_BUILTIN_NN_MODULEr_   r   r'   r   r   r   r     r:   z/UnspecializedBuiltinNNModuleSource.guard_sourceNr   r   r   r   r   r     r   r   c                   @   r   )FSDPNNModuleSourcec                 C   r   r   )_GUARD_SOURCE_FSDP_MODULEr_   r   r'   r   r   r   r     r:   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   rQ   r'   r   r   r   r     r(   zGlobalStateSource.guard_sourceNr.   r/   r0   r,   r   r   r   r   r   r         r   c                   @   rk   )TorchFunctionModeStackSourceindc                 C   s   d|    dS )Nz$___get_torch_function_mode_stack_at(r{   )
_get_indexr'   r   r   r   r,     re   z!TorchFunctionModeStackSource.namec                 C   s   ddl m} || jS )Nr   )TorchFunctionModeStackVariable)variables.torch_functionr   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   )N get_torch_function_mode_stack_atr   r   r   r   r   rX     s    z:TorchFunctionModeStackSource.reconstruct.<locals>.<lambda>r   F)rZ   r[   rE   r   r
   r!   r   r   r   r$     s
   
z(TorchFunctionModeStackSource.reconstructc                 C   r%   r   rQ   r'   r   r   r   r     r(   z)TorchFunctionModeStackSource.guard_sourceN)	r.   r/   r0   rG   r2   r,   r   r$   r   r   r   r   r   r     s   
 	r   c                   @   rk   )r   source_namec                 C   rJ   )NFrL   )r   rO   r  r!   r   r   r   r$     rP   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/   r0   r1   r2   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(r{   rd   r'   r   r   r   r,     r-   zNumpyTensorSource.namec                 C   r`   r   ra   r'   r   r   r   r     rb   zNumpyTensorSource.guard_sourcec                    r   )Nc                      r   )Ntorch	as_tensorr   r   r   r   r   rX     r   z/NumpyTensorSource.reconstruct.<locals>.<lambda>r   Fr   r!   r   r   r   r$     r   zNumpyTensorSource.reconstructN)r.   r/   r0   r1   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   rc   )Nz.__tensor_flatten__()[0]rd   r'   r   r   r   r,     re   zSubclassAttrListSource.namec                 C   r`   r   ra   r'   r   r   r   r     rb   z#SubclassAttrListSource.guard_sourceNr.   r/   r0   r1   r,   r   r   r   r   r   r        r  c                   @   r  )FloatTensorSourcer  c                 C   r   )Nz___as_tensor(r{   rd   r'   r   r   r   r,     r-   zFloatTensorSource.namec                 C   r`   r   ra   r'   r   r   r   r   !  rb   zFloatTensorSource.guard_sourceNr	  r   r   r   r   r    r
  r  c                   @   r  )CallMethodItemSourcer  c                 C   rc   )Nz.item()rd   r'   r   r   r   r,   '  re   zCallMethodItemSource.namec                 C   r`   r   ra   r'   r   r   r   r   *  rb   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   	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   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_sourcer_   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_sourcer_   r   r   r   r   r  M  
   


r  c                 C   r  r   )r   r   r   $is_from_flatten_script_object_sourcer_   r   r   r   r   r  U  r  r  c                 C   r  r   )r   r   r   is_from_optimizer_sourcer_   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   r_   rl   rm   r   r   is_from_defaultsr   r   r   r   r  g  s"   




r  )Pr   r   enumtypingr   r   r   torch._guardsr   r   r   r   r	   bytecode_transformationr
   r   r&   LOCAL_SPECIALIZED_NN_MODULErR   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   	dataclassr   r6   r=   rH   rU   r]   rh   rl   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  r  r  r  r  r  r  r  r  r   r   r   r   <module>   s  














(





$
&

*
(












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