
    9i                       S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
rS SKrS SKJr  S SKJr  S SKJr  S SKJr  S SKJrJrJrJrJrJrJrJr  S SKrS SKJr  S S	K J!r!  S S
K"J#r#J$r$  S SK%J&r&  \RN                  " \(5      r)\(       a*  S SK*J+r+J,r,  S SK-J.r.  S SK/r/S SK0J1r1  S SK2J3r3  S SK4J5r5  S SK6J7r7   \Rp                  " S5      r9\Rp                  " S5      r:\" SS9 " S S5      5       r; " S S\5      r< " S S\Rz                  5      r>  " S S5      r?\R$                  " SS9 " S S5      5       r@ " S  S!\5      rA\!\R$                   " S" S#5      5       5       rB\" S$5      rC \R$                  " SS9 " S% S&5      5       rD \R$                  " SS9 " S' S(\D5      5       rE \R$                  " SS9 " S) S*\D5      5       rF  " S+ S,\\C   5      rG " S- S.5      rH " S/ S05      rI " S1 S2\G\I   5      rJ " S3 S45      rK " S5 S6\G\K   5      rL " S7 S85      rM  " S9 S:\G\H   5      rN " S; S<5      rO " S= S>\O5      rP " S? S@5      rQ\R                  " 5       rS  " SA SB5      rT " SC SD5      rU\    SMSE j5       rV\    SNSF j5       rW\R$                  " SS9 " SG SH5      5       rX\R$                  " SS9 " SI SJ\X5      5       rYSOSPSK jjrZSQSL jr[g)R    )annotationsN)abstractmethod)defaultdict)contextmanager)	dataclass)AnyCallableGeneric
NamedTupleOptionalTYPE_CHECKINGTypeVarUnion)_pytree)dataclass_slots)CapturedTracebackformat_frame)WeakTensorKeyDictionary)	GeneratorIterator)CodeType)DDPOptimizerContext)	PyCodegen)ViewAndMutationMetaFakeTensorModez-^(?P<frame_id>\d+)/(?P<frame_compile_id>\d+)$zQ^!(?P<compiled_autograd_id>\d+)(?:/(?P<frame_id>\d+)/(?P<frame_compile_id>\d+))?$T)frozenc                  V    \ rS rSr% S\S'   S\S'   SrS\S'   S
S jr\SS j5       rS	r	g)	CompileIdL   Optional[int]frame_idframe_compile_idNcompiled_autograd_idc                B   U R                   b\  U R                  S L U R                  S L :X  d   eSnU R                  b  SU R                   SU R                   3nSU R                    U 3$ U R                  b  U R                  c   eU R                   SU R                   3$ )N /!)r$   r"   r#   )self	frame_strs     M/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/torch/_guards.py__str__CompileId.__str__[   s    $$0MMT)t/D/D/LMMMI}}(a0E0E/FG	t001)====,1F1F1RRRmm_Ad&;&;%<==    c                <   Uc  g [         [        4 H`  nUR                  U5      =n(       d  M  UR                  5       nUR	                  5        H  u  pVUc  M
  [        U5      XE'   M     U " S0 UD6s  $    [        e! [         a  n[        SU S35      UeSnAff = f)zt
Factory method that creates a CompileId from its string representation.
Keep this in sync with the __str__ method.
NzInvalid compile_id '' )COMPILE_ID_PATTERNCA_COMPILE_ID_PATTERNmatch	groupdictitemsint
ValueError	Exception)cls
compile_idpatternr4   groupskves           r+   from_stringCompileId.from_stringh   s     	J.0EF#MM*5555"__.F &=(+AFI !/ ==( G !  	J3J<qABI	Js(   %A< &A< A< 4A< <
BBBr1   returnstr)r;   Optional[str]rD   Optional[CompileId])
__name__
__module____qualname____firstlineno____annotations__r$   r,   classmethodrA   __static_attributes__r1   r.   r+   r   r   L   s8    
 $# +/-.
> J Jr.   r   c                  4    \ rS rSr% S\S'   S\S'   S	S jrSrg)
TraceId   r   r;   r7   attemptc                    U R                   S:X  a  [        U R                  5      $ U R                   SU R                    3$ )Nr   _)rR   rE   r;   r)   s    r+   r,   TraceId.__str__   s7    <<1t''oo&a~66r.   r1   NrC   rH   rI   rJ   rK   rL   r,   rN   r1   r.   r+   rP   rP      s     L7r.   rP   c                      \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSS jrSS jrSS jrSS jrSS jrSrg)GuardSource   r                           	   
                  c                H    U [         R                  [         R                  4;   $ N)rY   GLOBAL_FSDP_MODULELOCAL_FSDP_MODULErU   s    r+   is_fsdp_moduleGuardSource.is_fsdp_module   s    668U8UVVVr.   c                    SS K Js  Jn  UR                  (       a:  U [        R
                  [        R                  4;   =(       d    U R                  5       $ U [        R
                  [        R                  4;   $ Nr   )torch._dynamo.config_dynamoconfig_unsafe_skip_fsdp_module_guardsrY   GLOBAL_SPECIALIZED_NN_MODULELOCAL_SPECIALIZED_NN_MODULErn   )r)   rt   s     r+   is_specialized_nn_module$GuardSource.is_specialized_nn_module   sn    --11<<;; )
 &&( 4433
 
 	
r.   c                    U [         R                  [         R                  [         R                  [         R                  4;   $ rk   )rY   GLOBAL_UNSPECIALIZED_NN_MODULELOCAL_UNSPECIALIZED_NN_MODULE&GLOBAL_UNSPECIALIZED_BUILTIN_NN_MODULE%LOCAL_UNSPECIALIZED_BUILTIN_NN_MODULErU   s    r+   is_unspecialized_nn_module&GuardSource.is_unspecialized_nn_module   s8    6655>>==	
 
 	
r.   c                H    U [         R                  [         R                  4;   $ rk   )rY   r}   r~   rU   s    r+   "is_unspecialized_builtin_nn_module.GuardSource.is_unspecialized_builtin_nn_module   s&    >>==
 
 	
r.   c                    U [         R                  [         R                  [         R                  [         R                  [         R
                  4;   $ rk   )rY   LOCALrw   rm   r|   r~   rU   s    r+   is_localGuardSource.is_local   sA    33))55==
 
 	
r.   r1   NrD   bool)rH   rI   rJ   rK   r   GLOBALrw   rv   CONSTANTRANDOM_VALUE	SHAPE_ENVrm   rl   BACKWARD_STATE	EPHEMERALSYNTHETIC_LOCALr|   r{   r~   r}   rn   rx   r   r   r   rN   r1   r.   r+   rY   rY      st    EF"##$ HLINIO$&!%'",.)-/*W
"


r.   rY   c                      \ rS rSrSrg)GuardBuilderBase   r1   NrH   rI   rJ   rK   rN   r1   r.   r+   r   r      s    r.   r   c                  4    \ rS rSr% S\S'   S\S'   S	S jrSrg)
SLoc   z,Optional[Union[traceback.FrameSummary, str]]framework_locrF   maybe_user_locc                    [        U R                  [        5      (       a  U R                  O[        U R                  5      nU R                  b  U R                   SU S3$ SU S3$ )Nz ()()
isinstancer   rE   r   r   )r)   flocs     r+   r,   SLoc.__str__   sk     $,,c22 d001 	
 *))*"TF!44tfA;r.   r1   NrC   rW   r1   r.   r+   r   r      s    ??!!	r.   r   c                  4    \ rS rSr% S\S'   S\S'   S\S'   Srg	)

ShapeGuard   zsympy.logic.boolalg.Booleanexprr   slocr   size_obliviousr1   NrH   rI   rJ   rK   rL   rN   r1   r.   r+   r   r      s    
%%
Jr.   r   c                  b   \ rS rSr% S\S'   S\S'   SrS\S'   SrS\S	'   SrS
\S'   SrS\S'   Sr	S\S'   Sr
S\S'   SrS\S'   SrS\S'   S'S jrS(S jrS)S jrS*S jr\S+S j5       r\S,S j5       r\S-S j5       rS+S jrS+S jrS.S  jrS/S! jrS/S" jrS/S# jrS+S$ jr          S0S% jrS&rg)1Guard   Sourceoriginating_sourcez)Callable[[GuardBuilderBase, Guard], None]	create_fnNzOptional[list[str]]guard_types	code_listzOptional[object]obj_weakref$Optional[weakref.ReferenceType[Any]]guarded_class_weakrefzOptional[CapturedTraceback]stackz Optional[traceback.StackSummary]
user_stackr!   _hashFr   _unserializablec                    U R                   c:  [        U R                  U R                  [	        U R
                  5      45      U l         U R                   $ rk   )r   hashnamesourceidr   rU   s    r+   __hash__Guard.__hash__  s:    ::tyy$++r$..7IJKDJzzr.   c                   [        U R                  [        R                  5      =(       aD    U R                  R                  [
        R                  R                  R                  R                  L nUU R                  (       a  U R                  R                  OS[        U R                  5      U R                  U R                  5       R                  R                   4$ )N)r   r   	functoolspartialfunctorchrs   guardsGuardBuilderDUPLICATE_INPUTr   valuelenr   inner_create_fn__code__co_firstlineno)r)   is_duplicate_inputs     r+   sort_keyGuard.sort_key  s    
 t~~y'8'89 Y##u}}';';'H'H'X'XX 	
 !%DKK"		NII  "++::
 	
r.   c                D    U R                  5       UR                  5       :  $ rk   )r   r)   others     r+   __lt__Guard.__lt__+  s    }}!111r.   c                    [        U R                  [        R                  5      (       a  U R                  R                  $ U R                  $ rk   )r   r   r   r   r   rU   s    r+   r   Guard.inner_create_fn.  s3    dnni&7&788>>&&&>>!r.   c                6    U R                   R                  5       $ rk   )r   r   rU   s    r+   r   
Guard.name4  s    &&++--r.   c                6    U R                   R                  5       $ rk   )r   guard_sourcerU   s    r+   r   Guard.source8  s    &&3355r.   c           
     "   [        U [        R                  5      (       af  U " 5       nUbD  S[        [	        U 5      5       SUR
                  R                   S[        [	        U5      5       S3$ S[        [	        U 5      5       S3$ [        U 5      $ )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>)r   weakrefReferenceTypehexr   	__class__rH   rE   )r   objs     r+   weakref_to_strGuard.weakref_to_str<  s      k7#8#899-C%c"[/&:%;6#--BXBXAYY^_bceficj_k^llmnn%c"[/&:%;7CC{##r.   c                d   SU R                   (       a$  U R                   R                  R                  5       OS S[        U R                  5       SU R	                  5       R
                   SU R                   SU R                   SU R                  U R                  5       SU R                   S3nU$ )	Nz	
        r&    z&
        {
            'guard_types': z,
            'code': z,
            'obj_weakref': z
            'guarded_class': z
        }
        )r   r   lowerreprr   rH   r   r   r   r   r   )r)   ss     r+   __repr__Guard.__repr__U  s    	%)[[					!b94		?:K1TMaMaMcMlMlLm n ,,- .^^$ % //0@0@AB C"889 :	 r.   c                   S[        U R                  5       S3nU R                  (       a$  U R                  R                  R                  5       OSnUSU S3-  nUSU R	                  5       R
                   S3-  nUSU R                   S3-  nUSU R                   S3-  nUSU R                  U R                  5       S3-  nUS	U R                   S3-  nU$ )
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   rH   r   r   r   r   r   )r)   outputr   s      r+   r,   Guard.__str__a  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           	     \    U R                  X5      $ ! [         a    [        R                  S[	        U 5      R                  5       5        U R                  (       aN  [        R                  SSR                  U R                  R                  5       SS  5      R                  5       5        e f = f)NzError while creating guard:
%szCreated at:
%sr&   )
r   r9   log	exceptionrE   rstripr   errorjoinformat)r)   builders     r+   createGuard.createl  s    	>>'00 	MM;SY=M=M=OPzz		+RWWTZZ5F5F5H5M-N-U-U-WX		s
    BB+c                6    U R                   R                  5       $ rk   )r   rx   rU   s    r+   rx   Guard.is_specialized_nn_moduleu  s    {{3355r.   c                6    U R                   R                  5       $ rk   )r   rn   rU   s    r+   rn   Guard.is_fsdp_modulex  s    {{))++r.   c                6    U R                   R                  5       $ rk   )r   r   rU   s    r+   r   Guard.is_local{  s    {{##%%r.   c                    [        U R                  [        R                  5      (       a"  U R                  R                  nUR
                  $ U R                  nUR
                  $ rk   )r   r   r   r   r   rH   )r)   r   s     r+   create_fn_nameGuard.create_fn_name~  sM    dnni&7&788++I !!! I!!!r.   c                   U R                   (       d  / U l         U R                   R                  U5        U R                  US 4;   d   S5       eX l        U R                  (       d  X0l        OU R                  R	                  U5        U R
                  US 4;   d2  [        U R
                  5      (       a  U R                  5       b   S5       eX@l        g )Nz+Guarded class id must be identical, or NonezBGuarded object must be identical, None or ephemeral (dead weakref))r   appendr   r   extendr   callable)r)   
guard_typeguarded_classr   r   s        r+   set_export_infoGuard.set_export_info  s     !D
+)).
 
 	9 9	9 
 &3"~~&NNN!!), d 33(())  "*	P P		P+ 'r.   )r   r   r   r   r   rD   r7   )rD   ztuple[bool, int, int, str, int])r   r   rD   r   )rD   z(Callable[[GuardBuilderBase, Guard], Any]rC   rD   rY   )r   objectrD   rE   )r   r   rD   r   r   )
r  rE   r  r   r   	list[str]r   r  rD   None)rH   rI   rJ   rK   rL   r   r   r   r   r   r   r   r   r   r   r   r   propertyr   r   staticmethodr   r   r,   r   rx   rn   r   r   r  rN   r1   r.   r+   r   r      s   ( 88 (,K$+%)I")$(K!(BF?F)-E&-37J07E=!OT!

 2" . . 6 6 $ $0
	6,&" ' ' < ' 	 '
  ' 
 'r.   r   Tc                      \ rS rSrSrg)GuardEnvExpri  r1   Nr   r1   r.   r+   r  r    s    r.   r  c                  4    \ rS rSr% S\S'   S\S'   SS jrSrg)	DuplicateInputsi  r   input_source_ainput_source_bc                <    U R                   U R                  :w  d   eg rk   )r  r  rU   s    r+   __post_init__DuplicateInputs.__post_init__  s    ""d&9&9999r.   r1   NrD   r  )rH   rI   rJ   rK   rL   r  rN   r1   r.   r+   r  r    s    :r.   r  c                  *    \ rS rSr% S\S'   S\S'   Srg)StorageOverlapi  zlist[Source]overlapping_sourcesnon_overlapping_sourcesr1   Nr   r1   r.   r+   r  r    s    %%))r.   r  c                  <    \ rS rSr\SS j5       r\SS j5       rSrg)Checkpointablei  c                    g rk   r1   rU   s    r+   copy_graphstateCheckpointable.copy_graphstate  s    $'r.   c                    g rk   r1   r)   states     r+   restore_graphstate!Checkpointable.restore_graphstate  s    47r.   r1   N)rD   r  )r'  r  rD   r  )rH   rI   rJ   rK   r   r#  r(  rN   r1   r.   r+   r!  r!    s    ' '7 7r.   r!  c                  P    \ rS rSr% Sr\" 5       rS\S'   S
S jrSS jr	SS jr
Srg	)GuardsCheckpointStatei  zO
The GuardCheckpointState - it is the T of Checkpointable[T] for GuardsContext

set[Guard]dynamo_guardsc                    Xl         g rk   r-  )r)   r-  s     r+   __init__GuardsCheckpointState.__init__  s    *r.   c                p    U R                   R                  UR                   5      n[        U5      S:X  a  gU$ )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+   diffGuardsCheckpointState.diff  s3     ))%*=*=>q6Q;r.   c                T    [        U[        5      (       d  gU R                  U5      S L $ NF)r   r+  r6  r   s     r+   __eq__GuardsCheckpointState.__eq__  s'    %!677yy4''r.   r/  N)r-  r,  rD   r  )r   r+  rD   Optional[set[Guard]]r   r  rD   r   )rH   rI   rJ   rK   __doc__setr-  rL   r0  r6  r:  rN   r1   r.   r+   r+  r+    s$     !$M:%+
(r.   r+  c                  B    \ rS rSr% 0 rS\S'   S	S jrS
S jrSS jrSr	g)ModuleContextCheckpointStatei  dict[str, torch.nn.Module]
nn_modulesc                    Xl         g rk   rC  )r)   rC  s     r+   r0  %ModuleContextCheckpointState.__init__  s    $r.   c                    [        U R                  R                  5       5      R                  [        UR                  R                  5       5      5      n[	        U5      S:X  a  gU$ )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?  rC  keysr3  r   r4  s      r+   r6  !ModuleContextCheckpointState.diff  sM     $$&'223u7G7G7L7L7N3OPq6Q;r.   c                T    [        U[        5      (       d  gU R                  U5      S L $ r9  )r   rA  r6  r   s     r+   r:  #ModuleContextCheckpointState.__eq__  '    %!=>>yy4''r.   rE  N)rC  rB  rD   r  )r   rA  rD   Optional[set[str]]r=  )
rH   rI   rJ   rK   rC  rL   r0  r6  r:  rN   r1   r.   r+   rA  rA    s    -/J*/%
(r.   rA  c                  2    \ rS rSrSS jrSS jrS	S jrSrg)
ModuleContexti#  c                    0 U l         g rk   rE  rU   s    r+   r0  ModuleContext.__init__$  s	    *,r.   c                >    [        [        U R                  5      5      $ rk   )rA  dictrC  rU   s    r+   r#  ModuleContext.copy_graphstate'  s    +D,ABBr.   c                T    [        U[        5      (       d   eUR                  U l        g rk   )r   rA  rC  r&  s     r+   r(   ModuleContext.restore_graphstate*  s#    %!=>>>>**r.   rE  Nr  )rD   rA  )r'  rA  rD   r  rH   rI   rJ   rK   r0  r#  r(  rN   r1   r.   r+   rO  rO  #  s    -C+r.   rO  c                  B    \ rS rSr% 0 rS\S'   S	S jrS
S jrSS jrSr	g)GlobalContextCheckpointStatei/  dict[str, tuple[Callable, Any]]global_statec                    Xl         g rk   r[  )r)   global_statess     r+   r0  %GlobalContextCheckpointState.__init__2  s    )r.   c                    [        U R                  R                  5       5      R                  [        UR                  R                  5       5      5      n[	        U5      S:X  a  gU$ )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[  rH  r3  r   r4  s      r+   r6  !GlobalContextCheckpointState.diff5  sO     !!&&()44S9K9K9P9P9R5STq6Q;r.   c                T    [        U[        5      (       d  gU R                  U5      S L $ r9  )r   rY  r6  r   s     r+   r:  #GlobalContextCheckpointState.__eq__A  rL  r.   r]  N)r^  rZ  rD   r  )r   rY  rD   rM  r=  )
rH   rI   rJ   rK   r[  rL   r0  r6  r:  rN   r1   r.   r+   rY  rY  /  s    46L16*
(r.   rY  c                  >    \ rS rSrSr1 SkrS	S jrS
S jrSS jrSr	g)GlobalContextiG  zn
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_enabledc                    0 U l         g rk   r]  rU   s    r+   r0  GlobalContext.__init__V  s
    =?r.   c                ,    [        U R                  5      $ rk   )rY  r[  rU   s    r+   r#  GlobalContext.copy_graphstateY  s    +D,=,=>>r.   c                r   [        U[        5      (       d   eUR                  U l        [        U R                  5      [        U R                  5      :X  a1  [        U R                  R                  5       5      U R                  :X  d   S5       eU R                  R                  5        H  u  p#U" U5        M     g )NzGlobal state mismatch)r   rY  r[  r   _supported_global_statesr?  rH  values)r)   r'  r   argss       r+   r(   GlobalContext.restore_graphstate\  s    %!=>>>>!..!!"c$*G*G&HHD%%**,-1N1NN	# #	#O ++224JDJ 5r.   r]  Nr  )rD   rY  )r'  rY  rD   r  )
rH   rI   rJ   rK   r>  rq  r0  r#  r(  rN   r1   r.   r+   re  re  G  s    
 @?r.   re  c                      \ rS rSrSSS jjrSS jrSS jrSS jrSS jrSS	S
.       SS jjr	SS jr
SS jrSrg)	GuardsSetii  Nc                *    Uc
  [        5       nXl        g rk   )r?  inner)r)   rx  s     r+   r0  GuardsSet.__init__j  s    =EE
r.   c                ,    [        U R                  5      $ rk   )iterrx  rU   s    r+   __iter__GuardsSet.__iter__o      DJJr.   c                ,    [        U R                  5      $ rk   )r   rx  rU   s    r+   __len__GuardsSet.__len__r  s    4::r.   c                F    [        U R                  UR                  -
  5      $ rk   )rv  rx  r   s     r+   __sub__GuardsSet.__sub__w  s    ekk122r.   c                ,    [        U R                  5      $ rk   )r   rx  rU   s    r+   __bool__GuardsSet.__bool__z  r~  r.   Tr   )collect_debug_stackskipc                  XR                   ;   a  g U(       a)  UR                  c  [        R                  " SU-   S9Ul        UR                  c  [
        R                  5       Ul        U R                   R                  U5        g Nr[   )r  )rx  r   r   extractr   TracingContextextract_stackadd)r)   guardr  r  s       r+   r  GuardsSet.add}  sa     JJ{{"/77QXF#-;;=E

ur.   c                H    U H  nU H  nU R                  USS9  M     M     g r  )r  )r)   othersogs       r+   updateGuardsSet.update  s&    A#  r.   c                    SSK Jn  U R                   Vs1 s H  o2" UR                  U5      (       a  M  UiM      snU l        gs  snf )z.Delete all guards that contains a given sourcer[   )is_from_sourceN)_dynamo.sourcer  rx  r   )r)   r   r  r  s       r+   remove_guards_with_source#GuardsSet.remove_guards_with_source  s:    2 zz
!!8L8Lf)UAz

 
s
   AA)rx  rk   )rx  r<  rD   r  )rD   zIterator[Guard]r
  )r   rv  rD   rv  r   )r  r   r  r   r  r7   rD   r  )r  r,  rD   r  )r   r   rD   r  )rH   rI   rJ   rK   r0  r|  r  r  r  r  r  r  rN   r1   r.   r+   rv  rv  i  sR    
 
3  <@Q

48
GJ
	
$

r.   rv  c                  2    \ rS rSrSS jrSS jrS	S jrSrg)
GuardsContexti  c                0    [        5       U l        / U l        g rk   )rv  r-  aotautograd_guardsrU   s    r+   r0  GuardsContext.__init__  s    (168r.   c                R    [        [        U R                  R                  5      5      $ rk   )r+  r?  r-  rx  rU   s    r+   r#  GuardsContext.copy_graphstate  s    $S););)A)A%BCCr.   c                f    [        U[        5      (       d   e[        UR                  5      U l        g rk   )r   r+  rv  r-  r&  s     r+   r(   GuardsContext.restore_graphstate  s)    %!67777&u':':;r.   )r  r-  Nr  )rD   r+  )r'  r+  rD   r  rW  r1   r.   r+   r  r    s    9D<r.   r  c                      \ rS rSr\SS j5       r\SS j5       r\SS j5       r\SS j5       r\SS j5       r	\SS j5       r
\        SS j5       r\      SS	 j5       rS
rg)HopSubgraphCachei  c                    g rk   r1   r)   fn_id
identifiers      r+   add_dynamo_installed_submodule/HopSubgraphCache.add_dynamo_installed_submodule  s    SVr.   c                    g rk   r1   r)   r  s     r+   get_dynamo_installed_submodules0HopSubgraphCache.get_dynamo_installed_submodules  s    HKr.   c                    g rk   r1   r)   r  keys      r+   add_autograd_key_entry'HopSubgraphCache.add_autograd_key_entry  s    NQr.   c                    g rk   r1   r)   r  s     r+   get_autograd_key_entry'HopSubgraphCache.get_autograd_key_entry  s    MPr.   c                    g rk   r1   r  s      r+   add_proxy_dispatch_entry)HopSubgraphCache.add_proxy_dispatch_entry  s    PSr.   c                    g rk   r1   r  s     r+   get_proxy_dispatch_entry)HopSubgraphCache.get_proxy_dispatch_entry  s    ORr.   c                    g rk   r1   )r)   r  tangent_metadatagmods       r+   add_lazy_bwd_entry#HopSubgraphCache.add_lazy_bwd_entry  s     r.   c                    g rk   r1   r)   r  r  s      r+   get_lazy_bwd_entry#HopSubgraphCache.get_lazy_bwd_entry  s	     @Cr.   r1   Nr  r7   r  rE   rD   r  r  r7   rD   r  r  rE   r  r	   rD   r  r  rE   rD   zOptional[Callable]r  rE   r  tuple[object]r  ztorch.fx.GraphModulerD   r7   r  rE   r  r  rD   z4tuple[Optional[torch.fx.GraphModule], Optional[int]])rH   rI   rJ   rK   r   r  r  r  r  r  r  r  r  rN   r1   r.   r+   r  r    s    V VK KQ QP PS SR R ( #	
 
  CC1>C	=C Cr.   r  c                      \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS jr
        SS	 jr      SS
 jrSrg)InvokeSubgraphCachei  c                p    0 U l         0 U l        [        [        5      U l        [        [
        5      U l        g rk   )autograd_cacheproxy_dispatch_cacher   listdynamo_installed_submodulesrS  lazy_bwd_cacherU   s    r+   r0  InvokeSubgraphCache.__init__  s1    359;!ALTAR(  	r.   c                @    U R                   U   R                  U5        g rk   )r  r  r  s      r+   r  2InvokeSubgraphCache.add_dynamo_installed_submodule  s    ((/66zBr.   c                :    U R                   R                  U/ 5      $ rk   )r  getr  s     r+   r  3InvokeSubgraphCache.get_dynamo_installed_submodules  s    //33E2>>r.   c                     X R                   U'   g rk   )r  r  s      r+   r  *InvokeSubgraphCache.add_autograd_key_entry  s    *-J'r.   c                :    U R                   R                  US 5      $ rk   )r  r  r  s     r+   r  *InvokeSubgraphCache.get_autograd_key_entry  s    ""&&z488r.   c                     X R                   U'   g rk   )r  r  s      r+   r  ,InvokeSubgraphCache.add_proxy_dispatch_entry  s    03!!*-r.   c                :    U R                   R                  US 5      $ rk   )r  r  r  s     r+   r  ,InvokeSubgraphCache.get_proxy_dispatch_entry  s    ((,,Z>>r.   c                \    [        U R                  U   5      nX44U R                  U   U'   U$ rk   )r   r  )r)   r  r  r  	num_gmodss        r+   r  &InvokeSubgraphCache.add_lazy_bwd_entry  s8     ++J78	=A<MJ'(89r.   c                `    XR                   ;  a  gU R                   U   R                  US5      $ )N)NN)r  r  r  s      r+   r  &InvokeSubgraphCache.get_lazy_bwd_entry  s2     000"":.223C\RRr.   )r  r  r  r  Nr  r  r  r  r  r  r  )rH   rI   rJ   rK   r0  r  r  r  r  r  r  r  r  rN   r1   r.   r+   r  r    sr    C?.94?		 (	 #		
 
	SS1>S	=Sr.   r  c                  0    \ rS rSrSS jr    SS jrSrg)HopDispatchSetCachei  c                2    SSK Jn  U[        5       0U l        g )Nr   )invoke_subgraph)'torch._higher_order_ops.invoke_subgraphr  r  hop_cache_map)r)   r  s     r+   r0  HopDispatchSetCache.__init__  s    K-/B/DEr.   c                @    XR                   ;  a  g U R                   U   $ rk   r  )r)   ops     r+   	get_cacheHopDispatchSetCache.get_cache  s$     '''!!"%%r.   r  Nr  )r  ztorch._ops.HigherOrderOperatorrD   zOptional[HopSubgraphCache])rH   rI   rJ   rK   r0  r  rN   r1   r.   r+   r  r    s    F&0&	#&r.   r  c                  n    \ rS rSr\S	S j5       r\S
S j5       rSS jr\SS j5       r\SS j5       r	Sr
g)CompileContexti!  c                 H    [         R                  c   e[         R                  $ rk   )_TLScompile_contextr1   r.   r+   r  CompileContext.get"  s     ##///###r.   c                 $    [        [        SS 5      $ Nr  getattrr  r1   r.   r+   try_getCompileContext.try_get'      t.55r.   c                `    Ub  [        U[        5      (       d   eXl        SU l        / U l        g rq   )r   r   r;   rR   shape_env_guards)r)   r;   s     r+   r0  CompileContext.__init__+  s.    !Z
I%F%FFF/9+-r.   c                 J    [         R                  5       n U c  g U R                  $ rk   )r  r  r;   rU   s    r+   current_compile_id!CompileContext.current_compile_id2  s"    %%'<r.   c                     [         R                  5       n U c  g U R                  c  g [        U R                  U R                  5      $ rk   )r  r  r;   rP   rR   rU   s    r+   current_trace_idCompileContext.current_trace_id9  s:    %%'<??"t55r.   )rR   r;   r  N)rD   r  )rD   Optional[CompileContext])r;   rG   rD   r  )rD   rG   )rD   zOptional[TraceId])rH   rI   rJ   rK   r  r  r  r0  r	  r  rN   r1   r.   r+   r  r  !  sU    $ $ 6 6.   6 6r.   r  c                  V   \ rS rSrSr\SS j5       r\SS j5       rSS jrSS jr	\\
SS j5       5       r\SS j5       rSS	 jr\\R                  SS
 j5       5       r\\R                      SS j5       5       r\\R                  SS j5       5       r\SS j5       r\SS j5       rSrg)r  iC  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                 $    [        [        SS 5      $ )Ntracing_contextr   r1   r.   r+   r  TracingContext.try_getK  r  r.   c                 R    [         R                  5       =n (       a  U $ [        S5      e)Nz<TracingContext.get() must be called within an ongoing trace.)r  r  RuntimeError)ctxs    r+   r  TracingContext.getO  s+     ((**3*JJ
 	
r.   c                   [        5       U l        [        5       U l        [	        5       U l        [        5       U l        [        5       U l        Xl	        / U l
        S U l        S U l        S U l        S U l        S U l        S U l        S U l        S U l        SU l        [)        5       U l        SU l        [/        5       U l        / U l        g r9  )r  guards_contextrO  module_contextre  global_contextrS  previously_inlined_functionspreviously_cleaned_instructions	fake_modeframe_summary_stackloc_in_framefw_metadataddp_optimizer_ctx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_callr  hop_dispatch_set_cachetraced_code)r)   r  s     r+   r0  TracingContext.__init__W  s    +o+o+o<@F)?Cv,3<AC  =A:>@D3704BF*CG+ JN 490!8!:
 "'&9&;#+-r.   c                    0 U R                   l        U R                  R                  5         U R                  R                  5         g rk   )r  r[  r  clearr  rU   s    r+   r.  TracingContext.clear  s6     ,.())//1,,224r.   c               +  r  #    0 n[         R                  5       nU R                  5        H  n[        X#5      X'   M     U R	                  5        H  u  p4[        X#U5        M      S v   UR	                  5        H  u  p4[        X#U5        M     g ! UR	                  5        H  u  p4[        X#U5        M     f = f7frk   )r  r  rH  r  r6   setattr)kwargspriorr  r  vals        r+   patchTracingContext.patch  s        ";;=C *EJ ! HCCc" '	'!KKM#& *EKKM#& *s   A B7#B '&B7'B44B7c                     [         R                  5       n U c  [        R                  " 5       $ U R                  nU R
                  b  XR                  5       /-   n[        R                  R                  U5      $ rk   )r  r  	tracebackStackSummaryr  r  _populate_loc_in_frame_summary	from_list)r)   r   s     r+   r  TracingContext.extract_stack  sf    %%'<))++(((@@BCCE%%//66r.   c                j    U R                   c   eU R                   u  pn[        R                  " XUSS9$ )NF)lookup_line)r  r8  FrameSummary)r)   filenamelineno
frame_names       r+   r:  -TracingContext._populate_loc_in_frame_summary  s:      ,,,'+'8'8$*%%h
PUVVr.   c               #    #    [         R                  5       n [        R                  R                  R                  U S/ 5         [        R                  R                  R                  U SS 5          S v    S S S 5        S S S 5        g ! [         a  n[        US5      (       d  S Ul        e S nAff = f! , (       d  f       NB= f! , (       d  f       g = f7f)Nr  r  
real_stack)	r  r  unittestmockr5  r  r9   hasattrrE  )tcr@   s     r+   clear_frameTracingContext.clear_frame  s      !MM&&r+@"EMM&&r>4@ A FE
  $ q,//#'AL)	 A@ FEsT   A C,C.B10B5C=	C
B.B))B..B11
B?	;C
CCc              #    #    [         R                  5       nU b  UR                  R                  U 5        UR                  nS Ul         S v    U b  UR                  R                  5         X!l        g ! [
         a,  n[        US5      (       d  UR                  5       Ul        e S nAff = f! U b  UR                  R                  5         X!l        f = f7f)NrE  )
r  r  r  r  r  r9   rH  r  rE  pop)frame_summaryrI  oldr@   s       r+   current_frameTracingContext.current_frame  s      !$""))-8oo		" (&&**,!O  	1l++!//1	
 (&&**,!Os6   AC	A2 $C2
B(<'B##B((B+ +%CCc               #     #    [         R                  5       n U c  S v   g U R                  n/ U l         U R                  v   Xl        g ! Xl        f = f7frk   )r  r  r&  )rI  old_output_stridess     r+   report_output_strides$TracingContext.report_output_strides  sT     
 ##%:J..	3### 2 2s   0AA AAAc                :    XU4[         R                  5       l        g rk   )r  r  r  )r@  rA  rB  s      r+   set_current_locTracingContext.set_current_loc  s     .6z,J)r.   c                 J    [         R                  5       n U c  g U R                  $ rk   )r  r  r+  )rI  s    r+   get_traced_codeTracingContext.get_traced_code   s"    ##%:~~r.   )r"  r!  r  r)  r'  r  r   r  r  r*  r  r  r&  r#  r$  r%  r  r  r(  r+  N)rD   Optional[TracingContext])rD   r  )r  Optional[FakeTensorMode]rD   r  r  )r2  r   rD   Generator[None, None, None])rD   ztraceback.StackSummary)rD   ztraceback.FrameSummary)rD   r^  )rN  z Optional[traceback.FrameSummary]rD   r^  )rD   z@Generator[Optional[list[Optional[tuple[int, ...]]]], None, None])r@  rE   rA  r7   rB  rE   rD   r  )rD   zOptional[list[CodeType]])rH   rI   rJ   rK   r>  r  r  r  r0  r.  r   r5  r  r:  
contextlibrJ  rP  rT  rW  rZ  rN   r1   r.   r+   r  r  C  s    6 6 
 
1.f5 '  ' 7 7W   < "7"	$"  "* 3  3 K K
  r.   r  c              #     #    [        [        SS 5      nU [        l         U v   U[        l        g ! U[        l        f = f7fr  )r  r  r  )contextold_contexts     r+   r  r    s8      $ 148K"D+*{s   A 0 A =A c              #  *  #    [        [        SS5      nU [        l         U v    U bH  U R                  b;  U R                  R                  b$  U R                  R                  R                  5         U[        l        g! [         a/  n[	        US5      (       d  U b  U R                  5       Ul        e SnAff = f! U bH  U R                  b;  U R                  R                  b$  U R                  R                  R                  5         U[        l        f = f7f)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  NrE  )
r  r  r  r9   rH  r  rE  r  	shape_envcleanup)ra  rb  r@   s      r+   tracingrf    s      $ 148K"D+ !!-!!++7''//1*  q,''G,?"002AL !!-!!++7''//1*s5   DA< AD<
B5*B00B55B8 8ADDc                  d    \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrS
rg)r   i3  c                    gr9  r1   rU   s    r+   is_dict_keySource.is_dict_key5      r.   c                    gr9  r1   rU   s    r+   is_ephemeralSource.is_ephemeral8  rk  r.   c                    [         erk   NotImplementedError)r)   codegens     r+   reconstructSource.reconstruct;      !!r.   c                    [         erk   rp  rU   s    r+   r   Source.guard_source>  ru  r.   c                    [         erk   rp  rU   s    r+   r   Source.nameA  ru  r.   c                f    U R                  5       [        R                  L a  [        e[	        X5      $ rk   )r   rY   r   rq  r   )r)   fns     r+   
make_guardSource.make_guardD  s)    +"6"66%%Tr.   c                >    U R                  5       R                  5       $ rk   )r   rx   rU   s    r+   rx   Source.is_specialized_nn_moduleI  s      ";;==r.   c                D    U R                  5       [        R                  :g  $ )z+True if you can guard on attributes of this)r   rY   r   rU   s    r+   subguards_allowedSource.subguards_allowedL  s      "k&A&AAAr.   r1   Nr   )rr  r   rD   r  r  rC   )r{  zCallable[..., Any]rD   r   )rH   rI   rJ   rK   ri  rm  rs  r   r   r|  rx   r  rN   r1   r.   r+   r   r   3  s+    """
>Br.   r   c                  >    \ rS rSr% S\S'   S	S jrS	S jrS
S jrSrg)ChainedSourceiR  r   basec                6    U R                   R                  5       $ rk   )r  ri  rU   s    r+   ri  ChainedSource.is_dict_keyV  s    yy$$&&r.   c                6    U R                   R                  5       $ rk   )r  rm  rU   s    r+   rm  ChainedSource.is_ephemeralZ  s    yy%%''r.   c                z    U n[        U[        5      (       a#  UR                  n[        U[        5      (       a  M#  U$ rk   )r   r  r  )r)   currents     r+   get_baseChainedSource.get_base]  s1    -00llG -00r.   r1   Nr   )rD   r   )	rH   rI   rJ   rK   rL   ri  rm  r  rN   r1   r.   r+   r  r  R  s    
L'(r.   r  c                   SSK JnJn  / n[        R	                  5       =n(       a#  UR
                  nUb  UR                  USS45        SSKJn  [        [        U" 5       5      5       H+  u  px[        X5      (       d  M  UR                  USU45        M-     [        R                  " U 5      n	[        U	5       H5  u  pz[        X5      (       d  M  UR                  U
R
                  SU45        M7     U(       a\  US   u  p[nUSS  HI  u  pnXXL a  M   S	U S
U SU SU S
U SU SU SU SUR                   SU SU SUR                   35       e   U$ g)ax  
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   )
FakeTensorr   Nztracing context _get_current_dispatch_mode_stackzactive fake modezfake tensor inputr[   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  r  r  r  torch.utils._python_dispatchr  	enumeratereversedr   pytreetree_leavesr   )inputsr  r   
fake_modesra  r  r  imflat_inputs
flat_inputdesc1i1desc2i2s                  r+   detect_fake_moder  d  s    IJ ((**w*%%	 y*;Q?@M(#C#EFGa((q"4a89 H $$V,K";/j--z335H!LM 0 )!}	"&qrNLAb> i[wat;PQRPSSZ[`Zaabcebf g""'"-=ioo=N O""'"-=aggYH> + r.   c                     SSK Jn   SSKJn  [	        [        U" 5       5      5       H  u  p#[        X05      (       d  M  Us  $    g)zr
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  r   )r   r  rT   r  s       r+   active_fake_moder    s:    
 =M(#C#EFGa((H H r.   )ra  r  rD   z/Generator[Optional[CompileContext], None, None])ra  r\  rD   z/Generator[Optional[TracingContext], None, None]rk   )r  r   rD   r]  )rD   r]  )\
__future__r   r_  dataclassesenumr   loggingre	threadingr8  unittest.mockrF  r   abcr   collectionsr   r   r   typingr   r	   r
   r   r   r   r   r   r   torch.utilsr   r  torch.utils._backport_slotsr   torch.utils._tracebackr   r   torch.utils.weakr   	getLoggerrH   r   collections.abcr   r   typesr   sympy"torch._dynamo.backends.distributedr   torch._dynamo.codegenr   &torch._functorch._aot_autograd.schemasr   r  r   compiler2   r3   r   rP   EnumrY   r   r   r   r   r  r  r  r  r!  r+  rA  rO  rY  re  rv  r  r  r  r  localr  r  r  r  rf  r   r  r  r  r1   r.   r+   <module>r     sF   "      	      # % !	 	 	  ) 7 B 4 ! 3F/J< ZZ PQ 

X $ $/J /J /Jd7j 7;
$)) ;
|	 	 d#  $   o' o'  o'd CL d#	 	 $	 d#:l : $: d#*\ * $*

8WQZ 8( (8( (0	+N#?@ 	+( (0N#?@ D+
 +
\<N#89 <C CB,S* ,S^& & &6 6DB BJ +%+4+ + +%+4+ +< d#B B $B< d#F  $")Xr.   