
    wi                    X   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z
d dlZd dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlm Z m!Z! d dl"m#Z#  ej$        e%          Z&erd dl'Z'd dl(Z(	  G d	 d
e          Z) G d de          Z* G d dej+                  Z,	  G d d          Z- ej.        d           G d d                      Z/ G d de          Z0ej.         G d d                      Z1 ed          Z2	 ej.         G d d                      Z3	 ej.         G d de3                      Z4	 ej.         G d de3                      Z5	  G d  d!ee2                   Z6 G d" d#          Z7 G d$ d%          Z8 G d& d'e6e8                   Z9 G d( d)          Z: G d* d+e6e:                   Z;	  G d, d-          Z< G d. d/e6e7                   Z= G d0 d1          Z> G d2 d3e>          Z? G d4 d5          Z@ ejA                    ZB	  G d6 d7          ZC G d8 d9          ZDedGd<            ZEedHd>            ZF ej.        d           G d? d@                      ZG ej.        d           G dA dBeG                      ZHdIdJdEZIdF ZJdS )K    )annotationsN)abstractmethod)contextmanager)AnyCallableDictGenericList
NamedTupleOptionalSetTupleTYPE_CHECKINGTypeVarUnion)_pytree)CapturedTracebackformat_frame)WeakTensorKeyDictionaryc                  *    e Zd ZU ded<   ded<   d ZdS )	CompileIdintframe_idframe_compile_idc                $    | j          d| j         S )N/)r   r   selfs    ]/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/torch/_guards.py__str__zCompileId.__str__@   s    -99$"7999    N__name__
__module____qualname____annotations__r     r!   r   r   r   7   s<         MMM
 : : : : :r!   r   c                  *    e Zd ZU ded<   ded<   d ZdS )TraceIdr   
compile_idr   attemptc                b    | j         dk    rt          | j                  S | j         d| j          S )Nr   _)r+   strr*   r   s    r   r    zTraceId.__str__J   s7    <1t'''o66666r!   Nr"   r'   r!   r   r)   r)   D   s<          LLL7 7 7 7 7r!   r)   c                  t    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZddZddZddZddZd ZdS )GuardSourcer                           	   
                  returnboolc                6    | t           j        t           j        fv S N)r0   GLOBAL_FSDP_MODULELOCAL_FSDP_MODULEr   s    r   is_fsdp_modulezGuardSource.is_fsdp_modulec   s    68UVVVr!   c                6    | t           j        t           j        fv S rC   )r0   GLOBAL_SPECIALIZED_NN_MODULELOCAL_SPECIALIZED_NN_MODULEr   s    r   is_specialized_nn_modulez$GuardSource.is_specialized_nn_modulef   s     43
 
 	
r!   c                b    | t           j        t           j        t           j        t           j        fv S rC   )r0   GLOBAL_UNSPECIALIZED_NN_MODULELOCAL_UNSPECIALIZED_NN_MODULE&GLOBAL_UNSPECIALIZED_BUILTIN_NN_MODULE%LOCAL_UNSPECIALIZED_BUILTIN_NN_MODULEr   s    r   is_unspecialized_nn_modulez&GuardSource.is_unspecialized_nn_modulel   s,    65>=	
 
 	
r!   c                6    | t           j        t           j        fv S rC   )r0   rN   rO   r   s    r   "is_unspecialized_builtin_nn_modulez.GuardSource.is_unspecialized_builtin_nn_modulet   s     >=
 
 	
r!   c                x    | t           j        t           j        t           j        t           j        t           j        fv S rC   )r0   LOCALrI   rE   rM   rO   r   s    r   is_localzGuardSource.is_localz   s2    3)5=
 
 	
r!   Nr@   rA   )r#   r$   r%   rT   GLOBALrI   rH   CONSTANTRANDOM_VALUE	SHAPE_ENVrE   rD   BACKWARD_STATE	EPHEMERALSYNTHETIC_LOCALrM   rL   rO   rN   rF   rJ   rP   rR   rU   r'   r!   r   r0   r0   Q   s        EF"##$ HLINIO$&!%'",.)-/*W W W W
 
 
 

 
 
 

 
 
 

 
 
 
 
r!   r0   c                      e Zd ZdS )GuardBuilderBaseNr#   r$   r%   r'   r!   r   r_   r_      s        Dr!   r_   T)frozenc                  *    e Zd ZU ded<   ded<   d ZdS )SLocz,Optional[Union[traceback.FrameSummary, str]]framework_locOptional[str]maybe_user_locc                    t          | j        t                    r| j        nt          | j                  }| j        | j         d| dS d| dS )Nz ()()
isinstancerd   r.   r   rf   )r   flocs     r   r    zSLoc.__str__   sg     $,c222Dd011 	
 *)44T4444t;;;r!   Nr"   r'   r!   r   rc   rc      s=         ????!!!!	 	 	 	 	r!   rc   c                  $    e Zd ZU ded<   ded<   dS )
ShapeGuardzsympy.logic.boolalg.Booleanexprrc   slocNr#   r$   r%   r&   r'   r!   r   rm   rm      s%         %%%%JJJJJr!   rm   c                     e Zd ZU ded<   ded<   dZded<   dZded<   dZd	ed
<   dZded<   dZded<   dZ	ded<   dZ
ded<   d Zd Zd Zd Zed&d            Zed'd            Zed             Zd Zd Zd(d!Zd" Zd# Zd$ Zd% ZdS ))GuardSourceoriginating_sourcez)Callable[[GuardBuilderBase, Guard], None]	create_fnNzOptional[List[str]]guard_types	code_listzOptional[object]obj_weakrefzOptional[type]guarded_class_weakrefzOptional[CapturedTraceback]stackz Optional[traceback.StackSummary]
user_stackzOptional[int]_hashc                    | j         3t          | j        | j        t	          | j                  f          | _         | j         S rC   )r|   hashnamesourceidru   r   s    r   __hash__zGuard.__hash__   s6    :ty$+r$.7I7IJKKDJzr!   c                   ddl m} t          | j        t          j                  o| j        j        |j        u }|| j        r| j        j	        ndt          | j                  | j        |                                 j        j        fS )Nr   )GuardBuilder)torch._dynamo.guardsr   rj   ru   	functoolspartialfuncDUPLICATE_INPUTr   valuelenr   inner_create_fn__code__co_firstlineno)r   r   is_duplicate_inputs      r   sort_keyzGuard.sort_key   s     	655555 t~y'899 D#|'CC 	
 !%4DK"	NNI  ""+:
 	
r!   c                V    |                                  |                                 k     S rC   )r   r   others     r   __lt__zGuard.__lt__   s    }}!1!111r!   c                f    t          | j        t          j                  r| j        j        S | j        S rC   )rj   ru   r   r   r   r   s    r   r   zGuard.inner_create_fn   s,    dni&788 	">&&>!r!   r@   r.   c                4    | j                                         S rC   )rt   r   r   s    r   r   z
Guard.name   s    &++---r!   r0   c                4    | j                                         S rC   )rt   guard_sourcer   s    r   r   zGuard.source   s    &33555r!   c           
     @   t          | t          j                  rv |             }|Jdt          t	          |                      d|j        j         dt          t	          |                     dS dt          t	          |                      dS t          |           S )a  
        This is a workaround of a Python weakref bug.

        `obj_weakref` is instance returned by `weakref.ref`,
        `str(obj_weakref)` is buggy if the original obj overrides __getattr__, e.g:

            class MyConfig(dict):
                def __getattr__(self, x):
                    return self[x]

            obj = MyConfig(offset=5)
            obj_weakref = weakref.ref(obj)
            str(obj_weakref)  # raise error: KeyError: '__name__'
        Nz<weakref at z; to 'z' at >z; dead>)rj   weakrefReferenceTypehexr   	__class__r#   r.   )rx   objs     r   weakref_to_strzGuard.weakref_to_str   s      k7#899 	$+--Cnc"[//&:&:nn#-BXnn_bceficjcj_k_knnnnCc"[//&:&:CCCC{###r!   c                    d| j         r| j         j                                        nd dt          | j                   d|                                 j         d| j         d| j         d|                     | j	                   d| j
         d}|S )	Nz	
          z&
        {
            'guard_types': z,
            'code': z,
            'obj_weakref': z
            'guarded_class': z
        }
        )r   r   lowerreprr   r#   rv   rw   r   rx   ry   )r   ss     r   __repr__zGuard.__repr__  s    %)[	8				!	!	!b ;?	?? MQMaMaMcMcMl  !,  ^	 
 !//0@AA  #8   r!   c                l   dt          | j                   d}| j        r| j        j                                        nd}|d| dz  }|d|                                 j         dz  }|d| j         dz  }|d| j         dz  }|d|                     | j	                   dz  }|d	| j
         dz  }|S )
NzName: 
r   z    Source: z    Create Function: z    Guard Types: z    Code List: z    Object Weakref: z    Guarded Class Weakref: )r   r   r   r   r   r#   rv   rw   r   rx   ry   )r   outputr   s      r   r    zGuard.__str__  s    -$ty//----1[@!'')))b+++++M$*>*>*@*@*IMMMM:d&6::::6DN6666R)<)<T=M)N)NRRRRN0JNNNNr!   builderr_   c           	        	 |                      ||           S # t          $ r t                              dt	          |                                                      | j        r_t                              dd                    | j        	                                dd                                                                w xY w)NzError while creating guard:
%szCreated at:
%sr   )
ru   	Exceptionlog	exceptionr.   rstriprz   errorjoinformat)r   r   s     r   createzGuard.create#  s    	>>'4000 	 	 	MM;SYY=M=M=O=OPPPz Y		+RWWTZ5F5F5H5H5M-N-N-U-U-W-WXXX		s
    B,Cc                4    | j                                         S rC   )r   rJ   r   s    r   rJ   zGuard.is_specialized_nn_module,  s    {33555r!   c                4    | j                                         S rC   )r   rF   r   s    r   rF   zGuard.is_fsdp_module/  s    {))+++r!   c                4    | j                                         S rC   )r   rU   r   s    r   rU   zGuard.is_local2  s    {##%%%r!   c                h   | j         sg | _         | j                             |           | j        |d fv s
J d            || _        | j        s|| _        n| j                            |           | j        |d fv s2t          | j                  r|                                 
J d            || _        d S )Nz+Guarded class id must be identical, or NonezBGuarded object must be identical, None or ephemeral (dead weakref))rv   appendry   rw   extendrx   callable)r   
guard_typeguarded_classrw   rx   s        r   set_export_infozGuard.set_export_info5  s     	"!D
+++).
 
 
 
 9
 
 
 &3"~ 	-&DNNN!!),,, d 333()) 4  ""**O +*+ 'r!   r@   r.   r@   r0   )r   r_   )r#   r$   r%   r&   rv   rw   rx   ry   rz   r{   r|   r   r   r   r   propertyr   r   staticmethodr   r   r    r   rJ   rF   rU   r   r'   r!   r   rr   rr      s        & 8888 (,K++++%)I))))$(K((((,00000)-E----37J7777E  

 
 
"2 2 2" " " . . . X. 6 6 6 X6 $ $ \$0
 
 
	 	 	   6 6 6, , ,& & &' ' ' ' 'r!   rr   Tc                      e Zd ZdS )GuardEnvExprNr`   r'   r!   r   r   r   \  s        Dr!   r   c                  *    e Zd ZU ded<   ded<   d ZdS )DuplicateInputsrs   input_source_ainput_source_bc                *    | j         | j        k    sJ d S rC   )r   r   r   s    r   __post_init__zDuplicateInputs.__post_init__l  s    "d&9999999r!   N)r#   r$   r%   r&   r   r'   r!   r   r   r   g  s=         : : : : :r!   r   c                  $    e Zd ZU ded<   ded<   dS )StorageOverlapzList[Source]overlapping_sourcesnon_overlapping_sourcesNrp   r'   r!   r   r   r   ~  s*         %%%%))))))r!   r   c                  >    e Zd Zedd            Zedd            ZdS )	Checkpointabler@   r   c                    d S rC   r'   r   s    r   copy_graphstatezCheckpointable.copy_graphstate  s    $'Cr!   statec                    d S rC   r'   r   r   s     r   restore_graphstatez!Checkpointable.restore_graphstate  s    ,/Cr!   N)r@   r   )r   r   )r#   r$   r%   r   r   r   r'   r!   r   r   r     s<        ''' ^'/// ^///r!   r   c                  D    e Zd ZU dZ e            Zded<   d Zd Zd Z	dS )GuardsCheckpointStatezW
    The GuardCheckpointState - it is the T of Checkpointable[T] for GuardsContext
    
Set[Guard]dynamo_guardsc                    || _         d S rC   )r   )r   r   s     r   __init__zGuardsCheckpointState.__init__  s    *r!   c                n    | j                             |j                   }t          |          dk    rdS |S )z
        Produces a delta against another GuardsCheckpointState.

        Returns None if no delta is found, otherwise, return a set() of mismatched
        Guard type objects.
        r   N)r   
differencer   r   r   rs      r   diffzGuardsCheckpointState.diff  s6     ))%*=>>q66Q;;4r!   c                0    |                      |          d u S rC   r   r   s     r   __eq__zGuardsCheckpointState.__eq__      yy4''r!   N)
r#   r$   r%   __doc__setr   r&   r   r   r   r'   r!   r   r   r     sf           !$M%%%%+ + +
 
 
( ( ( ( (r!   r   c                  0    e Zd ZU i Zded<   d Zd Zd ZdS )ModuleContextCheckpointStatezDict[str, torch.nn.Module]
nn_modulesc                    || _         d S rC   r   )r   r   s     r   r   z%ModuleContextCheckpointState.__init__  s    $r!   c                    t          | j                                                                      t          |j                                                            }t	          |          dk    rdS |S )z
        Produces a delta against another ModuleContextCheckpointState.

        Returns None if no delta is found, otherwise, return a set() of mismatched
        module key names.
        r   N)r   r   keysr   r   r   s      r   r   z!ModuleContextCheckpointState.diff  s]     $$&&''223u7G7L7L7N7N3O3OPPq66Q;;4r!   c                0    |                      |          d u S rC   r   r   s     r   r   z#ModuleContextCheckpointState.__eq__  r   r!   N)r#   r$   r%   r   r&   r   r   r   r'   r!   r   r   r     sT         -/J////% % %
 
 
( ( ( ( (r!   r   c                  "    e Zd ZddZd Zd ZdS )ModuleContextr@   Nonec                    i | _         d S rC   r   r   s    r   r   zModuleContext.__init__  s    *,r!   c                D    t          t          | j                            S rC   )r   dictr   r   s    r   r   zModuleContext.copy_graphstate  s    +D,A,ABBBr!   c                L    t          |t                    sJ |j        | _        d S rC   )rj   r   r   r   s     r   r   z ModuleContext.restore_graphstate  s'    %!=>>>>>*r!   Nr@   r   r#   r$   r%   r   r   r   r'   r!   r   r   r     sI        - - - -C C C+ + + + +r!   r   c                  0    e Zd ZU i Zded<   d Zd Zd ZdS )GlobalContextCheckpointStatezDict[str, Tuple[Callable, ...]]global_statec                    || _         d S rC   r   )r   global_statess     r   r   z%GlobalContextCheckpointState.__init__  s    )r!   c                    t          | j                                                                      t          |j                                                            }t	          |          dk    rdS |S )z
        Produces a delta against another GlobalContextCheckpointState.

        Returns None if no delta is found, otherwise, return a set() of mismatched
        global key names.
        r   N)r   r   r   r   r   r   s      r   r   z!GlobalContextCheckpointState.diff  s^     !&&(())44S9K9P9P9R9R5S5STTq66Q;;4r!   c                0    |                      |          d u S rC   r   r   s     r   r   z#GlobalContextCheckpointState.__eq__  r   r!   N)r#   r$   r%   r   r&   r   r   r   r'   r!   r   r   r     sT         46L6666* * *
 
 
( ( ( ( (r!   r   c                  .    e Zd ZdZh dZd	dZd Zd ZdS )
GlobalContextzz
    This keeps track of the global torch state during tracing of a function.
    For example, torch.is_grad_enabled.
    >   grad_enabledautocast_enabledautocast_cpu_dtypeautocast_gpu_dtypeautocast_cpu_enabledautocast_cache_enabledtorch_function_enabledr@   r   c                    i | _         d S rC   r   r   s    r   r   zGlobalContext.__init__  s    =?r!   c                D    t          t          | j                            S rC   )r   r   r   r   s    r   r   zGlobalContext.copy_graphstate  s    +D1B,C,CDDDr!   c                f   t          |t                    sJ |j        | _        t          | j                  t          | j                  k    r/t          | j                                                  | j        k    s
J d            | j                                        D ]\  }} ||           d S )NzGlobal state mismatch)rj   r   r   r   _supported_global_statesr   r   values)r   r   r   argss       r   r   z GlobalContext.restore_graphstate  s    %!=>>>>>!.!""c$*G&H&HHHD%**,,--1NNNN" ONO +2244 	 	JD$DJJJJ	 	r!   Nr   )r#   r$   r%   r   r  r   r   r   r'   r!   r   r  r    si         
     @ @ @ @E E E    r!   r  c                  L    e Zd ZddZd Zd Zd Zd Zddd	ddZddZ	d Z
dS )	GuardsSetNc                4    |t                      }|| _        d S rC   )r   inner)r   r  s     r   r   zGuardsSet.__init__  s    =EEE


r!   c                *    t          | j                  S rC   )iterr  r   s    r   __iter__zGuardsSet.__iter__      DJr!   c                *    t          | j                  S rC   )r   r  r   s    r   __len__zGuardsSet.__len__  s    4:r!   c                :    t          | j        |j        z
            S rC   )r  r  r   s     r   __sub__zGuardsSet.__sub__$  s    ek1222r!   c                *    t          | j                  S rC   )rA   r  r   s    r   __bool__zGuardsSet.__bool__'  r  r!   Tr   )collect_debug_stackskipguardrr   c                   || j         v rd S |rI|j        t          j        d|z             |_        |j        t
                                          |_        | j                             |           d S Nr1   )r"  )r  rz   r   extractr{   TracingContextextract_stackadd)r   r#  r!  r"  s       r   r)  zGuardsSet.add*  su    DJF 	B{"/7QXFFF'#1#?#?#A#A 
ur!   othersr   c                H    |D ]}|D ]}|                      |d           d S r%  )r)  )r   r*  ogs       r   updatezGuardsSet.update4  sH     	$ 	$A $ $####$	$ 	$r!   c                8    fd| j         D             | _         dS )z%Delete all guards with a given sourcec                *    h | ]}|j         k    |S r'   )rt   ).0r-  r   s     r   	<setcomp>z6GuardsSet.remove_guards_with_source.<locals>.<setcomp>;  s&    NNNAq/Cv/M/Ma/M/M/Mr!   N)r  )r   r   s    `r   remove_guards_with_sourcez#GuardsSet.remove_guards_with_source9  s$    NNNNNNN


r!   rC   )r#  rr   )r*  r   )r#   r$   r%   r   r  r  r  r   r)  r.  r3  r'   r!   r   r  r    s           
       
3 3 3      8<!      $ $ $ $
O O O O Or!   r  c                  "    e Zd ZddZd Zd ZdS )GuardsContextr@   r   c                :    t                      | _        g | _        d S rC   )r  r   aotautograd_guardsr   s    r   r   zGuardsContext.__init__?  s    (168r!   c                N    t          t          | j        j                            S rC   )r   r   r   r  r   s    r   r   zGuardsContext.copy_graphstateC  s    $S);)A%B%BCCCr!   c                f    t          |t                    sJ t          |j                  | _        d S rC   )rj   r   r  r   r   s     r   r   z GuardsContext.restore_graphstateF  s2    %!677777&u':;;r!   Nr   r   r'   r!   r   r5  r5  >  sI        9 9 9 9D D D< < < < <r!   r5  c                      e Zd Zedd            Zedd            Zedd
            Zedd            Zedd            Zedd            Z	dS )HopSubgraphCache	cache_keyr.   
identifierc                    d S rC   r'   r   r<  r=  s      r   add_dynamo_identifierz&HopSubgraphCache.add_dynamo_identifierM      FIcr!   r@   re   c                    d S rC   r'   r   r<  s     r   get_dynamo_identifierz&HopSubgraphCache.get_dynamo_identifierP  rA  r!   keyr   c                    d S rC   r'   r   r=  rE  s      r   add_autograd_key_entryz'HopSubgraphCache.add_autograd_key_entryS  rA  r!   c                    d S rC   r'   r   r=  s     r   get_autograd_key_entryz'HopSubgraphCache.get_autograd_key_entryV  s    7:sr!   c                    d S rC   r'   rG  s      r   add_proxy_dispatch_entryz)HopSubgraphCache.add_proxy_dispatch_entryY  s    HKr!   c                    d S rC   r'   rJ  s     r   get_proxy_dispatch_entryz)HopSubgraphCache.get_proxy_dispatch_entry\  s    9<r!   Nr<  r.   r=  r.   r<  r.   r@   re   r=  r.   rE  r   r=  r.   )
r#   r$   r%   r   r@  rD  rH  rK  rM  rO  r'   r!   r   r;  r;  L  s        III ^IIII ^IIII ^I::: ^:KKK ^K<<< ^<<<r!   r;  c                  F    e Zd ZddZddZdd	ZddZddZddZddZ	dS )InvokeSubgraphCacher@   r   c                0    i | _         i | _        i | _        d S rC   )autograd_cacheproxy_dispatch_cachedynamo_identifiersr   s    r   r   zInvokeSubgraphCache.__init__a  s     359;!24r!   r<  r.   r=  c                    || j         |<   d S rC   )rY  r?  s      r   r@  z)InvokeSubgraphCache.add_dynamo_identifierf  s    -7	***r!   re   c                8    | j                             |d           S rC   )rY  getrC  s     r   rD  z)InvokeSubgraphCache.get_dynamo_identifieri  s    &**9d;;;r!   rE  r   c                    || j         |<   d S rC   )rW  rG  s      r   rH  z*InvokeSubgraphCache.add_autograd_key_entryl  s    *-J'''r!   c                8    | j                             |d           S rC   )rW  r\  rJ  s     r   rK  z*InvokeSubgraphCache.get_autograd_key_entryo  s    "&&z4888r!   c                    || j         |<   d S rC   )rX  rG  s      r   rM  z,InvokeSubgraphCache.add_proxy_dispatch_entryr  s    03!*---r!   c                8    | j                             |d           S rC   )rX  r\  rJ  s     r   rO  z,InvokeSubgraphCache.get_proxy_dispatch_entryu  s    (,,Z>>>r!   Nr   rP  rQ  rR  rS  )
r#   r$   r%   r   r@  rD  rH  rK  rM  rO  r'   r!   r   rU  rU  `  s        5 5 5 5
8 8 8 8< < < <. . . .9 9 9 94 4 4 4? ? ? ? ? ?r!   rU  c                      e Zd Zd	dZd
dZdS )HopDispatchSetCacher@   r   c                <    ddl m} |t                      i| _        d S )Nr   )invoke_subgraph)'torch._higher_order_ops.invoke_subgraphrd  rU  hop_cache_map)r   rd  s     r   r   zHopDispatchSetCache.__init__z  s.    KKKKKK-/B/D/DEr!   optorch._ops.HigherOrderOperatorOptional[HopSubgraphCache]c                2    || j         vrd S | j         |         S rC   )rf  )r   rg  s     r   	get_cachezHopDispatchSetCache.get_cache  s%     T'''4!"%%r!   Nr   )rg  rh  r@   ri  )r#   r$   r%   r   rk  r'   r!   r   rb  rb  y  s@        F F F F& & & & & &r!   rb  c                  p    e Zd Zed	d            Zed
d            Zd Zed             Zed             ZdS )CompileContextr@   c                 6    t           j        J t           j        S rC   )_TLScompile_contextr'   r!   r   r\  zCompileContext.get  s    #///##r!   Optional[CompileContext]c                 .    t          t          dd           S Nrp  getattrro  r'   r!   r   try_getzCompileContext.try_get      t.555r!   c                b    |t          |t                    sJ || _        d| _        g | _        d S )Nr   )rj   r   r*   r+   shape_env_guards)r   r*   s     r   r   zCompileContext.__init__  s9    !Z
I%F%F!!F/9+-r!   c                 J    t                                           } | d S | j        S rC   )rm  rv  r*   r   s    r   current_compile_idz!CompileContext.current_compile_id  s%    %%''<4r!   c                     t                                           } | d S | j        d S t          | j        | j                  S rC   )rm  rv  r*   r)   r+   r   s    r   current_trace_idzCompileContext.current_trace_id  s>    %%''<4?"4t555r!   N)r@   rm  )r@   rq  )	r#   r$   r%   r   r\  rv  r   r{  r}  r'   r!   r   rm  rm    s        $ $ $ \$ 6 6 6 \6. . .   \ 6 6 \6 6 6r!   rm  c                  0   e Zd ZdZedd            Zedd            Zd Zd Zee	d                         Z
ed	             Zeej	        d
                         Zeej	        d                         Zeej	        d                         Zed             ZdS )r'  z
    Provides the currently installed TracingContext, or None.

    Note that it is a staticmethod, and invocations outside of `with tracing()` (see below), are valid but
    will return None.
    r@   Optional[TracingContext]c                 .    t          t          dd           S )Ntracing_contextrt  r'   r!   r   rv  zTracingContext.try_get  rw  r!   c                 Z    t                                           x} r| S t          d          )Nz<TracingContext.get() must be called within an ongoing trace.)r'  rv  RuntimeError)ctxs    r   r\  zTracingContext.get  s5     ((***3 	JJ
 
 	
r!   c                ^   t                      | _        t                      | _        t	                      | _        || _        g | _        d | _        d | _	        d | _
        d | _        d | _        d | _        d | _        d| _        t!                      | _        d| _        t'                      | _        d S NF)r5  guards_contextr   module_contextr  global_context	fake_modeframe_summary_stackloc_in_framefw_metadataaot_graph_nameparams_flatparams_flat_unwrap_subclassesparams_unwrapped_to_flat_indexoutput_strides#force_unspec_int_unbacked_size_liker   tensor_to_contextfakify_first_callrb  hop_dispatch_set_cache)r   r  s     r   r   zTracingContext.__init__  s    +oo+oo+oo"#%  !"-1*.2+ JN 490!8!:!:
 "'&9&;&;###r!   c                    i | j         _        d S rC   )r  r   r   s    r   clearzTracingContext.clear   s     ,.(((r!   c               +    K   i }t                                           }|                                 D ]}t          ||          ||<   |                                 D ]\  }}t          |||           	 d V  |                                D ]\  }}t          |||           d S # |                                D ]\  }}t          |||           w xY wrC   )r'  r\  r   ru  itemssetattr)kwargspriorr  rE  vals        r   patchzTracingContext.patch  s         "";;== 	+ 	+C c**E#JJ 	# 	#HCCc""""	'EEE!KKMM ' 'SS#&&&&' 'EKKMM ' 'SS#&&&&'s   4B% %-Cc                     t                                           } | t          j                    S | j        }| j        || j        gz   }t          j                            |          S rC   )r'  rv  	tracebackStackSummaryr  r  	from_list)r   rz   s     r   r(  zTracingContext.extract_stack  s_    %%''<)+++((T.//E%//666r!   c               #    K   t                                           } t          j        j                            | dg           5  t          j        j                            | dd           5  	 d V  n*# t          $ r}t          |d          sd |_         d }~ww xY w	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr  r  
real_stack)	r'  r\  unittestmockr  objectr   hasattrr  )tces     r   clear_framezTracingContext.clear_frame"  sd      !!] ''%r
 
 	 	=%%b.$??	 	   $ q,// (#'AL) 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sZ   'B?)B'+A0/B'0
B:BBB'B?'B+	+B?.B+	/B??CCc              #    K   t                                           }| |j                            |            |j        }d |_        	 d V  n<# t
          $ r/}t          |d          s|                                |_         d }~ww xY w	 | |j        	                                 ||_        d S # | |j        	                                 ||_        w xY w)Nr  )
r'  r\  r  r   r  r   r  r(  r  pop)frame_summaryr  oldr  s       r   current_framezTracingContext.current_frameA  s      
 !!$"))-888o		"EEEE 	 	 	1l++ 2!//11	  (&**,,,!BOOO (&**,,,!BO!!!!s*   A B- 
B*B  BB- -$Cc               #     K   t                                           } | d V  d S | j        }g | _        	 | j        V  || _        d S # || _        w xY wrC   )r'  rv  r  )r  old_output_stridess     r   report_output_stridesz$TracingContext.report_output_stridesV  st       ##%%:JJJF.	3#### 2B 2B2222s   	A 	Ac                n    t          j        | ||d          t                                          _        d S )NF)lookup_line)r  FrameSummaryr'  r\  r  )filenamelineno
frame_names      r   set_current_loczTracingContext.set_current_locd  s7    ,5,Bfje-
 -
 -
)))r!   N)r@   r  )r@   r'  )r#   r$   r%   r   r   rv  r\  r   r  r   r  r(  
contextlibr  r  r  r  r'   r!   r   r'  r'    sS         6 6 6 \6 
 
 
 \
+< +< +<Z. . .
 ' ' ^ \' 7 7 \7    \: " "  \"& 
3 
3  \
3 
 
 \
 
 
r!   r'  contextrq  c              #     K   t          t          dd           }| t          _        	 | V  |t          _        d S # |t          _        w xY wrs  )ru  ro  rp  )r  old_contexts     r   rp  rp  k  sP      $ 1488K"D+*{****s	   8 Ar  c              #    K   t          t          dd          }| t          _        	 | V  n># t          $ r1}t	          |d          s| |                                 |_         d}~ww xY w	 | 1| j        *| j        j        | j        j        	                                 |t          _        dS # | 1| j        *| j        j        | j        j        	                                 |t          _        w xY w)z
    This function installs the passed in tracing context as a dynamic scoped
    global variable.

    Calls to TracingContext.get() while not under a `with tracing()` context
    will return None.
    r  Nr  )
ru  ro  r  r   r  r(  r  r  	shape_envcleanup)r  r  r  s      r   tracingr  u  s      $ 1488K"D+   q,'' 	3G,?"0022AL 	 !-!+7'//111* !-!+7'//111*****s&   + B+ 
A&,A!!A&&B+ +AC,c                  F    e Zd Zd Zd Zd ZddZddZdd
ZddZ	d Z
dS )rs   c                    dS r  r'   r   s    r   is_dict_keyzSource.is_dict_key      ur!   c                    dS r  r'   r   s    r   is_ephemeralzSource.is_ephemeral  r  r!   c                    t           rC   NotImplementedError)r   codegens     r   reconstructzSource.reconstruct      !!r!   r@   r0   c                    t           rC   r  r   s    r   r   zSource.guard_source  r  r!   r.   c                    t           rC   r  r   s    r   r   zSource.name  r  r!   rr   c                p    |                                  t          j        u rt          t	          | |          S rC   )r   r0   rX   r  rr   )r   fns     r   
make_guardzSource.make_guard  s0    +"666%%T2r!   rA   c                N    |                                                                  S rC   )r   rJ   r   s    r   rJ   zSource.is_specialized_nn_module  s       "";;===r!   c                F    |                                  t          j        k    S )z+True if you can guard on attributes of this)r   r0   r]   r   s    r   subguards_allowedzSource.subguards_allowed  s      ""k&AAAr!   Nr   r   )r@   rr   rV   )r#   r$   r%   r  r  r  r   r   r  rJ   r  r'   r!   r   rs   rs     s            " " "" " " "" " " "   
> > > >B B B B Br!   rs   c                  &    e Zd ZU ded<   d Zd ZdS )ChainedSourcers   basec                4    | j                                         S rC   )r  r  r   s    r   r  zChainedSource.is_dict_key  s    y$$&&&r!   c                4    | j                                         S rC   )r  r  r   s    r   r  zChainedSource.is_ephemeral  s    y%%'''r!   N)r#   r$   r%   r&   r  r  r'   r!   r   r  r    s=         LLL' ' '( ( ( ( (r!   r  inputsr   c                   ddl m}m} g }t                                          x}r!|j        }||                    |ddf           ddlm} t          t           |                                D ]-\  }}t          ||          r|                    |d|f           .t          j        |           }	t          |	          D ]2\  }}
t          |
|          r|                    |
j        d|f           3|r[|d         \  }}}|dd         D ]B\  }}}||u s8J d	| d
| d| d| d
| d| d| d| d|j         d| d| d|j                     C|S dS )a  
    Attempts to "detect" what the current fake mode is.  If there is one ambiently
    available from TracingContext, we preferentially use that.  Otherwise, we
    heuristically detect the fake mode via the following sources, in order of
    priority:

        - Currently active fake mode on stack
        - Fake mode associated with passed in tensors (inputs does not
          have to be flattened)
    r   )
FakeTensorFakeTensorModeNztracing context _get_current_dispatch_mode_stackzactive fake modezfake tensor inputr1   zfake mode (z) from r   z doesn't match mode (z

fake mode from z allocated at:
z
fake mode from )torch._subclasses.fake_tensorr  r  r'  rv  r  r   torch.utils._python_dispatchr  	enumeratereversedrj   pytreetree_leavesrz   )r  r  r  
fake_modesr  r  r  imflat_inputs
flat_inputdesc1i1desc2i2s                  r   detect_fake_moder    sG    IHHHHHHHJ ((***w A%	 y*;Q?@@@MMMMMM(#C#C#E#EFFGG : :1a(( 	:q"4a8999$V,,K";// N N:j*-- 	Nz35H!LMMM 
)!}	5"&qrrN 	 	LAub>>>Hi H H H H H HQR H H[` H Hce H H"'H H*,H H>GoH H"'H H*,H H>?gH H ">>>
 tr!   c                     ddl m}  ddlm} t	          t           |                                D ]\  }}t          ||           r|c S dS )z~
    Inspects the dispatch mode stack for an active fake mode and returns it.
    Returns None if no fake mode is active.
    r   )r  r  N)r  r  r  r  r  r  rj   )r  r  r-   r  s       r   active_fake_moder    s|    
 =<<<<<MMMMMM(#C#C#E#EFFGG  1a(( 	HHH	 4r!   )r  rq  )r  r  rC   )r  r   )K
__future__r   r  dataclassesenumr   logging	threadingr  unittest.mockr  r   abcr   r   typingr   r   r   r	   r
   r   r   r   r   r   r   r   torch.utilsr   r  torch.utils._tracebackr   r   torch.utils.weakr   	getLoggerr#   r   sympytorchr   r)   Enumr0   r_   	dataclassrc   rm   rr   r   r   r   r   r   r   r   r   r   r  r  r5  r;  rU  rb  localro  rm  r'  rp  r  rs   r  r  r  r'   r!   r   <module>r     s+   " " " " " "                                  % % % % % %                            * ) ) ) ) ) B B B B B B B B 4 4 4 4 4 4 g!!  LLL
 LLL
: 
: 
: 
: 
:
 
: 
: 
:
7 
7 
7 
7 
7j 
7 
7 
70
 0
 0
 0
 0
$) 0
 0
 0
f	 	 	 	 	 	 	 	 d###       $#        
 b' b' b' b' b' b' b' b'J GCLL 	 	 	 	 	 	 	 	 : : : : :l : : : * * * * *\ * * *

0 0 0 0 0WQZ 0 0 0( ( ( ( ( ( ( (4( ( ( ( ( ( ( (,	+ 	+ 	+ 	+ 	+N#?@ 	+ 	+ 	+( ( ( ( ( ( ( (,    N#?@   B%O %O %O %O %O %O %O %OP< < < < <N#89 < < <= = = = = = = =(? ? ? ? ?* ? ? ?2& & & & & & & & y&6 6 6 6 6 6 6 6Di
 i
 i
 i
 i
 i
 i
 i
X + + + + + + + +8 d###B B B B B B B $#B< d###( ( ( ( (F ( ( $#() ) ) ) )X    r!   