
    sgy                       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 d dlmZ d dlmZ d dl m!Z! d d	l"m#Z#  ejH                  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jV                        Z,	  G d d      Z- G d de      Z.ej^                   G d d             Z0 ed      Z1	 ej^                   G d d             Z2	 ej^                   G d de2             Z3	  G d dee1         Z4 G d d      Z5 G d d       Z6 G d! d"e4e6         Z7 G d# d$      Z8 G d% d&e4e8         Z9	  G d' d(      Z: G d) d*e4e5         Z; ejx                         Z=	  G d+ d,      Z> G d- d.      Z?ed9d/       Z@ed:d0       ZA ej^                  d12       G d3 d4             ZB ej^                  d12       G d5 d6eB             ZCd;d<d7ZDd8 ZEy)=    )annotationsN)abstractmethod)contextmanager)AnyCallableDictGenericList
NamedTupleOptionalSetTupleTYPE_CHECKINGTypeVar)set_context_frame)_pytree)CapturedTraceback)WeakTensorKeyDictionaryc                  (    e Zd ZU ded<   ded<   d Zy)	CompileIdintframe_idframe_compile_idc                8    | j                    d| j                   S )N/)r   r   selfs    @/var/www/html/venv/lib/python3.12/site-packages/torch/_guards.py__str__zCompileId.__str__@   s    --$"7"7!899    N__name__
__module____qualname____annotations__r    r    r   r   r   7   s    M
 :r    r   c                  (    e Zd ZU ded<   ded<   d Zy)TraceIdr   
compile_idr   attemptc                    | 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''oo&a~66r    Nr!   r&   r    r   r(   r(   D   s     L7r    r(   c                  r    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y)GuardSourcer                           	   
                  c                F    | t         j                  t         j                  fv S N)r/   GLOBAL_FSDP_MODULELOCAL_FSDP_MODULEr   s    r   is_fsdp_modulezGuardSource.is_fsdp_modulec   s    668U8UVVVr    c                j    | t         j                  t         j                  fv xs | j                         S r@   )r/   GLOBAL_SPECIALIZED_NN_MODULELOCAL_SPECIALIZED_NN_MODULErC   r   s    r   is_specialized_nn_modulez$GuardSource.is_specialized_nn_modulef   s9    8877 % ""$	
r    c                    | t         j                  t         j                  t         j                  t         j                  fv S r@   )r/   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_moduleq   s8    6655>>==	
 
 	
r    c                F    | t         j                  t         j                  fv S r@   )r/   rK   rL   r   s    r   "is_unspecialized_builtin_nn_modulez.GuardSource.is_unspecialized_builtin_nn_moduley   s&    >>==
 
 	
r    c                    | t         j                  t         j                  t         j                  t         j                  t         j
                  fv S r@   )r/   LOCALrF   rB   rJ   rL   r   s    r   is_localzGuardSource.is_local   sA    33))55==
 
 	
r    Nreturnbool)r"   r#   r$   rQ   GLOBALrF   rE   CONSTANTRANDOM_VALUE	SHAPE_ENVrB   rA   BACKWARD_STATE	EPHEMERALSYNTHETIC_LOCALrJ   rI   rL   rK   rC   rG   rM   rO   rR   r&   r    r   r/   r/   Q   st    EF"##$ HLINIO$&!%'",.)-/*W	



r    r/   c                      e Zd Zy)GuardBuilderBaseNr"   r#   r$   r&   r    r   r^   r^      s    r    r^   c                  "    e Zd ZU ded<   ded<   y)
ShapeGuardz
sympy.Exprexprr   stackN)r"   r#   r$   r%   r&   r    r   ra   ra      s    
r    ra   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y)$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]rc   z Optional[traceback.StackSummary]
user_stackzOptional[int]_hashc                    | j                   :t        | j                  | j                  t	        | j
                        f      | _         | j                   S r@   )rn   hashnamesourceidrh   r   s    r   __hash__zGuard.__hash__   s:    ::tyy$++r$..7IJKDJzzr    c                n   ddl m} t        | j                  t        j
                        xr" | j                  j                  |j                  u }|| j                  r| j                  j                  ndt        | j                        | j                  | j                         j                  j                  fS )Nr   )GuardBuilder)torch._dynamo.guardsrv   
isinstancerh   	functoolspartialfuncDUPLICATE_INPUTrr   valuelenrq   inner_create_fn__code__co_firstlineno)r   rv   is_duplicate_inputs      r   sort_keyzGuard.sort_key   s     	6 t~~y'8'89 D##|'C'CC 	
 !%DKK"		NII  "++::
 	
r    c                D    | j                         |j                         k  S r@   )r   r   others     r   __lt__zGuard.__lt__   s    }}!111r    c                    t        | j                  t        j                        r| j                  j                  S | j                  S r@   )ry   rh   rz   r{   r|   r   s    r   r   zGuard.inner_create_fn   s0    dnni&7&78>>&&&>>!r    c                6    | j                   j                         S r@   )rg   rq   r   s    r   rq   z
Guard.name   s    &&++--r    c                6    | j                   j                         S r@   )rg   guard_sourcer   s    r   rr   zGuard.source   s    &&3355r    c           
        t        | t        j                        re |        }|Dd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__'
        z<weakref at z; to 'z' at >z; dead>)ry   weakrefReferenceTypehexrs   	__class__r"   r-   )rk   objs     r   weakref_to_strzGuard.weakref_to_str   s      k7#8#89-C%c"[/&:%;6#--BXBXAYY^_bceficj_k^llmnn%c"[/&:%;7CC{##r    c                Z   d| j                   r$| j                   j                  j                         nd dt        | j                         d| j	                         j
                   d| j                   d| j                   d| j                  | j                         d| j                   d}|S )	Nz	
          z&
        {
            'guard_types': z,
            'code': z,
            'obj_weakref': z
            'guarded_class': z
        }
        )rr   rq   lowerreprr   r"   ri   rj   r   rk   rl   )r   ss     r   __repr__zGuard.__repr__   s    	%)[[					!b94		?:K1TMaMaMcMlMlLm n ,,- .^^$ % //0@0@AB C"889 :	 r    c                   dt        | j                         d}| j                  r$| j                  j                  j                         nd}|d| dz  }|d| j	                         j
                   dz  }|d| j                   dz  }|d| j                   dz  }|d| j                  | 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   rq   rr   r   r   r"   ri   rj   r   rk   rl   )r   outputrr   s      r   r   zGuard.__str__  s    $tyy/*"--1[[!!'')bL++)$*>*>*@*I*I)J"MM%d&6&6%7r::ODNN#3266()<)<T=M=M)N(OrRR/0J0J/K2NNr    c           	     R   	 | j                  ||       S # t        $ r t        j                  dt	        |       j                                | j                  rNt        j                  ddj                  | j                  j                         dd        j                                 w xY w)NzError while creating guard:
%szCreated at:
%sr   )
rh   	Exceptionlog	exceptionr-   rstriprc   errorjoinformat)r   builders     r   createzGuard.create  s    	>>'400 	MM;SY=M=M=OPzz		+RWWTZZ5F5F5H5M-N-U-U-WX		s
    BB&c                6    | j                   j                         S r@   )rr   rG   r   s    r   rG   zGuard.is_specialized_nn_module   s    {{3355r    c                6    | j                   j                         S r@   )rr   rC   r   s    r   rC   zGuard.is_fsdp_module#  s    {{))++r    c                6    | j                   j                         S r@   )rr   rR   r   s    r   rR   zGuard.is_local&  s    {{##%%r    c                   | j                   sg | _         | j                   j                  |       | j                  |d fv sJ d       || _        | j                  s|| _        n| j                  j	                  |       | j
                  |d fv s,t        | j
                        r| j                         J d       || _        y )Nz+Guarded class id must be identical, or NonezBGuarded object must be identical, None or ephemeral (dead weakref))ri   appendrl   rj   extendrk   callable)r   
guard_typeguarded_classrj   rk   s        r   set_export_infozGuard.set_export_info)  s    !D
+)).
 
 	9 9	9 
 &3"~~&DNNN!!), d 33(()  "*	P P		P+ 'r    rT   r-   rT   r/   )r   r^   )r"   r#   r$   r%   ri   rj   rk   rl   rc   rm   rn   rt   r   r   r   propertyrq   rr   staticmethodr   r   r   r   rG   rC   rR   r   r&   r    r   re   re      s    & 88 (,K$+%)I")$(K!(,0>0)-E&-37J07E=

"2" . . 6 6 $ $0
	6,&'r    re   Tc                      e Zd Zy)GuardEnvExprNr_   r&   r    r   r   r   P  s    r    r   c                  (    e Zd ZU ded<   ded<   d Zy)DuplicateInputsrf   input_source_ainput_source_bc                :    | j                   | j                  k7  sJ y r@   )r   r   r   s    r   __post_init__zDuplicateInputs.__post_init__`  s    ""d&9&9999r    N)r"   r#   r$   r%   r   r&   r    r   r   r   [  s    :r    r   c                  0    e Zd Zedd       Zedd       Zy)Checkpointablec                     y r@   r&   r   s    r   copy_graphstatezCheckpointable.copy_graphstater  s    $'r    c                     y r@   r&   r   states     r   restore_graphstatez!Checkpointable.restore_graphstateu  s    ,/r    N)rT   r   )r   r   )r"   r#   r$   r   r   r   r&   r    r   r   r   q  s    ' '/ /r    r   c                  <    e Zd ZU dZ e       Zded<   d Zd Zd Z	y)GuardsCheckpointStatezW
    The GuardCheckpointState - it is the T of Checkpointable[T] for GuardsContext
    
Set[Guard]dynamo_guardsc                    || _         y r@   )r   )r   r   s     r   __init__zGuardsCheckpointState.__init__  s
    *r    c                n    | j                   j                  |j                         }t        |      dk(  ry|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  s3     ))%*=*=>q6Q;r    c                (    | j                  |      d u S r@   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   y  s$     !$M:%+
(r    r   c                  .    e Zd ZU i Zded<   d Zd Zd Zy)ModuleContextCheckpointStatezDict[str, torch.nn.Module]
nn_modulesc                    || _         y r@   r   )r   r   s     r   r   z%ModuleContextCheckpointState.__init__  s	    $r    c                    t        | j                  j                               j                  t        |j                  j                                     }t	        |      dk(  ry|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  sM     $$&'223u7G7G7L7L7N3OPq6Q;r    c                (    | j                  |      d u S r@   r   r   s     r   r   z#ModuleContextCheckpointState.__eq__  r   r    N)r"   r#   r$   r   r%   r   r   r   r&   r    r   r   r     s    -/J*/%
(r    r   c                       e Zd ZddZd Zd Zy)ModuleContextc                    i | _         y r@   r   r   s    r   r   zModuleContext.__init__  s	    *,r    c                >    t        t        | j                              S r@   )r   dictr   r   s    r   r   zModuleContext.copy_graphstate  s    +D,ABBr    c                J    t        |t              sJ |j                  | _        y r@   )ry   r   r   r   s     r   r   z ModuleContext.restore_graphstate  s     %!=>>>**r    NrT   Noner"   r#   r$   r   r   r   r&   r    r   r   r     s    -C+r    r   c                  .    e Zd ZU i Zded<   d Zd Zd Zy)GlobalContextCheckpointStatezDict[str, Tuple[Callable, ...]]global_statec                    || _         y r@   r   )r   global_statess     r   r   z%GlobalContextCheckpointState.__init__  s
    )r    c                    t        | j                  j                               j                  t        |j                  j                                     }t	        |      dk(  ry|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  sO     !!&&()44S9K9K9P9P9R5STq6Q;r    c                (    | j                  |      d u S r@   r   r   s     r   r   z#GlobalContextCheckpointState.__eq__  r   r    N)r"   r#   r$   r   r%   r   r   r   r&   r    r   r   r     s    46L16*
(r    r   c                  ,    e Zd ZdZh dZddZd Zd Zy)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_enabledc                    i | _         y r@   r   r   s    r   r   zGlobalContext.__init__  s
    =?r    c                >    t        t        | j                              S r@   )r   r   r   r   s    r   r   zGlobalContext.copy_graphstate  s    +D1B1B,CDDr    c                b   t        |t              sJ |j                  | _        t        | j                        t        | j                        k(  r0t        | j                  j                               | j                  k(  sJ d       | j                  j                         D ]  \  }} ||        y )NzGlobal state mismatch)ry   r   r   r   _supported_global_statesr   r   values)r   r   r|   argss       r   r   z GlobalContext.restore_graphstate  s    %!=>>>!..!!"c$*G*G&HHD%%**,-1N1NN	# #	#O ++224 	JD$J	r    Nr   )r"   r#   r$   r   r   r   r   r   r&   r    r   r   r     s     
 @Er    r   c                  J    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
y)	GuardsSetNc                *    |
t               }|| _        y r@   )r   inner)r   r  s     r   r   zGuardsSet.__init__  s    =EE
r    c                ,    t        | j                        S r@   )iterr  r   s    r   __iter__zGuardsSet.__iter__      DJJr    c                ,    t        | j                        S r@   )r   r  r   s    r   __len__zGuardsSet.__len__  s    4::r    c                F    t        | j                  |j                  z
        S r@   )r  r  r   s     r   __sub__zGuardsSet.__sub__  s    ekk122r    c                ,    t        | j                        S r@   )rU   r  r   s    r   __bool__zGuardsSet.__bool__  r	  r    Tr   )collect_debug_stackskipc                   || j                   v ry |rO|j                  t        j                  d|z         |_        |j                  t
        j                         |_        | j                   j                  |       y Nr0   )r  )r  rc   r   extractrm   TracingContextextract_stackadd)r   guardr  r  s       r   r  zGuardsSet.add
  sa    DJJ{{"/77QXF'#1#?#?#A 

ur    c                F    |D ]  }|D ]  }| j                  |d         y r  )r  )r   othersogs       r   updatezGuardsSet.update  s0     	$A $#$	$r    c                l    | j                   D ch c]  }|j                  |k7  s| c}| _         yc c}w )z%Delete all guards with a given sourceN)r  rg   )r   rr   r  s      r   remove_guards_with_sourcez#GuardsSet.remove_guards_with_source  s(    !%NAq/C/Cv/MaN
Ns   11r@   )r  re   )r  r   )r"   r#   r$   r   r  r  r  r  r  r  r  r&   r    r   r  r    s2    
 
3  8<! $
Or    r  c                       e Zd ZddZd Zd Zy)GuardsContextc                0    t               | _        g | _        y r@   )r  r   aotautograd_guardsr   s    r   r   zGuardsContext.__init__  s    (168r    c                R    t        t        | j                  j                              S r@   )r   r   r   r  r   s    r   r   zGuardsContext.copy_graphstate#  s    $S););)A)A%BCCr    c                \    t        |t              sJ t        |j                        | _        y r@   )ry   r   r  r   r   s     r   r   z GuardsContext.restore_graphstate&  s&    %!6777&u':':;r    Nr   r   r&   r    r   r!  r!    s    9D<r    r!  c                  V    e Zd Zedd       Zedd       Zd Zed        Zed        Zy)	CompileContextc                 F    t         j                  J t         j                  S r@   )_TLScompile_contextr&   r    r   getzCompileContext.getB  s     ##///###r    c                 $    t        t        dd       S Nr*  getattrr)  r&   r    r   try_getzCompileContext.try_getG      t.55r    c                H    |t        |t              sJ || _        d| _        y )Nr   )ry   r   r)   r*   )r   r)   s     r   r   zCompileContext.__init__K  s%    !Z
I%FFF/9r    c                 H    t         j                         } | y | j                  S r@   )r'  r0  r)   r   s    r   current_compile_idz!CompileContext.current_compile_idP  s"    %%'<r    c                     t         j                         } | y | j                  y t        | j                  | j                        S r@   )r'  r0  r)   r(   r*   r   s    r   current_trace_idzCompileContext.current_trace_idW  s:    %%'<??"t55r    N)rT   r'  )rT   Optional[CompileContext])	r"   r#   r$   r   r+  r0  r   r4  r6  r&   r    r   r'  r'  A  sU    $ $ 6 6
   6 6r    r'  c                     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y)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.
    c                 $    t        t        dd       S )Ntracing_contextr.  r&   r    r   r0  zTracingContext.try_geti  r1  r    c                 H    t         j                         x} r| S t        d      )Nz<TracingContext.get() must be called within an ongoing trace.)r  r0  RuntimeError)ctxs    r   r+  zTracingContext.getm  s+     ((**3*JJ
 	
r    c                    t               | _        t               | _        t	               | _        || _        g | _        d | _        d | _	        d | _
        d | _        d | _        d| _        t               | _        d| _        y NF)r!  guards_contextr   module_contextr   global_context	fake_modeframe_summary_stackloc_in_framefw_metadataaot_graph_nameparams_flatoutput_strides#force_unspec_int_unbacked_size_liker   tensor_to_contextfakify_first_call)r   rC  s     r   r   zTracingContext.__init__u  s|    +o+o+o"#%  !" JN 490!8!:
 "'r    c                &    i | j                   _        y r@   )rB  r   r   s    r   clearzTracingContext.clear  s     ,.(r    c               +  r  K   i }t         j                         }| j                         D ]  }t        ||      ||<    | j	                         D ]  \  }}t        |||        	 d  |j	                         D ]  \  }}t        |||        y # |j	                         D ]  \  }}t        |||        w xY wwr@   )r  r+  r   r/  itemssetattr)kwargspriorr=  keyvals        r   patchzTracingContext.patch  s        ";;= 	+C c*E#J	+  	#HCCc"	#	'!KKM 'SS#&'EKKM 'SS#&'s   A B7#B '&B7'B44B7c                     t         j                         } | t        j                         S | j                  }| j
                  || j
                  gz   }t        j                  j                  |      S r@   )r  r0  	tracebackStackSummaryrD  rE  	from_list)r   rc   s     r   r  zTracingContext.extract_stack  se    %%'<))++(((T..//E%%//66r    c               #    K   t         j                         } t        j                  j                  j                  | dg       5  t        j                  j                  j                  | dd       5  	 d  	 d d d        d d d        y # t        $ r}t        |d      sd |_         d }~ww xY w# 1 sw Y   7xY w# 1 sw Y   y xY ww)NrD  rE  
real_stack)	r  r+  unittestmockrV  objectr   hasattrr\  )tces     r   clear_framezTracingContext.clear_frame  s      !]]  ''%r
 	==%%b.$?			 	 	
  $ q,/#'AL)	 	 	 	sT   A C,B7.B+0B5B7=	C	B(B##B((B++B4	0B77C <Cc              #    K   t         j                         }| |j                  j                  |        |j                  }d |_        	 d  	 | |j                  j                          ||_        y # t
        $ r'}t        |d      s|j                         |_         d }~ww xY w# | |j                  j                          ||_        w xY ww)Nr\  )
r  r+  rD  r   rE  r   r`  r  r\  pop)frame_summaryra  oldrb  s       r   current_framezTracingContext.current_frame  s     
 !$""))-8oo		" (&&**,!BO  	1l+!//1	
 (&&**,!BOs6   ACA1 $C1	B!:"BB!!B$ $%C		Cc               #     K   t         j                         } | d  y | j                  }g | _        	 | j                   || _        y # || _        w xY wwr@   )r  r0  rI  )ra  old_output_stridess     r   report_output_stridesz$TracingContext.report_output_strides  sY      ##%:J..	3### 2B 2Bs   /AA  A	AAc                d    t        j                  | ||d      t        j                         _        y )NF)lookup_line)rX  FrameSummaryr  r+  rE  )filenamelineno
frame_names      r   set_current_loczTracingContext.set_current_loc  s'    ,5,B,Bfje-
)r    N)rT   Optional[TracingContext])rT   r  )r"   r#   r$   r   r   r0  r+  r   rN  r   rV  r  
contextlibrc  rh  rk  rr  r&   r    r   r  r  a  s     6 6 
 
('T.
 '  ' 7 7   : "  "& 
3  
3 
 
r    r  c              #    K   t        t        dd       }| t        _        	 |  | L| j                  @t	        | j                  j
                  | j                  j                  | j                  f       |t        _        y # | L| j                  @t	        | j                  j
                  | j                  j                  | j                  f       |t        _        w xY wwr-  )r/  r)  r*  r)   r   r   r   r*   )contextold_contexts     r   r*  r*  
  s     $ 148K"D+!!-!**33**;;  + !!-!**33**;;  +s   CA> AC>ACCc              #    K   t        t        dd      }| t        _        	 |  	 | F| j                  :| j                  j                  $| j                  j                  j                          |t        _        y# t        $ r)}t	        |d      s| | j                         |_         d}~ww xY w# | F| j                  :| j                  j                  $| j                  j                  j                          |t        _        w xY w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\  )
r/  r)  r:  r   r`  r  r\  rC  	shape_envcleanup)rv  rw  rb  s      r   tracingr{    s      $ 148K"D+ !!-!!++7''//1*  q,'G,?"002AL !!-!!++7''//1*s5   DA9 AD9	B+$B&&B++B. .ADDT)frozenc                  D    e Zd Zd Zd Zd Zd
dZddZddZddZ	d Z
y	)rf   c                     yr?  r&   r   s    r   is_dict_keyzSource.is_dict_key<      r    c                     yr?  r&   r   s    r   is_ephemeralzSource.is_ephemeral?  r  r    c                    t         r@   NotImplementedError)r   codegens     r   reconstructzSource.reconstructB      !!r    c                    t         r@   r  r   s    r   r   zSource.guard_sourceE  r  r    c                    t         r@   r  r   s    r   rq   zSource.nameH  r  r    c                f    | j                         t        j                  u rt        t	        | |      S r@   )r   r/   rW   r  re   )r   fns     r   
make_guardzSource.make_guardK  s+    +"6"66%%T2r    c                >    | j                         j                         S r@   )r   rG   r   s    r   rG   zSource.is_specialized_nn_moduleP  s      ";;==r    c                D    | j                         t        j                  k7  S )z+True if you can guard on attributes of this)r   r/   r\   r   s    r   subguards_allowedzSource.subguards_allowedS  s      "k&A&AAAr    Nr   r   )rT   re   rS   )r"   r#   r$   r  r  r  r   rq   r  rG   r  r&   r    r   rf   rf   :  s+    """
>Br    rf   c                  $    e Zd ZU ded<   d Zd Zy)ChainedSourcerf   basec                6    | j                   j                         S r@   )r  r  r   s    r   r  zChainedSource.is_dict_key]  s    yy$$&&r    c                6    | j                   j                         S r@   )r  r  r   s    r   r  zChainedSource.is_ephemerala  s    yy%%''r    N)r"   r#   r$   r%   r  r  r&   r    r   r  r  Y  s    
L'(r    r  c                z   ddl m}m} g }t        j	                         x}r"|j
                  }||j                  |ddf       ddlm} t        t         |                   D ]&  \  }}t        ||      s|j                  |d|f       ( t        j                  |       }	t        |	      D ]0  \  }}
t        |
|      s|j                  |
j
                  d|f       2 |r\|d   \  }}}|dd D ]I  \  }}}||u rJ d	| d
| d| d| d
| d| d| d| d|j                   d| d| d|j                           |S y)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 inputr0   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  r0  rC  r   torch.utils._python_dispatchr  	enumeratereversedry   pytreetree_leavesrc   )inputsr  r  
fake_modesrv  rC  r  imflat_inputs
flat_inputdesc1i1desc2i2s                  r   detect_fake_moder  e  s    IJ ((**w*%%	 y*;Q?@M(#C#EFG :1a(q"4a89: $$V,K";/ N:j*-z335H!LMN )!}	5"&qrN 	LAub> i[wat;PQRPSSZ[`Zaabcebf g""'"-=ioo=N O""'"-=aggYH>	 r    c                 ~    ddl m}  ddlm} t	        t         |                   D ]  \  }}t        ||       s|c S  y)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  ry   )r  r  r,   r  s       r   active_fake_moder    s?    
 =M(#C#EFG 1a(H r    )rv  r7  )rv  rs  r@   )r  r   )F
__future__r   rt  dataclassesenumrz   logging	threadingrX  unittest.mockr]  r   abcr   r   typingr   r   r   r	   r
   r   r   r   r   r   r   torch._C._dynamo.eval_framer   torch.utilsr   r  torch.utils._tracebackr   torch.utils.weakr   	getLoggerr"   r   sympytorchr   r(   Enumr/   r^   ra   	dataclassre   r   r   r   r   r   r   r   r   r   r  r!  localr)  r'  r  r*  r{  rf   r  r  r  r&   r    r   <module>r     sZ   "           %    : ) 4 4 g! 
 
:
 
:
7j 
75
$)) 5
p	 	 
 b' b' b'J CL 	 	 	 :l : :
0WQZ 0( (4( (,	+N#?@ 	+( (,N#?@ B%O %OP<N#89 < y&6 6@f
 f
R + +$ + +8 d#B B $B< d#(F ( $()Xr    