
    Vht                     f   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	j0                  e	j0                  e	j2                  e	j2                  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	j0                  e	j0                  e	j2                  e	j2                  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	j0                  e	j0                  e	j2                  e	j2                  i
Ze	j                   e	j0                  e	j$                  e	j2                  e	j"                  e	j0                  e	j&                  e	j2                  e	j0                  e	j0                  e	j2                  e	j2                  e	j(                  e	j0                  e	j*                  e	j2                  e	j,                  e	j0                  e	j.                  e	j2                  i
Zd Z ej>                  d	
       G d de
             Z  ej>                  d	
       G d de
             Z! ej>                  d	
       G d de
             Z" ej>                  d	
       G d de
             Z# ej>                  d	
       G d de
             Z$ ej>                  d	
       G d de             Z% ej>                  d	
       G d de%             Z& ej>                  d	
       G d de             Z' ej>                  d	
       G d de             Z( ej>                  d	
       G d de
             Z) ej>                  d	
       G d d e             Z* ej>                  d	
       G d! d"e'             Z+ ej>                  d	
       G d# d$e'             Z, ej>                  d	
       G d% d&e
             Z- G d' d(ej\                        Z/ ej>                  d	
       G d) d*e             Z0 ej>                  d	
       G d+ d,e             Z1 ej>                  d	
       G d- d.e             Z2 ej>                  d	
       G d/ d0e             Z3 ej>                  d	
       G d1 d2e             Z4 ej>                  d	
       G d3 d4e             Z5 G d5 d6e      Z6 ej>                  d	
       G d7 d8e             Z7 ej>                  d	
       G d9 d:e             Z8 ej>                  d	
       G d; d<e             Z9 ej>                  d	
       G d= d>e             Z: ej>                  d	
       G d? d@e8             Z; ej>                  d	
       G dA dBe8             Z< ej>                  d	
       G dC dDe             Z= ej>                  d	
       G dE dFe             Z> ej>                  d	
       G dG dHe             Z? ej>                  d	
       G dI dJe?             Z@ ej>                  d	
       G dK dLe@             ZA ej>                  d	
       G dM dNe?             ZB ej>                  d	
       G dO dPe
             ZC ej>                  d	
       G dQ dRe
             ZD ej>                  d	
       G dS dTe
             ZE ej>                  d	
       G dU dVe             ZF ej>                  d	
       G dW dXe             ZG ej>                  d	
       G dY dZe             ZH ej>                  d	
       G d[ d\e             ZI ej>                  d	
       G d] d^e
             ZJ ej>                  d	
       G d_ d`e
             ZKdadbdce
fddZLdce
fdeZMdce
fdfZNdce
fdgZOdce
fdhZPy)ia  
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                     t        | t              ry	 | j                         t        j                  k(  ry	 y# t
        $ r Y yw xY wNTF)
isinstanceConstantSourceguard_sourcer   CONSTANTNotImplementedErrorsources    D/home/dcms/DCMS/lib/python3.12/site-packages/torch/_dynamo/source.pyis_constant_sourcer   _   sO    &.) K$8$88 9
   s   !7 	AA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 Zd Zd	 Zy)
LocalSource
local_nameFis_inputNdynamismis_derefed_cell_contentsc                     | j                   r|j                  | j                         y |j                  |j	                  | j                               y N)r   
load_derefr   append_outputcreate_loadselfcodegens     r   reconstructzLocalSource.reconstruct{   s:    ((t/!!'"5"5doo"FG    c                 "    t         j                  S r    )r   LOCALr%   s    r   r   zLocalSource.guard_source   s       r(   c                 4    dt        | j                         dS )NzL[])reprr   r+   s    r   namezLocalSource.name   s    D)*!,,r(   )__name__
__module____qualname__str__annotations__r   boolr   r   	frozensetr   r'   r   r/    r(   r   r   r   k   sE    O Hd *.Hhy~&-
 &+d*H!-r(   r   c                   *    e Zd ZU eed<   d Zd Zd Zy)SyntheticLocalSourcer   c                 X    |j                  |j                  | j                               y r    )r"   r#   r   r$   s     r   r'   z SyntheticLocalSource.reconstruct   s    g11$//BCr(   c                 "    t         j                  S r    )r   SYNTHETIC_LOCALr+   s    r   r   z!SyntheticLocalSource.guard_source   s    ***r(   c                 "    d| j                   dS )NzSYNTHETIC_LOCAL[r-   )r   r+   s    r   r/   zSyntheticLocalSource.name   s    !$//!4A66r(   Nr0   r1   r2   r3   r4   r'   r   r/   r7   r(   r   r9   r9      s    OD+7r(   r9   c                   *    e Zd ZU eed<   d Zd Zd Zy)RandomValueSourcerandom_call_indexc                 "    t         j                  S r    )r   RANDOM_VALUEr+   s    r   r   zRandomValueSource.guard_source   s    '''r(   c                    |j                  |j                  |j                  j                  j                               |j                  |j                  | j                               |j                  t        d             y NBINARY_SUBSCR)r"   r#   txoutputrandom_values_varcreate_load_constrA   r   r$   s     r   r'   zRandomValueSource.reconstruct   s^    g11'**2C2C2U2UVWg778N8NOP0ABr(   c                      d| j                    S )Nrandom_value_)rA   r+   s    r   r/   zRandomValueSource.name   s    t55677r(   N)r0   r1   r2   intr4   r   r'   r/   r7   r(   r   r@   r@      s    (C
8r(   r@   c                   *    e Zd ZU eed<   d Zd Zd Zy)GlobalSourceglobal_namec                 \    |j                  |j                  | j                  d             y NTaddr"   create_load_globalrP   r$   s     r   r'   zGlobalSource.reconstruct   s&    g889I9It8TUr(   c                 "    t         j                  S r    r   GLOBALr+   s    r   r   zGlobalSource.guard_source       !!!r(   c                 4    dt        | j                         dS )NG[r-   r.   rP   r+   s    r   r/   zGlobalSource.name   s    D))*+1--r(   Nr>   r7   r(   r   rO   rO      s    V".r(   rO   c                   *    e Zd ZU eed<   d Zd Zd Zy)GlobalWeakRefSourcerP   c                 h     j                   fd       j                  t        dd             y )Nc                  \     j                   j                  j                  d            S rR   rU   r&   r%   s   r   <lambda>z1GlobalWeakRefSource.reconstruct.<locals>.<lambda>   s+    G))**4+;+;*F r(   r   Fadd_push_nullextend_outputr   r$   s   ``r   r'   zGlobalWeakRefSource.reconstruct   s.    	

 	21e<=r(   c                 "    t         j                  S r    rX   r+   s    r   r   z GlobalWeakRefSource.guard_source   rZ   r(   c                 4    dt        | j                         dS )Nr\   z]()r]   r+   s    r   r/   zGlobalWeakRefSource.name   s    D))*+3//r(   Nr>   r7   r(   r   r_   r_      s    >"0r(   r_   c                       e Zd Zd Zd Zd Zy)WeakRefCallSourcec                 h     j                   fd       j                  t        dd             y )Nc                  (      j                         S r    baserb   s   r   rc   z/WeakRefCallSource.reconstruct.<locals>.<lambda>   s    gdii&8 r(   r   Frd   r$   s   ``r   r'   zWeakRefCallSource.reconstruct   s(    8921e<=r(   c                 6    | j                   j                         S r    rn   r   r+   s    r   r   zWeakRefCallSource.guard_source       yy%%''r(   c                 <    | j                   j                          dS )Nz()rn   r/   r+   s    r   r/   zWeakRefCallSource.name   s    )).."#2&&r(   Nr0   r1   r2   r'   r   r/   r7   r(   r   rj   rj      s    >('r(   rj   c                       e Zd Zy)CallFunctionNoArgsSourceNr0   r1   r2   r7   r(   r   rv   rv          r(   rv   c                   0    e Zd ZU eed<   d Zd Zd Zd Zy)
AttrSourcememberc                 ,   | j                   sJ d       d| j                  v rs| j                  j                  d      }t        j	                  | dt        | j                   dj                  |d d                    t        j	                  | d|d          y y Nz9Can't construct an AttrSource without a valid base source.rn   r{   rn   r{   splitobject__setattr__rz   joinr%   member_partss     r   __post_init__zAttrSource.__post_init__       yyUUUy$++;;,,S1LfjCHH\#2=N4OP tX|B/?@ r(   c                 |     || j                          |j                  |j                  | j                               y r    rn   rf   create_load_attrsr{   r$   s     r   r'   zAttrSource.reconstruct   +    		g77DEr(   c                 6    | j                   j                         S r    rp   r+   s    r   r   zAttrSource.guard_source   rq   r(   c                     | j                   j                         s+d| j                  j                          d| j                   dS | j                  j                          d| j                    S )Nzgetattr(, )r~   )r{   isidentifierrn   r/   r+   s    r   r/   zAttrSource.name   sX    {{'')diinn./r$++BB)).."#1T[[M22r(   N	r0   r1   r2   r3   r4   r   r'   r   r/   r7   r(   r   rz   rz      s    KAF(3r(   rz   c                   0    e Zd ZU eed<   d Zd Zd Zd Zy)GenericAttrSourcer{   c                 ,   | j                   sJ d       d| j                  v rs| j                  j                  d      }t        j	                  | dt        | j                   dj                  |d d                    t        j	                  | d|d          y y r}   r   r   s     r   r   zGenericAttrSource.__post_init__   r   r(   c                 |     || j                          |j                  |j                  | j                               y r    r   r$   s     r   r'   zGenericAttrSource.reconstruct   r   r(   c                 6    | j                   j                         S r    rp   r+   s    r   r   zGenericAttrSource.guard_source  rq   r(   c                 X    d| j                   j                          d| j                  dS )Nzobject.__getattribute__(r   r   rn   r/   r{   r+   s    r   r/   zGenericAttrSource.name  s'    )$))..*:);2dkk_ANNr(   Nr   r7   r(   r   r   r      s    KAF(Or(   r   c                   "    e Zd ZU dZeed<   d Zy)LocalCellSourcez
    Conceptually, this class is `LocalSource` for cell objects implicitly
    generated by Python (e.g., captured variables).
    r   c                 X    |j                  |j                  | j                               y r    )r"   create_load_closurer   r$   s     r   r'   zLocalCellSource.reconstruct  s!     	g99$//JKr(   N)r0   r1   r2   __doc__r3   r4   r'   r7   r(   r   r   r     s    
 OLr(   r   c                   .    e Zd ZU dZeed<   d Zd Zd Zy)
GradSourcegradr{   c                 |     || j                          |j                  |j                  | j                               y r    r   r$   s     r   r'   zGradSource.reconstruct&  r   r(   c                 6    | j                   j                         S r    rp   r+   s    r   r   zGradSource.guard_source*  rq   r(   c                 T    | j                   j                          d| j                   S )Nr~   r   r+   s    r   r/   zGradSource.name-  s#    )).."#1T[[M22r(   N)	r0   r1   r2   r{   r3   r4   r'   r   r/   r7   r(   r   r   r   "  s    FCF(3r(   r   c                       e Zd Zd Zy)ParamBufferSourcec                 D    t         | j                  j                            S r    #_GUARD_SOURCE_SPECIALIZED_NN_MODULErn   r   r+   s    r   r   zParamBufferSource.guard_source3      24993I3I3KLLr(   Nr0   r1   r2   r   r7   r(   r   r   r   1  s    Mr(   r   c                       e Zd Zy)UnspecializedParamBufferSourceNrw   r7   r(   r   r   r   8  rx   r(   r   c                   :    e Zd ZU dZee   ed<   d Zd Zd Z	d Z
y)EphemeralSourceNdescc                 "    t         j                  S r    )r   	EPHEMERALr+   s    r   r   zEphemeralSource.guard_sourceJ      $$$r(   c                 J    d| j                   d| j                   z    dS d dS )Nz
<ephemeralz:  >)r   r+   s    r   r/   zEphemeralSource.nameM  s1    		0ED499,NaPP2NaPPr(   c                     t         r    r   r%   fns     r   
make_guardzEphemeralSource.make_guardP      !!r(   c                      yNTr7   r+   s    r   is_ephemeralzEphemeralSource.is_ephemeralS      r(   )r0   r1   r2   r   r   r3   r4   r   r/   r   r   r7   r(   r   r   r   F  s%    D(3-%Q"r(   r   c                       e Zd ZdZdZdZd Zy)TensorPropertyr   r	      c                 v    | t         j                  u ry| t         j                  u ry| t         j                  u ryy )Nsizestridestorage_offset)r   SIZESTRIDESTORAGE_OFFSETr+   s    r   method_namezTensorProperty.method_name\  s:    >&&&^***^222# 3r(   N)r0   r1   r2   r   r   r   r   r7   r(   r   r   r   W  s    DFN$r(   r   c                   D    e Zd ZU eed<   dZee   ed<   d Zd Z	d Z
d Zy)TensorPropertySourcepropNidxc                     | j                   J | j                  t        j                  u r| j                  J y | j                  J y r    )rn   r   r   r   r   r+   s    r   r   z"TensorPropertySource.__post_init__j  sD    yy$$$9955588###88'''r(   c                     j                   fd         j                          j                  *j                  j	                   j                               j                  t         j                  dndd             y )Nc                  z     j                  t        j                  dj                  j	                                S )Ncall_)load_import_fromr
   r0   r   r   rb   s   r   rc   z2TensorPropertySource.reconstruct.<locals>.<lambda>s  s0    G,,%		(=(=(?'@ A r(   r   r	   F)re   rn   r   r"   rJ   rf   r   r$   s   ``r   r'   z TensorPropertySource.reconstructq  sn    	

 			88!!'";";DHH"EF dhh&:5I	
r(   c                 6    | j                   j                         S r    rp   r+   s    r   r   z!TensorPropertySource.guard_source  rq   r(   c                    | j                   t        j                  u r*| j                  j	                          d| j
                   dS | j                   t        j                  u r*| j                  j	                          d| j
                   dS | j                   t        j                  u r+| j
                  J | j                  j	                          dS t        d| j                          )Nz.size()[r-   z
.stride()[z.storage_offset()z
unhandled )	r   r   r   rn   r/   r   r   r   AssertionErrorr+   s    r   r/   zTensorPropertySource.name  s    99+++iinn&'xz;;YY.///iinn&'z$((1==YY.77788###iinn&''899 :dii[!9::r(   )r0   r1   r2   r   r4   r   r   rM   r   r'   r   r/   r7   r(   r   r   r   e  s*    
C#(
(	;r(   r   c                   0    e Zd ZU eed<   d Zd Zd Zd Zy)IndexedSourcer   c                      | j                   J y r    rm   r+   s    r   r   zIndexedSource.__post_init__      yy$$$r(   c                     t         r    r   r$   s     r   r'   zIndexedSource.reconstruct  r   r(   c                 6    | j                   j                         S r    rp   r+   s    r   r   zIndexedSource.guard_source  rq   r(   c                 X    d| j                    d| j                  j                          dS )N(r   r   )r   rn   r/   r+   s    r   r/   zIndexedSource.name  s'    488*Btyy~~/022r(   N)	r0   r1   r2   rM   r4   r   r'   r   r/   r7   r(   r   r   r     s    	H%"(3r(   r   c                   $    e Zd Zd Zd Zd Zd Zy)NegateSourcec                      | j                   J y r    rm   r+   s    r   r   zNegateSource.__post_init__  r   r(   c                     t         r    r   r$   s     r   r'   zNegateSource.reconstruct  r   r(   c                 6    | j                   j                         S r    rp   r+   s    r   r   zNegateSource.guard_source  rq   r(   c                 <    | j                   j                          dS )Nz
.__neg__()rs   r+   s    r   r/   zNegateSource.name  s    )).."#:..r(   Nr0   r1   r2   r   r'   r   r/   r7   r(   r   r   r     s    %"(/r(   r   c                   $    e Zd Zd Zd Zd Zd Zy)ConvertIntSourcec                      | j                   J y r    rm   r+   s    r   r   zConvertIntSource.__post_init__  r   r(   c                 (     || j                          y r    rm   r$   s     r   r'   zConvertIntSource.reconstruct      		r(   c                 6    | j                   j                         S r    rp   r+   s    r   r   zConvertIntSource.guard_source  rq   r(   c                 >    d| j                   j                          dS )Nz!cast_symbool_to_symint_guardless(r   rs   r+   s    r   r/   zConvertIntSource.name  s    2499>>3C2DAFFr(   Nr   r7   r(   r   r   r     s    %(Gr(   r   c                   $    e Zd Zd Zd Zd Zd Zy)FlattenScriptObjectSourcec                      | j                   J y r    rm   r+   s    r   r   z'FlattenScriptObjectSource.__post_init__  r   r(   c                 (     || j                          y r    rm   r$   s     r   r'   z%FlattenScriptObjectSource.reconstruct  r   r(   c                 6    | j                   j                         S r    rp   r+   s    r   r   z&FlattenScriptObjectSource.guard_source  rq   r(   c                 <    | j                   j                          dS )Nz.__obj_flatten__()rs   r+   s    r   r/   zFlattenScriptObjectSource.name  s    )).."##566r(   Nr   r7   r(   r   r   r     s    %(7r(   r   c                   $    e Zd Zd Zd Zd Zd Zy)ScriptObjectQualifiedNameSourcec                      | j                   J y r    rm   r+   s    r   r   z-ScriptObjectQualifiedNameSource.__post_init__  r   r(   c                 (     || j                          y r    rm   r$   s     r   r'   z+ScriptObjectQualifiedNameSource.reconstruct  r   r(   c                 6    | j                   j                         S r    rp   r+   s    r   r   z,ScriptObjectQualifiedNameSource.guard_source  rq   r(   c                 <    | j                   j                          dS )Nz._type().qualified_name()rs   r+   s    r   r/   z$ScriptObjectQualifiedNameSource.name  s    )).."##<==r(   Nr   r7   r(   r   r   r     s    %(>r(   r   c                       e Zd Zd Zd Zd Zy)AttrProxySourcec                 (     || j                          y r    rm   r$   s     r   r'   zAttrProxySource.reconstruct  r   r(   c                 6    | j                   j                         S r    rp   r+   s    r   r   zAttrProxySource.guard_source  rq   r(   c                 <    | j                   j                          dS )Nz.get_base()rs   r+   s    r   r/   zAttrProxySource.name  s    )).."#;//r(   Nrt   r7   r(   r   r   r     s    (0r(   r   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 Zd Zd	 Zd
 Zy)DefaultsSourceidx_keyFis_kw)initr.   comparefield_namec           
      @   | j                   sJ d       | j                  rt        | j                  t              sJ t
        j                  | dd       t
        j                  | d| j                   j                          d| j                   d| j                   d       y t        | j                  t              sJ t
        j                  | dd       t
        j                  | d| j                   j                          d| j                   d	| j                   d
       y )Nz]Base must be a valid source in order to properly track and guard this Defaults to its origin.r  __kwdefaults__r  r~   z['z']__defaults__[r-   )
rn   r  r   r  r3   r   r   r/   r  rM   r+   s    r   r   zDefaultsSource.__post_init__  s    yy 	
k	
y ::dllC000tW.>?g$)).."2!31TZZL4<<.PRS dllC000tWn=g$)).."2!31TZZL$,,qQr(   c                     || j                          |j                  |j                  | j                               |j	                  |j                  | j                               |j	                  t        d             y rE   )rn   rf   r   r  r"   rJ   r  r   r$   s     r   r'   zDefaultsSource.reconstruct  s\    		g77

CDg77EF0ABr(   c                 6    | j                   j                         S r    rp   r+   s    r   r   zDefaultsSource.guard_source  rq   r(   c                     | j                   S r    )r  r+   s    r   r/   zDefaultsSource.name  s    zzr(   N)r0   r1   r2   r   rM   r3   r4   r  r5   dataclassesr  r  r   r'   r   r/   r7   r(   r   r   r     se    38_E4"""E5IE3I"""E5IE3I"C(r(   r   c                   P     e Zd ZU eed<   dZeed<    fdZd Zd Z	d Z
d Z xZS )	GetItemSourceindexFindex_is_slicec                     | j                   J t        | j                  t              r9t        |   d| j                  j                                t        |   dd       y y )Nr  r  T)rn   r   r  slicesuperr   
__reduce__)r%   	__class__s    r   r   zGetItemSource.__post_init__  sR    yy$$$djj%(G)>)>)@AG 0$7 )r(   c                 &    || j                          | j                  r/|j                  |j                  | j	                                      n*|j                  |j                  | j
                               |j                  t        d             y rE   )rn   r  r"   rJ   unpack_slicer  r   r$   s     r   r'   zGetItemSource.reconstruct  sj    		!!'";";D<M<M<O"PQ!!'";";DJJ"GH0ABr(   c                 6    | j                   j                         S r    rp   r+   s    r   r   zGetItemSource.guard_source   rq   r(   c                 F    | j                   sJ | j                  \  }} || S r    )r  r  )r%   slice_class
slice_argss      r   r  zGetItemSource.unpack_slice#  s*    """""&**ZJ''r(   c                    t        | j                  t              rJ | j                  r.| j                  j                          d| j                         dS | j                  j                          d| j                  dS )Nr
  r-   )r   r  r   r  rn   r/   r  r+   s    r   r/   zGetItemSource.name(  sm     djj&111iinn&'q):):)<(?qAAiinn&'qa88r(   )r0   r1   r2   r   r4   r  r5   r   r'   r   r  r/   __classcell__)r  s   @r   r  r    s,    J ND 8C((
9r(   r  c                   0    e Zd ZU eed<   d Zd Zd Zd Zy)ConstDictKeySourcer  c                 6    | j                   j                         S r    rp   r+   s    r   r   zConstDictKeySource.guard_source7  rq   r(   c                     j                  fd        | j                         j                  j                  | j                               j                  t        dd             y )Nc                  D     j                  t        j                  d      S )Ndict_keys_getitemr   r
   r0   r&   s   r   rc   z0ConstDictKeySource.reconstruct.<locals>.<lambda><  s    G,,U^^=PQ r(   r   Fre   rn   r"   rJ   r  rf   r   r$   s    `r   r'   zConstDictKeySource.reconstruct:  sU    Q	
 			g77

CD21e<=r(   c                 X    d| j                   j                          d| j                  dS )Nzlist(dict.keys(z))[r-   rn   r/   r  r+   s    r   r/   zConstDictKeySource.nameB  s'     !1 2#djj^1EEr(   c                      yr   r7   r+   s    r   is_dict_keyzConstDictKeySource.is_dict_keyF  r   r(   N)	r0   r1   r2   r   r4   r   r'   r/   r,  r7   r(   r   r!  r!  3  s    J(>Fr(   r!  c                   0    e Zd ZU eed<   d Zd Zd Zd Zy)DictGetItemSourcer  c                     ddl m} t        | j                  t              s|j                  | j                        sJ y y )Nr	   )ConstantVariable)	variablesr0  r   r  r!  
is_literal)r%   r0  s     r   r   zDictGetItemSource.__post_init__R  s;    /JJ*
((4	5 54
r(   c                 6    | j                   j                         S r    rp   r+   s    r   r   zDictGetItemSource.guard_sourceY  rq   r(   c                 6   j                  fd        | j                         t        | j                  t              r | j                         n*j                  j                  | j                               j                  t        dd             y )Nc                  D     j                  t        j                  d      S )Ndict_getitemr&  r'  s   r   rc   z/DictGetItemSource.reconstruct.<locals>.<lambda>a      G,,U^^^L r(   r   F)	re   rn   r   r  r   r"   rJ   rf   r   r$   s    `r   r'   zDictGetItemSource.reconstruct\  ss     	L	

 			 djj&)DJJ!!'";";DJJ"GH21e<=r(   c                     t        | j                  t              r9d| j                  j	                          d| j                  j	                          dS | j                  j	                          d| j                  dS )Nzdict.__getitem__(r   r   r
  r-   )r   r  r!  rn   r/   r+   s    r   r/   zDictGetItemSource.nameo  sa    djj"45&tyy~~'7&84::??;L:MQOOiinn&'qa88r(   N)	r0   r1   r2   r   r4   r   r   r'   r/   r7   r(   r   r.  r.  K  s    
 J5(>&9r(   r.  c                       e Zd ZdZd Zd Zy)ListGetItemSourcezY
    Same as GetItemSource with reconstruct and name overridden to be list specific.
    c                 
   j                  fd        | j                         | j                  rt        d      j	                  j                  | j                               j                  t        dd             y )Nc                  D     j                  t        j                  d      S )Nlist_getitemr&  r'  s   r   rc   z/ListGetItemSource.reconstruct.<locals>.<lambda>  r7  r(   >List[slice] is a temporary object and should not have a sourcer   F)	re   rn   r  RuntimeErrorr"   rJ   r  rf   r   r$   s    `r   r'   zListGetItemSource.reconstruct|  st    
 	L	

 			 P  !!'";";DJJ"GH21e<=r(   c                     t        | j                  t              rJ | j                  rt	        d      d| j
                  j                          d| j                  dS )Nr>  zlist.__getitem__(r   r   )r   r  r   r  r?  rn   r/   r+   s    r   r/   zListGetItemSource.name  sX     djj&111P  'tyy~~'7&84::.JJr(   N)r0   r1   r2   r   r'   r/   r7   r(   r   r:  r:  v  s    >,
Kr(   r:  c                       e Zd Zd Zd Zy)TupleIteratorGetItemSourcec                     j                  fd        | j                         j                  j                  | j                               j                  t        dd             y )Nc                  D     j                  t        j                  d      S )Ntuple_iterator_getitemr&  r'  s   r   rc   z8TupleIteratorGetItemSource.reconstruct.<locals>.<lambda>  s    G,,U^^=UV r(   r   Fr(  r$   s    `r   r'   z&TupleIteratorGetItemSource.reconstruct  sU    V	
 			g77

CD21e<=r(   c                 X    d| j                   j                          d| j                  dS )Nz___tuple_iterator_getitem(r   r   r*  r+   s    r   r/   zTupleIteratorGetItemSource.name  s'    +DIINN,<+=R

~QOOr(   N)r0   r1   r2   r'   r/   r7   r(   r   rB  rB    s    >Pr(   rB  c                   $    e Zd Zd Zd Zd Zd Zy)
TypeSourcec                      | j                   J y r    rm   r+   s    r   r   zTypeSource.__post_init__  r   r(   c                     j                  fd        | j                         j                  t        dd             y )Nc                  (     j                  dd      S )Nbuiltinstyper   r'  s   r   rc   z(TypeSource.reconstruct.<locals>.<lambda>  s    g&>&>z6&R r(   r	   Fre   rn   rf   r   r$   s    `r   r'   zTypeSource.reconstruct  s4    RS		21e<=r(   c                 6    | j                   j                         S r    rp   r+   s    r   r   zTypeSource.guard_source  rq   r(   c                 >    d| j                   j                          dS )Nztype(r   rs   r+   s    r   r/   zTypeSource.name  s    tyy~~'(**r(   Nr   r7   r(   r   rH  rH    s    %>
(+r(   rH  c                       e Zd Zd Zd Zd Zy)OptimizerSourcec                 (     || j                          y r    rm   r$   s     r   r'   zOptimizerSource.reconstruct  r   r(   c                 6    | j                   j                         S r    rp   r+   s    r   r   zOptimizerSource.guard_source  rq   r(   c                 6    | j                   j                         S r    rs   r+   s    r   r/   zOptimizerSource.name      yy~~r(   Nrt   r7   r(   r   rS  rS    s    ( r(   rS  c                       e Zd Zd Zd Zd Zy)NNModuleSourcec                 (     || j                          y r    rm   r$   s     r   r'   zNNModuleSource.reconstruct  r   r(   c                 D    t         | j                  j                            S r    r   r+   s    r   r   zNNModuleSource.guard_source  r   r(   c                 6    | j                   j                         S r    rs   r+   s    r   r/   zNNModuleSource.name  rW  r(   Nrt   r7   r(   r   rY  rY    s    M r(   rY  c                       e Zd Zd Zy)UnspecializedNNModuleSourcec                 D    t         | j                  j                            S r    )%_GUARD_SOURCE_UNSPECIALIZED_NN_MODULErn   r   r+   s    r   r   z(UnspecializedNNModuleSource.guard_source  s    4TYY5K5K5MNNr(   Nr   r7   r(   r   r^  r^    s    Or(   r^  c                       e Zd Zd Zy)"UnspecializedBuiltinNNModuleSourcec                 D    t         | j                  j                            S r    )-_GUARD_SOURCE_UNSPECIALIZED_BUILTIN_NN_MODULErn   r   r+   s    r   r   z/UnspecializedBuiltinNNModuleSource.guard_source  s    <TYY=S=S=UVVr(   Nr   r7   r(   r   rb  rb    s    Wr(   rb  c                       e Zd Zd Zy)FSDPNNModuleSourcec                 D    t         | j                  j                            S r    )_GUARD_SOURCE_FSDP_MODULErn   r   r+   s    r   r   zFSDPNNModuleSource.guard_source  s    ()?)?)ABBr(   Nr   r7   r(   r   rf  rf    s    Cr(   rf  c                       e Zd Zd Zd Zy)GlobalStateSourcec                      yNr   r7   r+   s    r   r/   zGlobalStateSource.name      r(   c                 "    t         j                  S r    rX   r+   s    r   r   zGlobalStateSource.guard_source  rZ   r(   Nr0   r1   r2   r/   r   r7   r(   r   rj  rj    s    "r(   rj  c                   0    e Zd ZU eed<   d Zd Zd Zd Zy)TorchFunctionModeStackSourceindc                 *    d| j                          dS )Nz$___get_torch_function_mode_stack_at(r   )
_get_indexr+   s    r   r/   z!TorchFunctionModeStackSource.name  s    5doo6G5HJJr(   c                 D    ddl m} |j                  | j                        S )Nr	   )TorchFunctionModeStackVariable)variables.torch_functionrv  get_mode_indexrr  )r%   rv  s     r   rt  z'TorchFunctionModeStackSource._get_index  s    L-<<TXXFFr(   c                     j                  fd       j                  j                  | j                               g       j                  t	        dd             y )Nc                  D     j                  t        j                  d      S )N get_torch_function_mode_stack_atr&  r'  s   r   rc   z:TorchFunctionModeStackSource.reconstruct.<locals>.<lambda>  s    G,, B r(   r	   F)re   rf   rJ   rt  r   r$   s    `r   r'   z(TorchFunctionModeStackSource.reconstruct  sQ    	

 	w889JKLM21e<=r(   c                 "    t         j                  S r    rX   r+   s    r   r   z)TorchFunctionModeStackSource.guard_source  rZ   r(   N)	r0   r1   r2   rM   r4   r/   rt  r'   r   r7   r(   r   rq  rq    s    	HKG
>"r(   rq  c                   0    e Zd ZU eed<   d Zd Zd Zd Zy)r   source_namec                 \    |j                  |j                  | j                  d             y )NFrS   )r"   rV   r~  r$   s     r   r'   zConstantSource.reconstruct  s&    g889I9Iu8UVr(   c                 "    t         j                  S r    )r   r   r+   s    r   r   zConstantSource.guard_source  s    ###r(   c                     | j                   S r    )r~  r+   s    r   r/   zConstantSource.name  s    r(   c                     t         r    r   r   s     r   r   zConstantSource.make_guard  r   r(   N)	r0   r1   r2   r3   r4   r'   r   r/   r   r7   r(   r   r   r   
  s    W$ "r(   r   c                   $    e Zd ZdefdZd Zd Zy)NumpyTensorSourcereturnc                 >    d| j                   j                          dS )Nz___from_numpy(r   rs   r+   s    r   r/   zNumpyTensorSource.name  s    		 0133r(   c                 6    | j                   j                         S r    rp   r+   s    r   r   zNumpyTensorSource.guard_source   rq   r(   c                     j                  fd        | j                         j                  t        dd             y )Nc                  (     j                  dd      S )Ntorch	as_tensorrN  r'  s   r   rc   z/NumpyTensorSource.reconstruct.<locals>.<lambda>$  s    g&>&>w&T r(   r	   FrO  r$   s    `r   r'   zNumpyTensorSource.reconstruct#  s4    TU		21e<=r(   N)r0   r1   r2   r3   r/   r   r'   r7   r(   r   r  r    s    4c 4(>r(   r  c                       e Zd ZdefdZd Zy)SubclassAttrListSourcer  c                 <    | j                   j                          dS )Nz.__tensor_flatten__()[0]rs   r+   s    r   r/   zSubclassAttrListSource.name+  s    )).."##;<<r(   c                 6    | j                   j                         S r    rp   r+   s    r   r   z#SubclassAttrListSource.guard_source.  rq   r(   Nr0   r1   r2   r3   r/   r   r7   r(   r   r  r  )  s    =c =(r(   r  c                       e Zd ZdefdZd Zy)FloatTensorSourcer  c                 >    d| j                   j                          dS )Nz___as_tensor(r   rs   r+   s    r   r/   zFloatTensorSource.name6  s    tyy~~/022r(   c                 6    | j                   j                         S r    rp   r+   s    r   r   zFloatTensorSource.guard_source9  rq   r(   Nr  r7   r(   r   r  r  4  s    3c 3(r(   r  c                       e Zd ZdefdZd Zy)CallMethodItemSourcer  c                 <    | j                   j                          dS )Nz.item()rs   r+   s    r   r/   zCallMethodItemSource.name?  s    )).."#7++r(   c                 6    | j                   j                         S r    rp   r+   s    r   r   z!CallMethodItemSource.guard_sourceB  rq   r(   Nr  r7   r(   r   r  r  =  s    ,c ,(r(   r  c                       e Zd Zd Zd Zy)ShapeEnvSourcec                      yrl  r7   r+   s    r   r/   zShapeEnvSource.nameK  rm  r(   c                 "    t         j                  S r    )r   	SHAPE_ENVr+   s    r   r   zShapeEnvSource.guard_sourceN  r   r(   Nro  r7   r(   r   r  r  I  s    %r(   r  c                       e Zd Zd Zd Zy)BackwardStateSourcec                      yrl  r7   r+   s    r   r/   zBackwardStateSource.nameT  rm  r(   c                 "    t         j                  S r    )r   BACKWARD_STATEr+   s    r   r   z BackwardStateSource.guard_sourceW  s    )))r(   Nro  r7   r(   r   r  r  R  s    *r(   r  Fonly_allow_inputr   c                    t        | t              rt        | j                  |      S t        | t              sy|r| j
                  syy)Nr  FT)r   r   is_from_local_sourcern   r   r   )r   r  s     r   r  r  [  s:    &-(#FKKBRSSfk*r(   c                 p    t        | t              ryt        | t              rt        | j                        S yr   )r   r   r   )is_from_unspecialized_param_buffer_sourcern   r   s    r   r  r  e  s,    &89&-(8EEr(   c                 p    t        | t              ryt        | t              rt        | j                        S yr   )r   r   r   $is_from_flatten_script_object_sourcern   r   s    r   r  r  m  s,    &34	FM	*3FKK@@r(   c                 p    t        | t              ryt        | t              rt        | j                        S yr   )r   rS  r   is_from_optimizer_sourcern   r   s    r   r  r  u  s+    &/*&-('44r(   c                    t        | t              ryt        | t              r4t        | j                  t              r| j                  j
                  dk(  ryt        | t              r4t        | j                  t              r| j                  j
                  dk(  ryt        | t              rt        | j                        S y)NTr  r	  F)	r   r   r.  rn   rz   r{   r  r   is_from_defaultsr   s    r   r  r    s    &.) 	6,-v{{J/KK"22 	6=)v{{J/KK.0&-(,,r(   )Qr   r  enumtypingr   r   r   torch._guardsr   r   r   r   r
   bytecode_transformationr   r   r*   LOCAL_SPECIALIZED_NN_MODULErY   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`  rd  rh  r   	dataclassr   r9   r@   rO   r_   rj   rv   rz   r   r   r   r   r   r   Enumr   r   r   r   r   r   r   r   r   r  r!  r.  r:  rB  rH  rS  rY  r^  rb  rf  rj  rq  r   r  r  r  r  r  r  r  r  r  r  r  r7   r(   r   <module>r     s	  &   ' ' < <  M {>>@@++[-T-T,,k.V.V--{/X/X..0Z0Z55{7h7h668j8j!!;#@#@""K$B$B' #  {@@BB--{/X/X..0Z0Z++[-V-V,,k.X.X55{7h7h668j8j!!;#@#@""K$B$B) %" {HHJJ--{/`/`..0b0b++[-^-^,,k.`.`55{7h7h668j8j!!;#@#@""K$B$B1 - {4466++[-J-J,,k.L.L!!;#@#@""K$B$B--{/L/L..0N0N55{7T7T668V8V 	 d#-& - $-8 d#
76 
7 $
7 d#8 8 $8 d#
.6 
. $
. d#0& 0 $0$ d#	' 	' $	' d#	0 	 $	 d#3 3 $32 d#O O $O. d#Lf L $L, d#3 3 $3 d#M
 M $M d#	Z 	 $	 d#f  $ $TYY $ d#%;= %; $%;P d#3M 3 $3  d#/= / $/ d#G} G $G d#7 7 $7 d#>m > $>0m 0 d#!] ! $!H d##9M #9 $#9L d#  $. d#'9 '9 $'9T d#%K %K $%KP d#
P 
P $
P d#+ + $+  d# m   $  d# ]   $  d#O. O $O
 d#W)D W $W
 d#C C $C
 d#" " $" d#"6 " $"0 d#"V " $"  d#
> 
> $
> d#(] ( $( d#( ( $( d#(= ( $( d#%V % $% d#*& * $* >C  f  V V r(   