
    9i:                     x   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	rdd
lmZ ej        ej        ej        ej        ej        ej        ej        ej        ej         ej         ej!        ej!        ej"        ej"        ej#        ej#        ej$        ej$        ej%        ej%        i
Z&ej        ej         ej        ej!        ej         ej         ej!        ej!        ej        ej         ej        ej!        ej"        ej"        ej#        ej#        ej$        ej$        ej%        ej%        i
Z'ej        ej"        ej        ej#        ej         ej"        ej!        ej#        ej        ej"        ej        ej#        ej"        ej"        ej#        ej#        ej$        ej$        ej%        ej%        i
Z(ej        ej$        ej        ej%        ej        ej$        ej        ej%        ej$        ej$        ej%        ej%        ej         ej$        ej!        ej%        ej"        ej$        ej#        ej%        i
Z)dede*fdZ+dee         de,fdZ-ddede*de,fdZ. ed           G d de                      Z/ ed           G d de                      Z0 ed           G d de                      Z1 ed           G d de                      Z2 ed           G d de                      Z3 ed           G d d e                      Z4 ed           G d! d"e                      Z5 ed           G d# d$e5                      Z6 ed           G d% d&e                      Z7 ed           G d' d(e                      Z8 ed           G d) d*e                      Z9 ed           G d+ d,e                      Z: ed           G d- d.e                      Z; ed           G d/ d0e                      Z< ed           G d1 d2e                      Z= ed           G d3 d4e                      Z> ed           G d5 d6e7                      Z? ed           G d7 d8e7                      Z@ ed           G d9 d:e                      ZA ed           G d; d<e                      ZB G d= d>ejC                  ZD ed           G d? d@e                      ZE ed           G dA dBe                      ZF ed           G dC dDe                      ZG ed           G dE dFe                      ZH ed           G dG dHe                      ZI ed           G dI dJe                      ZJ ed           G dK dLe                      ZK G dM dNe          ZL ed           G dO dPe                      ZM ed           G dQ dRe                      ZN ed           G dS dTe                      ZO ed           G dU dVe                      ZP ed           G dW dXe                      ZQ ed           G dY dZe                      ZR ed           G d[ d\eN                      ZS ed           G d] d^eN                      ZT ed           G d_ d`e                      ZU ed           G da dbe                      ZV ed           G dc dde                      ZW ed           G de dfe                      ZX ed           G dg dhe                      ZY ed           G di djeY                      ZZ ed           G dk dleZ                      Z[ ed           G dm dneY                      Z\ ed           G do dpe                      Z] ed           G dq dre                      Z^ ed           G ds dte                      Z_ ed           G du dve                      Z` ed           G dw dxe                      Za ed           G dy dze                      Zb ed           G d{ d|e                      Zc ed           G d} d~e                      Zd ed           G d de                      Ze ed           G d de                      Zf ed           G d de                      Zg ed           G d de                      Zhdddede*dee,         fdZidddede*de*fdZjdede*fdZkdedee,         fdZldede*fdZmdede*fdZndedede*fdZoejp        dede*fd            Zqejp        dede*fd            Zrejp        dede*fd            Zsejp        dede*fd            Ztejp        dede*fd            Zuejp        dede*fd            Zvejp        dede*fd            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                     t          | t                    rdS 	 | j        t          j        k    rdS n# t
          $ r Y nw xY wdS NTF)
isinstanceConstantSourceguard_sourcer   CONSTANTNotImplementedErrorr   s    G/var/www/icac/venv/lib/python3.11/site-packages/torch/_dynamo/source.pyis_constant_sourcer   m   s`    &.)) t+"6664 7    5s   1 
>>c                 <    | dS 	 | j         S # t          $ r Y dS w xY w)Nz<unknown source>)namer   r   s    r   _get_source_debug_namer"   y   s>    ~!!	&;" 	& 	& 	&%%%	&s    
Fs
apply_reprc                     |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$   s     r   _esc_strr+      sH      GGFF99S$''T222    T)frozenc                       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ed	efd            Zej        d	efd            ZdS )LocalSource
local_nameFis_inputNdynamismis_derefed_cell_contentscodegenr   r   c                     | j         r|                    | j                   d S |                    |                    | j                             d S N)r3   
load_derefr0   append_outputcreate_loadselfr4   s     r   reconstructzLocalSource.reconstruct   sT    ( 	Ht/////!!'"5"5do"F"FGGGGGr,   c                     t           j        S r6   )r   LOCALr;   s    r   r   zLocalSource.guard_source   s      r,   c                 6    dt          | j        d           dS )NzL[Tr$   ]r+   r0   r?   s    r   _name_templatezLocalSource._name_template   s"    AHT_>>>AAAAr,   r4   r   r   N)__name__
__module____qualname__r)   __annotations__r1   boolr2   r   	frozensetr3   r<   propertyr   r   	functoolscached_propertyrD    r,   r   r/   r/      s         OOO Hd *.Hhy~&---
 &+d***H H H H !k ! ! ! X! B B B B B B Br,   r/   c                   Z    e Zd ZU eed<   d	dZedefd            Zedefd            Z	dS )
TempLocalSourcer0   r4   r   r   Nc                 `    |                     |                    | j                             d S r6   r8   r9   r0   r:   s     r   r<   zTempLocalSource.reconstruct   ,    g11$/BBCCCCCr,   c                     t           j        S r6   )r   
TEMP_LOCALr?   s    r   r   zTempLocalSource.guard_source   s    %%r,   c                      t          d          )NzhCannot create guard on TempLocalSource - this is an internal Dynamo bug. Please file an issue on GitHub.r   r?   s    r   rD   zTempLocalSource._name_template   s    !v
 
 	
r,   rE   )
rF   rG   rH   r)   rI   r<   rL   r   r   rD   rO   r,   r   rQ   rQ      s          OOOD D D D &k & & & X& 
 
 
 
 X
 
 
r,   rQ   c                   d    e Zd ZU eed<   d	dZedefd            Ze	j
        defd            ZdS )
SyntheticLocalSourcer0   r4   r   r   Nc                 `    |                     |                    | j                             d S r6   rS   r:   s     r   r<   z SyntheticLocalSource.reconstruct   rT   r,   c                     t           j        S r6   )r   SYNTHETIC_LOCALr?   s    r   r   z!SyntheticLocalSource.guard_source   s    **r,   c                 6    dt          | j        d           dS )NzSYNTHETIC_LOCAL[TrA   rB   rC   r?   s    r   rD   z#SyntheticLocalSource._name_template   s"    O(4?t"L"L"LOOOOr,   rE   rF   rG   rH   r)   rI   r<   rL   r   r   rM   rN   rD   rO   r,   r   rZ   rZ      s         OOOD D D D +k + + + X+ P P P P P P Pr,   rZ   c                   d    e Zd ZU eed<   edefd            Zd	dZe	j
        defd            ZdS )
RandomValueSourcerandom_call_indexr   c                     t           j        S r6   )r   RANDOM_VALUEr?   s    r   r   zRandomValueSource.guard_source   s    ''r,   r4   r   Nc                    |                     |                    |j        j        j                             |                     |                    | j                             |                     t                                 d S r6   )r8   r9   txoutputrandom_values_varcreate_load_constrb   r   r:   s     r   r<   zRandomValueSource.reconstruct   sr    g11'*2C2UVVWWWg778NOOPPP24455555r,   c                 0    dt          | j                   S )Nrandom_value_)r+   rb   r?   s    r   rD   z RandomValueSource._name_template   s    Ax(>??AAAr,   rE   )rF   rG   rH   intrI   rL   r   r   r<   rM   rN   r)   rD   rO   r,   r   ra   ra      s         (k ( ( ( X(6 6 6 6
 B B B B B B Br,   ra   c                   d    e Zd ZU eed<   d	dZedefd            Ze	j
        defd            ZdS )
GlobalSourceglobal_namer4   r   r   Nc                 d    |                     |                    | j        d                     d S NTaddr8   create_load_globalro   r:   s     r   r<   zGlobalSource.reconstruct   s2    g889It8TTUUUUUr,   c                     t           j        S r6   r   GLOBALr?   s    r   r   zGlobalSource.guard_source       !!r,   c                 6    dt          | j        d           dS )NG[TrA   rB   r+   ro   r?   s    r   rD   zGlobalSource._name_template   s#    BHT-$???BBBBr,   rE   r_   rO   r,   r   rn   rn      s         V V V V "k " " " X" C C C C C C Cr,   rn   c                   d    e Zd ZU eed<   d	dZedefd            Ze	j
        defd            ZdS )
GlobalWeakRefSourcero   r4   r   r   Nc                                            fd                               t          dd                     d S )Nc                  b                                               j        d                    S rq   rt   r4   r;   s   r   <lambda>z1GlobalWeakRefSource.reconstruct.<locals>.<lambda>   s0    G))**4+;*FF  r,   r   Fadd_push_nullextend_outputr   r:   s   ``r   r<   zGlobalWeakRefSource.reconstruct   s\        	
 	
 	

 	21e<<=====r,   c                     t           j        S r6   rw   r?   s    r   r   z GlobalWeakRefSource.guard_source  ry   r,   c                 6    dt          | j        d           dS )Nr{   TrA   z]()r|   r?   s    r   rD   z"GlobalWeakRefSource._name_template  s#    DHT-$???DDDDr,   rE   r_   rO   r,   r   r~   r~      s         > > > > "k " " " X" E E E E E E Er,   r~   c                   2    e Zd ZddZedefd            ZdS )WeakRefCallSourcer4   r   r   Nc                                            fd                               t          dd                     d S )Nc                  $      j                   S r6   baser   s   r   r   z/WeakRefCallSource.reconstruct.<locals>.<lambda>  s    ggdi&8&8 r,   r   Fr   r:   s   ``r   r<   zWeakRefCallSource.reconstruct  sJ    8888899921e<<=====r,   c                     dS )Nz{0}()rO   r?   s    r   rD   z WeakRefCallSource._name_template  s    wr,   rE   rF   rG   rH   r<   rL   r)   rD   rO   r,   r   r   r     sO        > > > >     X  r,   r   c                       e Zd ZdS )CallFunctionNoArgsSourceNrF   rG   rH   rO   r,   r   r   r             Dr,   r   c                   P    e Zd ZU eed<   d	dZd
dZej        defd            Z	dS )
AttrSourcememberr   Nc                 J   | 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   r   r   r   splitobject__setattr__r   joinr;   member_partss     r   __post_init__zAttrSource.__post_init__      yUUUUUU$+;,,S11LfjCHH\#2#=N4O4OPP   tX|B/?@@@@@ r,   r4   r   c                      || j                    |                    |                    | j                             d S r6   r   r   create_load_attrsr   r:   s     r   r<   zAttrSource.reconstruct(  >    	g77DDEEEEEr,   c                     | j                                         sdt          | j         d           dS dt          | j                    S )Nzgetattr({0}, TrA   ){0}.)r   isidentifierr+   r?   s    r   rD   zAttrSource._name_template,  sQ    {'')) 	ONXdkd%K%K%KNNNN/--///r,   r   NrE   
rF   rG   rH   r)   rI   r   r<   rM   rN   rD   rO   r,   r   r   r     sz         KKKA A A AF F F F 0 0 0 0 0 0 0r,   r   c                   P    e Zd ZU eed<   d	dZd
dZej        defd            Z	dS )GenericAttrSourcer   r   Nc                 J   | j         s
J d            d| j        v r| j                            d          }t                              | dt          | j         d                    |d d                                        t                              | d|d                    d S d S r   r   r   s     r   r   zGenericAttrSource.__post_init__7  r   r,   r4   r   c                      || j                    |                    |                    | j                             d S r6   r   r:   s     r   r<   zGenericAttrSource.reconstruct@  r   r,   c                 6    dt          | j        d           dS )Nzobject.__getattribute__({0}, TrA   r   r+   r   r?   s    r   rD   z GenericAttrSource._name_templateD  s'     Xht{t.T.T.TWWW	
r,   r   rE   r   rO   r,   r   r   r   3  sz         KKKA A A AF F F F 
 
 
 
 
 
 
r,   r   c                   2    e Zd ZddZedefd            ZdS )TypeDictSourcer4   r   r   Nc                 v     || j                    |                    |                    d                     d S )N__dict__r   r   r   r:   s     r   r<   zTypeDictSource.reconstructN  <    	g77
CCDDDDDr,   c                     dS )Nzdict({0}.__dict__)rO   r?   s    r   rD   zTypeDictSource._name_templateR  s
     $#r,   rE   r   rO   r,   r   r   r   L  sS        E E E E $ $ $ $ X$ $ $r,   r   c                   2    e Zd ZddZedefd            ZdS )TypeMROSourcer4   r   r   Nc                 v     || j                    |                    |                    d                     d S )N__mro__r   r:   s     r   r<   zTypeMROSource.reconstruct^  <    	g77	BBCCCCCr,   c                     dS )Nz{0}.__mro__rO   r?   s    r   rD   zTypeMROSource._name_templateb  s    }r,   rE   r   rO   r,   r   r   r   \  sS        D D D D     X  r,   r   c                   &    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).
    r0   r4   r   r   Nc                 `    |                     |                    | j                             d S r6   )r8   create_load_closurer0   r:   s     r   r<   zLocalCellSource.reconstructp  s.     	g99$/JJKKKKKr,   rE   )rF   rG   rH   __doc__r)   rI   r<   rO   r,   r   r   r   g  sE          
 OOOL L L L L Lr,   r   c                   2    e Zd ZddZedefd            ZdS )
CodeSourcer4   r   r   Nc                 v     || j                    |                    |                    d                     d S )N__code__r   r:   s     r   r<   zCodeSource.reconstruct}  r   r,   c                     dS )Nz{0}.__code__rO   r?   s    r   rD   zCodeSource._name_template  s    ~r,   rE   r   rO   r,   r   r   r   {  sS        E E E E     X  r,   r   c                   2    e Zd ZddZedefd            ZdS )ClosureSourcer4   r   r   Nc                 v     || j                    |                    |                    d                     d S )N__closure__r   r:   s     r   r<   zClosureSource.reconstruct  s<    	g77FFGGGGGr,   c                     dS )Nz{0}.__closure__rO   r?   s    r   rD   zClosureSource._name_template  s      r,   rE   r   rO   r,   r   r   r     sS        H H H H ! ! ! ! X! ! !r,   r   c                   L    e Zd ZU dZeed<   d	dZej        defd            Z	dS )

GradSourcegradr   r4   r   r   Nc                      || j                    |                    |                    | j                             d S r6   r   r:   s     r   r<   zGradSource.reconstruct  r   r,   c                 0    dt          | j                   S )Nr   r   r?   s    r   rD   zGradSource._name_template  s    /--///r,   rE   )
rF   rG   rH   r   r)   rI   r<   rM   rN   rD   rO   r,   r   r   r     si         FCF F F F 0 0 0 0 0 0 0r,   r   c                   4    e Zd Zej        defd            ZdS )ParamBufferSourcer   c                 0    t           | j        j                 S r6   #_GUARD_SOURCE_SPECIALIZED_NN_MODULEr   r   r?   s    r   r   zParamBufferSource.guard_source      2493IJJr,   NrF   rG   rH   rM   rN   r   r   rO   r,   r   r   r     sD        Kk K K K K K Kr,   r   c                       e Zd ZdS )UnspecializedParamBufferSourceNr   rO   r,   r   r   r     r   r,   r   c                       e Zd ZU dZee         ed<   edefd            Z	e
j        defd            Zdedef         defdZdefd	ZdS )
EphemeralSourceNdescr   c                     t           j        S r6   )r   	EPHEMERALr?   s    r   r   zEphemeralSource.guard_source      $$r,   c                 N    | j         
d| j         z   nd}dt          |           dS )Nz:  z
<ephemeral>)r   r+   )r;   r   s     r   rD   zEphemeralSource._name_template  s1    #'9#8tdib-HTNN----r,   fn.c                     t           r6   rX   r;   r   s     r   
make_guardzEphemeralSource.make_guard      !!r,   c                     dS NTrO   r?   s    r   is_ephemeralzEphemeralSource.is_ephemeral      tr,   )rF   rG   rH   r   r   r)   rI   rL   r   r   rM   rN   rD   r   r   r   r   rJ   r   rO   r,   r   r   r     s         D(3-%k % % % X% . . . . ."Xc3h/ "E " " " "d      r,   r   c                   2    e Zd ZddZedefd            ZdS )SkipGuardSourcer4   r   r   Nc                 :    | j                             |           d S r6   )r   r<   r:   s     r   r<   zSkipGuardSource.reconstruct  s    	g&&&&&r,   c                     dS Nz{0}rO   r?   s    r   rD   zSkipGuardSource._name_template      ur,   rE   r   rO   r,   r   r   r     sO        ' ' ' '     X  r,   r   c                   &    e Zd ZdZdZdZdefdZdS )TensorPropertyr   r      r   c                     | 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+   r?   s    r   method_namezTensorProperty.method_name  sY    >&&&6^***8^222## !>htnn!>!>???r,   N)rF   rG   rH   r   r   r   r)   r  rO   r,   r   r   r     sE        DFN@S @ @ @ @ @ @r,   r   c                   j    e Zd ZU eed<   dZee         ed<   d
dZddZ	e
j        defd	            ZdS )TensorPropertySourcepropNidxr   c                 f    | j         J | j        t          j        u r| j        J d S | j        J d S r6   )r   r  r   r   r  r?   s    r   r   z"TensorPropertySource.__post_init__  sH    y$$$95558#####8'''''r,   r4   r   c                                           fd             j                    j        -                                         j                                                 t           j        dndd                     d S )Nc                                            t          j        dt          j                                                             S )Ncall_)load_import_fromr   rF   r+   r  r  r   s   r   r   z2TensorPropertySource.reconstruct.<locals>.<lambda>  s=    G,, K1F1F1H1H(I(I K K  r,   r   r   F)r   r   r  r8   ri   r   r   r:   s   ``r   r<   z TensorPropertySource.reconstruct  s        	
 	
 	

 		8!!'";";DH"E"EFFF dh&:5II	
 	
 	
 	
 	
r,   c                 2   | 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        J dS t          dt          | j                              )Nz{0}.size()[rB   z{0}.stride()[z{0}.storage_offset()r   )r  r   r   r+   r  r   r   r  r?   s    r   rD   z#TensorPropertySource._name_template  s    9+++88DH#5#58888Y.///:Xdh%7%7::::Y.7778###)) !Chty.A.A!C!CDDDr,   r   rE   )rF   rG   rH   r   rI   r  r   rl   r   r<   rM   rN   r)   rD   rO   r,   r   r  r    s         
C#( ( ( (
 
 
 
 	E 	E 	E 	E 	E 	E 	Er,   r  c                   P    e Zd ZU eed<   d	dZd
dZej        de	fd            Z
dS )IndexedSourcer  r   Nc                     | j         J d S r6   r   r?   s    r   r   zIndexedSource.__post_init__      y$$$$$r,   r4   r   c                     t           r6   rX   r:   s     r   r<   zIndexedSource.reconstruct  r   r,   c                 2    dt          | j                   dS )N(z, {0}))r+   r  r?   s    r   rD   zIndexedSource._name_template  s    /8DH%%////r,   r   rE   )rF   rG   rH   rl   rI   r   r<   rM   rN   r)   rD   rO   r,   r   r  r    sr         	HHH% % % %" " " " 0 0 0 0 0 0 0r,   r  c                   :    e Zd ZddZd	dZedefd            ZdS )
NegateSourcer   Nc                     | j         J d S r6   r   r?   s    r   r   zNegateSource.__post_init__  r  r,   r4   r   c                     t           r6   rX   r:   s     r   r<   zNegateSource.reconstruct"  r   r,   c                     dS )Nz{0}.__neg__()rO   r?   s    r   rD   zNegateSource._name_template%  s	     r,   r   rE   rF   rG   rH   r   r<   rL   r)   rD   rO   r,   r   r  r    sc        % % % %" " " "     X  r,   r  c                   :    e Zd ZddZd	dZedefd            ZdS )
ConvertIntSourcer   Nc                     | j         J d S r6   r   r?   s    r   r   zConvertIntSource.__post_init__-  r  r,   r4   r   c                 &     || j                    d S r6   r   r:   s     r   r<   zConvertIntSource.reconstruct0      	r,   c                     dS )Nz%cast_symbool_to_symint_guardless({0})rO   r?   s    r   rD   zConvertIntSource._name_template3  s    66r,   r   rE   r  rO   r,   r   r  r  +  sc        % % % %    7 7 7 7 X7 7 7r,   r  c                   F    e Zd ZU eed<   d	dZd
dZedefd            Z	dS )DynamicScalarSourceis_intr   Nc                     | j         J d S r6   r   r?   s    r   r   z!DynamicScalarSource.__post_init__<  r  r,   r4   r   c                                          fd            | j                                       t          dd                     d S )Nc                  0                          dd          S )Nbuiltinsrl   r  r4   s   r   r   z1DynamicScalarSource.reconstruct.<locals>.<lambda>D  s    g&>&>z5&Q&Q r,   r   Fr   r   r   r   r:   s    `r   r<   zDynamicScalarSource.reconstruct?  sZ    
 	QQQQRRR	21e<<=====r,   c                     dS )Nzint({0})rO   r?   s    r   rD   z"DynamicScalarSource._name_templateH  s    zr,   r   rE   )
rF   rG   rH   rJ   rI   r   r<   rL   r)   rD   rO   r,   r   r!  r!  8  sn         LLL% % % %> > > >     X  r,   r!  c                   :    e Zd ZddZd	dZedefd            ZdS )
FlattenScriptObjectSourcer   Nc                     | j         J d S r6   r   r?   s    r   r   z'FlattenScriptObjectSource.__post_init__O  r  r,   r4   r   c                 &     || j                    d S r6   r   r:   s     r   r<   z%FlattenScriptObjectSource.reconstructR  r  r,   c                     dS )Nz{0}.__obj_flatten__()rO   r?   s    r   rD   z(FlattenScriptObjectSource._name_templateU  s    &&r,   r   rE   r  rO   r,   r   r,  r,  M  sc        % % % %    ' ' ' ' X' ' 'r,   r,  c                   :    e Zd ZddZd	dZedefd            ZdS )
ScriptObjectQualifiedNameSourcer   Nc                     | j         J d S r6   r   r?   s    r   r   z-ScriptObjectQualifiedNameSource.__post_init__\  r  r,   r4   r   c                 &     || j                    d S r6   r   r:   s     r   r<   z+ScriptObjectQualifiedNameSource.reconstruct_  r  r,   c                     dS )Nz{0}._type().qualified_name()rO   r?   s    r   rD   z.ScriptObjectQualifiedNameSource._name_templateb  s    --r,   r   rE   r  rO   r,   r   r1  r1  Z  sc        % % % %    . . . . X. . .r,   r1  c                   2    e Zd ZddZedefd            ZdS )AttrProxySourcer4   r   r   Nc                 &     || j                    d S r6   r   r:   s     r   r<   zAttrProxySource.reconstructh  r  r,   c                     dS )Nz{0}.get_base()rO   r?   s    r   rD   zAttrProxySource._name_templatek  s    r,   rE   r   rO   r,   r   r6  r6  g  sO                    X     r,   r6  c                       e Zd ZU eeef         ed<   dZeed<    e	j
        ddd          Z
eed<    e	j
        ddd          Zeed<   dd	ZddZej        defd            ZdS )DefaultsSourceidx_keyFis_kw)initr(   comparefield_namer   Nc           
      6   | j         s
J d            | j        rt          | j        t                    sJ t
                              | dd           t
                              | ddt          | j                   dt          | j                   d           d S t          | j        t                    sJ 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__[rB   )
r   r<  r   r;  r)   r   r   r+   r?  rl   r?   s    r   r   zDefaultsSource.__post_init__w  s5   y 	
 	
k	
 	
 	
 : 	dlC00000tW.>???K$*--KK$,1G1GKKK     dlC00000tWn===gX(<(<XXx?U?UXXX    r,   r4   r   c                     || j                    |                    |                    | j                             |                    |                    | j                             |                    t                                 d S r6   )r   r   r   r?  r8   ri   r;  r   r:   s     r   r<   zDefaultsSource.reconstruct  s}    	g77
CCDDDg77EEFFF24455555r,   c                     | j         S r6   )r@  r?   s    r   rD   zDefaultsSource._name_template  s
    zr,   r   rE   )rF   rG   rH   r   rl   r)   rI   r<  rJ   dataclassesr?  r@  r   r<   rM   rN   rD   rO   r,   r   r:  r:  p  s         38_E4""E5IIIE3III""E5IIIE3III   &6 6 6 6       r,   r:  c                   t     e Zd ZU eed<   dZeed<   d fdZdd	Zde	fd
Z
ej        defd            Z xZS )GetItemSourceindexFindex_is_slicer   Nc                    | j         J t          | j        t                    r]t	                                          d| j                                                   t	                                          dd           d S d S )NrJ  rK  T)r   r   rJ  slicesuperr   
__reduce__)r;   	__class__s    r   r   zGetItemSource.__post_init__  sx    y$$$dj%(( 	8GG)>)>)@)@AAAGG 0$77777	8 	8r,   r4   r   c                 F    || j                    | j        r;|                    |                    |                                                      n-|                    |                    | j                             |                    t                                 d S r6   )r   rK  r8   ri   unpack_slicerJ  r   r:   s     r   r<   zGetItemSource.reconstruct  s    	 	I!!'";";D<M<M<O<O"P"PQQQQ!!'";";DJ"G"GHHH24455555r,   c                 2    | j         sJ | j        \  }} || S r6   )rK  rJ  )r;   slice_class
slice_argss      r   rR  zGetItemSource.unpack_slice  s*    """""&*Z{J''r,   c                     t          | j        t                    rJ | j        r'dt	          |                                 d           dS dt	          | j        d           dS )N{0}[TrA   rB   )r   rJ  r   rK  r+   rR  r?   s    r   rD   zGetItemSource._name_template  sr    
 dj&11111 	EMHT%6%6%8%8TJJJMMMMDHTZDAAADDDDr,   r   rE   )rF   rG   rH   r   rI   rK  rJ   r   r<   rM  rR  rM   rN   r)   rD   __classcell__rP  s   @r   rI  rI    s         JJJ ND   8 8 8 8 8 86 6 6 6(e ( ( ( (
 E E E E E E E E Er,   rI  c                   T    e Zd ZU eed<   d	dZej        defd            Z	de
fdZdS )
ConstDictKeySourcerJ  r4   r   r   Nc                                          fd            | j                                                           | j                                                 t          dd                     d S )Nc                  D                          t          j        d          S )Ndict_keys_getitemr  r   rF   r(  s   r   r   z0ConstDictKeySource.reconstruct.<locals>.<lambda>  s    G,,U^=PQQ r,   r   Fr   r   r8   ri   rJ  r   r   r:   s    `r   r<   zConstDictKeySource.reconstruct  s    QQQQ	
 	
 	
 		g77
CCDDD21e<<=====r,   c                 6    dt          | j        d           dS )Nzlist(dict.keys({0}))[TrA   rB   r+   rJ  r?   s    r   rD   z!ConstDictKeySource._name_template  s%     R$*)N)N)NQQQQr,   c                     dS r   rO   r?   s    r   is_dict_keyzConstDictKeySource.is_dict_key  r   r,   rE   )rF   rG   rH   r   rI   r<   rM   rN   r)   rD   rJ   rd  rO   r,   r   r[  r[    s~         JJJ> > > > R R R R RT      r,   r[  c                   \    e Zd ZU eed<   d
dZddZej        de	fd            Z
defd	ZdS )NonSerializableSetGetItemSourcerJ  r   Nc                 J    ddl m} |                    | j                  sJ d S Nr   )ConstantVariable)	variablesri  
is_literalrJ  r;   ri  s     r   r   z-NonSerializableSetGetItemSource.__post_init__  s6    //////**4:6666666r,   r4   r   c                                          fd            | j                                                           | j                                                 t          dd                     d S )Nc                  D                          t          j        d          S )Nset_getitemr_  r(  s   r   r   z=NonSerializableSetGetItemSource.reconstruct.<locals>.<lambda>  s    G,,U^]KK r,   r   Fr`  r:   s    `r   r<   z+NonSerializableSetGetItemSource.reconstruct  s    KKKK	
 	
 	
 		g77
CCDDD21e<<=====r,   c                 6    dt          | j        d           dS )Nz
list({0})[TrA   rB   rb  r?   s    r   rD   z.NonSerializableSetGetItemSource._name_template  s%     GhtzdCCCFFFFr,   c                     dS )NFrO   r?   s    r   rd  z+NonSerializableSetGetItemSource.is_dict_key  s    ur,   r   rE   )rF   rG   rH   rl   rI   r   r<   rM   rN   r)   rD   rJ   rd  rO   r,   r   rf  rf    s         JJJ7 7 7 7
> > > > G G G G GT      r,   rf  c                   P    e Zd ZU eed<   d	dZd
dZej        de	fd            Z
dS )DictGetItemSourcerJ  r   Nc                     ddl m} t          | j        t                    s|                    | j                  sJ d S d S rh  rj  ri  r   rJ  r[  rk  rl  s     r   r   zDictGetItemSource.__post_init__  d    //////J*
 
 	5((44	5 	5 	5 	5 	5 	5 	5r,   r4   r   c                     || j                    t          | j        t                    r || j                   n-|                    |                    | j                             |                    t                                 d S r6   )r   r   rJ  r   r8   ri   r   r:   s     r   r<   zDictGetItemSource.reconstruct  s    	 dj&)) 	IGDJ!!'";";DJ"G"GHHH24455555r,   c                     t          | j        t                    rdt          | j        j                   dS dt          | j        d           dS )NrW  rB   TrA   r   rJ  r[  r+   r!   r?   s    r   rD   z DictGetItemSource._name_template  sU    dj"455 	E8HTZ_558888DHTZDAAADDDDr,   r   rE   rF   rG   rH   r   rI   r   r<   rM   rN   r)   rD   rO   r,   r   rs  rs    s{         
 JJJ5 5 5 5	6 	6 	6 	6 E E E E E E Er,   rs  c                   P    e Zd ZU eed<   d	dZd
dZej        de	fd            Z
dS )DictSubclassGetItemSourcerJ  r   Nc                     ddl m} t          | j        t                    s|                    | j                  sJ d S d S rh  ru  rl  s     r   r   z'DictSubclassGetItemSource.__post_init__  rv  r,   r4   r   c                 N                        fd            | j                   t          | j        t                    r | j                   n-                                        | j                                                 t          dd                     d S )Nc                  D                          t          j        d          S )Ndict_getitemr_  r(  s   r   r   z7DictSubclassGetItemSource.reconstruct.<locals>.<lambda>       G,,U^^LL r,   r   F)	r   r   r   rJ  r   r8   ri   r   r   r:   s    `r   r<   z%DictSubclassGetItemSource.reconstruct  s     	LLLL	
 	
 	

 		 dj&)) 	IGDJ!!'";";DJ"G"GHHH21e<<=====r,   c                     t          | j        t                    rdt          | j        j                   dS dt          | j        d           dS )Nzdict.__getitem__({0}, r   rW  TrA   rB   ry  r?   s    r   rD   z(DictSubclassGetItemSource._name_template.  sU    dj"455 	EJhtz.G.GJJJJDHTZDAAADDDDr,   r   rE   rz  rO   r,   r   r|  r|    s{         
 JJJ5 5 5 5> > > >& E E E E E E Er,   r|  c                   @    e Zd ZdZddZej        defd            ZdS )	ListGetItemSourcezY
    Same as GetItemSource with reconstruct and name overridden to be list specific.
    r4   r   r   Nc                 $                        fd            | j                   | j        rt          d                                                  | j                                                 t          dd                     d S )Nc                  D                          t          j        d          S )Nlist_getitemr_  r(  s   r   r   z/ListGetItemSource.reconstruct.<locals>.<lambda>B  r  r,   >List[slice] is a temporary object and should not have a sourcer   F)	r   r   rK  RuntimeErrorr8   ri   rJ  r   r   r:   s    `r   r<   zListGetItemSource.reconstruct<  s    
 	LLLL	
 	
 	

 		  	IP   !!'";";DJ"G"GHHH21e<<=====r,   c                     t          | j        t                    rJ | j        rt	          d          dt          | j        d           dS )Nr  zlist.__getitem__({0}, TrA   r   )r   rJ  r   rK  r  r+   r?   s    r   rD   z ListGetItemSource._name_templateR  s`    
 dj&11111 	WP   Whtzd.S.S.SVVVVr,   rE   )	rF   rG   rH   r   r<   rM   rN   r)   rD   rO   r,   r   r  r  6  sd         > > > >, 
W 
W 
W 
W 
W 
W 
Wr,   r  c                   <    e Zd ZddZej        defd            ZdS )TupleIteratorGetItemSourcer4   r   r   Nc                                          fd            | j                                                           | j                                                 t          dd                     d S )Nc                  D                          t          j        d          S )Ntuple_iterator_getitemr_  r(  s   r   r   z8TupleIteratorGetItemSource.reconstruct.<locals>.<lambda>d  s    G,,U^=UVV r,   r   Fr`  r:   s    `r   r<   z&TupleIteratorGetItemSource.reconstructb  s    VVVV	
 	
 	
 		g77
CCDDD21e<<=====r,   c                 6    dt          | j        d           dS )Nz___tuple_iterator_getitem({0}, TrA   r   rb  r?   s    r   rD   z)TupleIteratorGetItemSource._name_templatej  s(     YPT0U0U0UXXX	
r,   rE   )rF   rG   rH   r<   rM   rN   r)   rD   rO   r,   r   r  r  `  sS        > > > > 
 
 
 
 
 
 
r,   r  c                   2    e Zd ZddZedefd            ZdS )NamedTupleFieldsSourcer4   r   r   Nc                 v     || j                    |                    |                    d                     d S )N_fieldsr   r:   s     r   r<   z"NamedTupleFieldsSource.reconstructs  r   r,   c                     dS )Nz___namedtuple_fields({0})rO   r?   s    r   rD   z%NamedTupleFieldsSource._name_templatew      **r,   rE   r   rO   r,   r   r  r  q  sS        D D D D + + + + X+ + +r,   r  c                   2    e Zd ZddZedefd            ZdS )DataclassFieldsSourcer4   r   r   Nc                                          fd            | j                                       t          dd                     d S )Nc                  D                          t          j        d          S )Ndataclass_fieldsr_  r(  s   r   r   z3DataclassFieldsSource.reconstruct.<locals>.<lambda>  s    G,,U^=OPP r,   r   Fr)  r:   s    `r   r<   z!DataclassFieldsSource.reconstruct~  s`    PPPP	
 	
 	
 		21e<<=====r,   c                     dS )Nz___dataclass_fields({0})rO   r?   s    r   rD   z$DataclassFieldsSource._name_template  s    ))r,   rE   r   rO   r,   r   r  r  |  sO        > > > > * * * * X* * *r,   r  c                   :    e Zd ZddZd	dZedefd            ZdS )

TypeSourcer   Nc                     | j         J d S r6   r   r?   s    r   r   zTypeSource.__post_init__  r  r,   r4   r   c                                          fd            | j                                       t          dd                     d S )Nc                  0                          dd          S )Nr&  typer'  r(  s   r   r   z(TypeSource.reconstruct.<locals>.<lambda>  s    g&>&>z6&R&R r,   r   Fr)  r:   s    `r   r<   zTypeSource.reconstruct  sX    RRRRSSS	21e<<=====r,   c                     dS )Nz	type({0})rO   r?   s    r   rD   zTypeSource._name_template  s    {r,   r   rE   r  rO   r,   r   r  r    sc        % % % %> > > >
     X  r,   r  c                   2    e Zd ZddZedefd            ZdS )OptimizerSourcer4   r   r   Nc                 &     || j                    d S r6   r   r:   s     r   r<   zOptimizerSource.reconstruct  r  r,   c                     dS r   rO   r?   s    r   rD   zOptimizerSource._name_template  r   r,   rE   r   rO   r,   r   r  r    sO                X  r,   r  c                   X    e Zd ZddZej        defd            Zede	fd            Z
dS )	NNModuleSourcer4   r   r   Nc                 &     || j                    d S r6   r   r:   s     r   r<   zNNModuleSource.reconstruct  r  r,   c                 0    t           | j        j                 S r6   r   r?   s    r   r   zNNModuleSource.guard_source  r   r,   c                     dS r   rO   r?   s    r   rD   zNNModuleSource._name_template  r   r,   rE   )rF   rG   rH   r<   rM   rN   r   r   rL   r)   rD   rO   r,   r   r  r    s            Kk K K K K     X  r,   r  c                   4    e Zd Zej        defd            ZdS )UnspecializedNNModuleSourcer   c                 0    t           | j        j                 S r6   )%_GUARD_SOURCE_UNSPECIALIZED_NN_MODULEr   r   r?   s    r   r   z(UnspecializedNNModuleSource.guard_source  s    4TY5KLLr,   Nr   rO   r,   r   r  r    sD        Mk M M M M M Mr,   r  c                   4    e Zd Zej        defd            ZdS )"UnspecializedBuiltinNNModuleSourcer   c                 0    t           | j        j                 S r6   )-_GUARD_SOURCE_UNSPECIALIZED_BUILTIN_NN_MODULEr   r   r?   s    r   r   z/UnspecializedBuiltinNNModuleSource.guard_source  s    <TY=STTr,   Nr   rO   r,   r   r  r    sD        Uk U U U U U Ur,   r  c                   4    e Zd Zej        defd            ZdS )FSDPNNModuleSourcer   c                 0    t           | j        j                 S r6   )_GUARD_SOURCE_FSDP_MODULEr   r   r?   s    r   r   zFSDPNNModuleSource.guard_source  s    ()?@@r,   Nr   rO   r,   r   r  r    sD        Ak A A A A A Ar,   r  c                   F    e Zd Zedefd            Zedefd            ZdS )GlobalStateSourcer   c                     dS Nr   rO   r?   s    r   rD   z GlobalStateSource._name_template      rr,   c                     t           j        S r6   rw   r?   s    r   r   zGlobalStateSource.guard_source  ry   r,   NrF   rG   rH   rL   r)   rD   r   r   rO   r,   r   r  r    s`            X "k " " " X" " "r,   r  c                   p     e Zd ZdZdededdf fdZedefd            Zdd
Z	ede
fd            Z xZS )TorchSourcezPoints to the actual `torch` module - used instead of GlobalSource
    in case the user has overridden `torch` in their local namespaceargskwargsr   Nc                      t                      j        |i | ddlm}m}  ||                     |j                             d S Nr   )GuardBuilderinstall_guardrN  __init__guardsr  r  r   ID_MATCHr;   r  r  r  r  rP  s        r   r  zTorchSource.__init__  \    $)&)))77777777dool&;<<=====r,   c                     dS )Nz__import__('torch')rO   r?   s    r   rD   zTorchSource._name_template  s    $$r,   r4   r   c                     |                     |                    d          t          d          |                    d          g           d S )Nr   torchr   ri   r   create_import_namer:   s     r   r<   zTorchSource.reconstruct  sV    ))!,,"1%%**733	
 	
 	
 	
 	
r,   c                     t           j        S r6   rw   r?   s    r   r   zTorchSource.guard_source  ry   r,   rE   rF   rG   rH   r   r   r  rL   r)   rD   r<   r   r   rX  rY  s   @r   r  r    s        H H>c >S >T > > > > > > % % % % X%
 
 
 
 "k " " " X" " " " "r,   r  c                   p     e Zd ZdZdededdf fdZedefd            Zdd
Z	ede
fd            Z xZS )CollectionsSourcezPoints to the actual `collections` module - used instead of GlobalSource
    in case the user has overridden `collections` in their local namespacer  r  r   Nc                      t                      j        |i | ddlm}m}  ||                     |j                             d S r  r  r  s        r   r  zCollectionsSource.__init__  r  r,   c                     dS )Nz__import__('collections')rO   r?   s    r   rD   z CollectionsSource._name_template  r  r,   r4   r   c                     |                     |                    d          t          d          |                    d          g           d S )Nr   collectionsr  r:   s     r   r<   zCollectionsSource.reconstruct  sV    ))!,,"1%%**=99	
 	
 	
 	
 	
r,   c                     t           j        S r6   rw   r?   s    r   r   zCollectionsSource.guard_source  ry   r,   rE   r  rY  s   @r   r  r    s        N N>c >S >T > > > > > > + + + + X+
 
 
 
 "k " " " X" " " " "r,   r  c                   p    e Zd ZU eed<   ej        defd            ZdefdZ	d
dZ
edefd	            ZdS )TorchFunctionModeStackSourceindr   c                 L    dt          |                                            dS )Nz$___get_torch_function_mode_stack_at(r   )r+   
_get_indexr?   s    r   rD   z+TorchFunctionModeStackSource._name_template  s%    Tht?P?P6Q6QTTTTr,   c                 B    ddl m} |                    | j                  S )Nr   )TorchFunctionModeStackVariable)variables.torch_functionr  get_mode_indexr  )r;   r  s     r   r  z'TorchFunctionModeStackSource._get_index  s*    LLLLLL-<<TXFFFr,   r4   r   Nc                                          fd                                                   |                                           g                               t	          dd                     d S )Nc                  D                          t          j        d          S )N get_torch_function_mode_stack_atr_  r(  s   r   r   z:TorchFunctionModeStackSource.reconstruct.<locals>.<lambda>  s    G,, B  r,   r   F)r   r   ri   r  r   r:   s    `r   r<   z(TorchFunctionModeStackSource.reconstruct  s       	
 	
 	

 	w889J9JKKLMMM21e<<=====r,   c                     t           j        S r6   rw   r?   s    r   r   z)TorchFunctionModeStackSource.guard_source!  ry   r,   rE   )rF   rG   rH   rl   rI   rM   rN   r)   rD   r  r<   rL   r   r   rO   r,   r   r  r    s         	HHHU U U U UGC G G G G
> > > > "k " " " X" " "r,   r  c                   t    e Zd ZU eed<   ddZedefd            Ze	j
        defd            Zd	edefd
ZdS )r   source_namer4   r   r   Nc                 d    |                     |                    | j        d                     d S )NFrr   )r8   ru   r  r:   s     r   r<   zConstantSource.reconstruct*  s2    g889Iu8UUVVVVVr,   c                     t           j        S r6   )r   r   r?   s    r   r   zConstantSource.guard_source-  s    ##r,   c                     | j         S r6   )r  r?   s    r   rD   zConstantSource._name_template1  s    r,   r   c                     t           r6   rX   r   s     r   r   zConstantSource.make_guard5  r   r,   rE   )rF   rG   rH   r)   rI   r<   rL   r   r   rM   rN   rD   r   r   rO   r,   r   r   r   &  s         W W W W $k $ $ $ X$          "S "S " " " " " "r,   r   c                   2    e Zd Zedefd            ZddZdS )NumpyTensorSourcer   c                     dS )Nz___from_numpy({0})rO   r?   s    r   rD   z NumpyTensorSource._name_template;  s    ##r,   r4   r   Nc                                          fd            | j                                       t          dd                     d S )Nc                  0                          dd          S )Nr  	as_tensorr'  r(  s   r   r   z/NumpyTensorSource.reconstruct.<locals>.<lambda>@  s    g&>&>w&T&T r,   r   Fr)  r:   s    `r   r<   zNumpyTensorSource.reconstruct?  sX    TTTTUUU	21e<<=====r,   rE   )rF   rG   rH   rL   r)   rD   r<   rO   r,   r   r  r  9  sM        $ $ $ $ X$> > > > > >r,   r  c                   *    e Zd Zedefd            ZdS )SubclassAttrListSourcer   c                     dS )Nz{0}.__tensor_flatten__()[0]rO   r?   s    r   rD   z%SubclassAttrListSource._name_templateG  s    ,,r,   NrF   rG   rH   rL   r)   rD   rO   r,   r   r  r  E  s9        - - - - X- - -r,   r  c                   *    e Zd Zedefd            ZdS )FloatTensorSourcer   c                     dS )Nz___as_tensor({0})rO   r?   s    r   rD   z FloatTensorSource._name_templateP  s    ""r,   Nr  rO   r,   r   r  r  N  s9        # # # # X# # #r,   r  c                   *    e Zd Zedefd            ZdS )CallMethodItemSourcer   c                     dS )Nz
{0}.item()rO   r?   s    r   rD   z#CallMethodItemSource._name_templateW  s    |r,   Nr  rO   r,   r   r  r  U  s9            X  r,   r  c                   F    e Zd Zedefd            Zedefd            ZdS )ShapeEnvSourcer   c                     dS r  rO   r?   s    r   rD   zShapeEnvSource._name_templatea  r  r,   c                     t           j        S r6   )r   	SHAPE_ENVr?   s    r   r   zShapeEnvSource.guard_sourcee  r   r,   Nr  rO   r,   r   r   r   _  s`            X %k % % % X% % %r,   r   c                   d    e Zd ZU eed<   ej        defd            Zd	dZ	e
defd            ZdS )
CurrentStreamSourcer   r   c                 p    dt          | j        j                   dt          | j        j                   dS )Nz$___get_current_stream(torch.device('z', z)))r+   r   r  rJ  r?   s    r   rD   z"CurrentStreamSource._name_templaten  s8    tht{?O6P6PttU]^b^i^oUpUpttttr,   r4   r   Nc                    d}                     fd                                fd                                                   | j        j                  g           | j        j        8|dz  }                                        | j        j                  g                               t          |d                                         t          dd                     d S )Nr   c                  D                          t          j        d          S )Nget_current_streamr_  r(  s   r   r   z1CurrentStreamSource.reconstruct.<locals>.<lambda>u  s    G,,U^=QRR r,   c                  0                          dd          S )Nr  r   r'  r(  s   r   r   z1CurrentStreamSource.reconstruct.<locals>.<lambda>w  s    g&>&>w&Q&Q r,   F)r   r   ri   r   r  rJ  r   )r;   r4   num_argss    ` r   r<   zCurrentStreamSource.reconstructr  s    RRRR	
 	
 	
 	QQQQRRRw889IJJKLLL;(MH!!7#<#<T[=N#O#O"PQQQ28UCCDDD21e<<=====r,   c                     t           j        S r6   rw   r?   s    r   r   z CurrentStreamSource.guard_source  ry   r,   rE   )rF   rG   rH   device_typerI   rM   rN   r)   rD   r<   rL   r   r   rO   r,   r   r  r  j  s         u u u u u> > > > "k " " " X" " "r,   r  c                   F    e Zd Zedefd            Zedefd            ZdS )BackwardStateSourcer   c                     dS r  rO   r?   s    r   rD   z"BackwardStateSource._name_template  r  r,   c                     t           j        S r6   )r   BACKWARD_STATEr?   s    r   r   z BackwardStateSource.guard_source  s    ))r,   Nr  rO   r,   r   r  r    s`            X *k * * * X* * *r,   r  only_allow_inputr  c                    t          | t                    rt          | j        |          S t          | t                    sd S |r	| j        sd S | j        S Nr  )r   r	   get_local_source_namer   r/   r1   r0   r   r  s     r   r  r    sc     &-(( U$V[CSTTTTfk** t  tr,   c                (    t          | |          d uS r  )r  r  s     r   is_from_local_sourcer    s     :JKKKSWWWr,   c                 $    t          |           d uS r6   )get_global_source_namer   s    r   is_from_global_sourcer    s    !&))55r,   c                     t          | t                    rt          | j                  S t          | t                    sd S | j        S r6   )r   r	   r  r   rn   ro   r   s    r   r  r    sD    &-(( 3%fk222fl++ tr,   c                     t          | t                    rt          | j                  S t          | t                    o| j        o| j         S r6   )r   r	   is_from_nonlocal_sourcer   r/   r3   r1   r   s    r   r   r     sN    &-(( 4&v{3336;'' 	 +	 r,   c                     t          | t                    rdS t          | t                    rt          | j                  S dS r   )r   r   r	   is_from_closure_sourcer   r   s    r   r"  r"    s@    &-(( t&-(( 3%fk2225r,   targetc                 b    t          | t                    rt          | j        |          S | |k    S r6   )r   r	   is_from_sourcer   )r   r#  s     r   r%  r%    s1    &-(( 3fk6222Vr,   c                     t          | t                    rdS t          | t                    rt          | j                  S dS r   )r   r  r	   &is_from_unspecialized_nn_module_sourcer   r   s    r   r'  r'    sB    &566 t&-(( C5fkBBB5r,   c                     t          | t                    rdS t          | t                    rt          | j                  S dS r   )r   r  r	   .is_from_unspecialized_builtin_nn_module_sourcer   r   s    r   r)  r)    sB    &<== t&-(( K=fkJJJ5r,   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   s    r   r+  r+    sB    &899 t&-(( F8EEE5r,   c                     t          | t                    rdS t          | t                    rt          | j                  S dS r   )r   r,  r	   $is_from_flatten_script_object_sourcer   r   s    r   r-  r-    sC    &344 At	FM	*	* A3FK@@@5r,   c                     t          | t                    rdS t          | t                    rt          | j                  S dS r   )r   r  r	   is_from_optimizer_sourcer   r   s    r   r/  r/    s@    &/** t&-(( 5'4445r,   c                    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                    rt          | j                  S dS )NTrB  rC  F)	r   r:  rs  r   r   r   rI  r	   is_from_defaultsr   s    r   r1  r1    s    &.)) t 	6,--v{J// K"222t 	6=))v{J// K.00t&-(( -,,,5r,   c                     t          | t                    rdS t          | t                    rt          | j                  S dS r   )r   r   r	   is_from_skip_guard_sourcer   r   s    r   r3  r3    s@    &/** t&-(( 6(5555r,   )F)xr   rG  enumrM   collections.abcr   typingr   r   r   r   r  r   r  torch._guardsr	   r
   r   r   r   r   r   bytecode_transformationr   r   r   r4   r   r>   LOCAL_SPECIALIZED_NN_MODULErx   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  rJ   r   r)   r"   r+   r/   rQ   rZ   ra   rn   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Enumr   r  r  r  r  r!  r,  r1  r6  r:  rI  r[  rf  rs  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%  	lru_cacher'  r)  r+  r-  r/  r1  r3  rO   r,   r   <module>rC     s   &          $ $ $ $ $ $ 6 6 6 6 6 6 6 6 6 6 6 6 ' ' ' ' ' '                              #"""""" {>@+[-T,k.V-{/X.0Z5{7h68j!;#@"K$B' #  {@B-{/X.0Z+[-V,k.X5{7h68j!;#@"K$B) %" {HJ-{/`.0b+[-^,k.`5{7h68j!;#@"K$B1 - {46+[-J,k.L!;#@"K$B-{/L.0N5{7T68V 	v 	$ 	 	 	 	&8F#3 & & & & &3 3 3 3# 3 3 3 3 4(((B B B B B& B B )(B< 4(((
 
 
 
 
f 
 
 )(
$ 4(((P P P P P6 P P )(P 4(((B B B B B B B )(B" 4(((C C C C C6 C C )(C 4(((E E E E E& E E )(E( 4(((       )( 4(((	 	 	 	 	0 	 	 )(	 4(((0 0 0 0 0 0 0 )(0. 4(((
 
 
 
 
 
 
 )(
0 4((($ $ $ $ $] $ $ )($ 4(((    M   )( 4(((L L L L Lf L L )(L& 4(((       )( 4(((! ! ! ! !M ! ! )(! 4(((	0 	0 	0 	0 	0 	0 	0 )(	0 4(((K K K K K
 K K )(K 4(((	 	 	 	 	Z 	 	 )(	 4(((    f   )(& 4(((    m   )(@ @ @ @ @TY @ @ @  4(((#E #E #E #E #E= #E #E )(#EL 4(((0 0 0 0 0M 0 0 )(0 4(((
 
 
 
 
= 
 
 )(
 4(((	7 	7 	7 	7 	7} 	7 	7 )(	7 4(((    -   )(( 4(((	' 	' 	' 	' 	' 	' 	' )(	' 4(((	. 	. 	. 	. 	.m 	. 	. )(	.         m       4(((! ! ! ! !] ! ! )(!H 4(((!E !E !E !E !EM !E !E )(!EH 4(((       )(( 4(((    m   )(4 4(((E E E E E E E )(ED 4(((%E %E %E %E %E %E %E )(%EP 4(((&W &W &W &W &W &W &W )(&WR 4(((
 
 
 
 
 
 
 )(
  4(((+ + + + +] + + )(+ 4(((
* 
* 
* 
* 
*M 
* 
* )(
* 4(((       )( 4(((    m   )( 4(((
 
 
 
 
] 
 
 )(
 4(((M M M M M. M M )(M 4(((U U U U U)D U U )(U 4(((A A A A A A A )(A 4(((" " " " " " " )(" 4(((" " " " "& " " )("8 4(((" " " " " " " )("8 4(((" " " " "6 " " )("4 4(((" " " " "V " " )("$ 4(((> > > > > > > )(> 4(((- - - - -] - - )(- 4(((# # # # # # # )(# 4(((    =   )( 4(((% % % % %V % % )(% 4(((" " " " "& " " )("2 4(((* * * * *& * * )(* 16	 	 		)-	c]	 	 	 	 FK X X X Xd Xt X X X X6& 6T 6 6 6 66 hsm    F t    6 d    6 6 d     6 d     6 d     f       D     V      V     2 f       r,   