
    l
qi                       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Zd dlZd dlmZ d dlm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 ej        dk    rd d	lmZ nd
 Zd dlZd dlm Z! d dl"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.m/Z/m0Z0m1Z1 d dl2m3Z3 d dl4Z4d dl5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< 	  ej=        d          Z> ej=        d          Z? eddd           G d d                      Z@ G d de          ZA G d dejB                  ZC	  G d  d!          ZD ej        d"           G d# d$                      ZE G d% d&e          ZF ej        d'           G d( d)                      ZG ed*          ZH	  ej        d"           G d+ d,                      ZI	  ej        d"           G d- d.eI                      ZJ	  ej        d"           G d/ d0eI                      ZK	  G d1 d2eeH                   ZL G d3 d4          ZM G d5 d6          ZN G d7 d8eLeN                   ZO G d9 d:          ZP G d; d<eLeP                   ZQ G d= d>          ZR	  G d? d@eLeM                   ZS G dA dB          ZT G dC dDeT          ZU G dE dF          ZV e	jW                    ZX	  G dG dH          ZY G dI dJ          ZZedfdO            Z[edgdR            Z\edhdW            Z]e	 didjdZ            Z] e            	 didkd]            Z] e]d"           G d^ d_                      Z^ e]d"           G d` dae^                      Z_didlddZ`dmdeZadS )n    )annotationsN)abstractmethod)defaultdict)contextmanager)	dataclass)AnyGeneric
NamedTupleOptionaloverloadTYPE_CHECKINGTypeVar)      )dataclass_transformc                     d } | S )Nc                    | S N )fns    m/var/www/html/bestrading.cuttalo.com/services/ml-inference/venv/lib/python3.11/site-packages/torch/_guards.py	decoratorz&dataclass_transform.<locals>.decorator   s    I    r   )r   s    r   r   r      s    	 	 	 r   )_pytree)
OrderedSet)is_traceable_wrapper_subclass)CapturedTracebackformat_frame)WeakTensorKeyDictionary)Callable	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)frozenkw_onlyslotsc                  R    e Zd ZU ded<   ded<   dZded<   ddZedd            ZdS )	CompileId
int | Noneframe_idframe_compile_idNcompiled_autograd_idreturnstrc                    | j         =| j        d u | j        d u k    sJ d}| j        d| j         d| j         }d| j          | S | j        | j        J | j         d| j         S )N /!)r1   r/   r0   )self	frame_strs     r   __str__zCompileId.__str___   s    $0MT)t/D/LMMMMI}(GGG0EGG	=t0=)====,1F1R1R1Rm==d&;===r   
compile_id
str | NoneCompileId | Nonec                N   |dS 	 t           t          fD ]e}|                    |          x}rL|                                }|                                D ]\  }}|t          |          ||<    | di |c S ft          # t          $ r}t          d| d          |d}~ww xY w)z
        Factory method that creates a CompileId from its string representation.
        Keep this in sync with the __str__ method.
        NzInvalid compile_id ''r   )COMPILE_ID_PATTERNCA_COMPILE_ID_PATTERNmatch	groupdictitemsint
ValueError	Exception)clsr;   patternrB   groupskves           r   from_stringzCompileId.from_stringl   s     4	J.0EF ! !#MM*5555 )"__..F & / /1=(+AF1I3====((() !  	J 	J 	JAJAAABBI	Js   A2B 9B 
B$BB$r2   r3   )r;   r<   r2   r=   )__name__
__module____qualname____annotations__r1   r:   classmethodrN   r   r   r   r-   r-   P   s~         
 !    (,++++
> > > > J J J [J J Jr   r-   c                  ,    e Zd ZU ded<   ded<   d	dZdS )
TraceIdr-   r;   rE   attemptr2   r3   c                b    | j         dk    rt          | j                  S | j         d| j          S )Nr   _)rW   r3   r;   r8   s    r   r:   zTraceId.__str__   s7    <1t'''o66666r   NrO   rP   rQ   rR   rS   r:   r   r   r   rV   rV      sA          LLL7 7 7 7 7 7r   rV   c                  z    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ZddZddZddZddZddZdS )GuardSourcer         r                  	   
   r                  r2   boolc                6    | t           j        t           j        fv S r   )r]   GLOBAL_FSDP_MODULELOCAL_FSDP_MODULErZ   s    r   is_fsdp_modulezGuardSource.is_fsdp_module   s    68UVVVr   c                    dd l mc m} |j        r.| t          j        t          j        fv p|                                 S | t          j        t          j        fv S Nr   )torch._dynamo.config_dynamoconfig_unsafe_skip_fsdp_module_guardsr]   GLOBAL_SPECIALIZED_NN_MODULELOCAL_SPECIALIZED_NN_MODULErp   )r8   ru   s     r   is_specialized_nn_modulez$GuardSource.is_specialized_nn_module   s|    ---------1 	<; )
 &&(( 43
 
 	
r   c                b    | 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_MODULErZ   s    r   is_unspecialized_nn_modulez&GuardSource.is_unspecialized_nn_module   s,    65>=	
 
 	
r   c                6    | t           j        t           j        fv S r   )r]   r}   r~   rZ   s    r   "is_unspecialized_builtin_nn_modulez.GuardSource.is_unspecialized_builtin_nn_module   s     >=
 
 	
r   c                x    | t           j        t           j        t           j        t           j        t           j        fv S r   )r]   LOCALrx   ro   r|   r~   rZ   s    r   is_localzGuardSource.is_local   s2    3)5=
 
 	
r   Nr2   rl   )rP   rQ   rR   r   GLOBALrx   rw   CONSTANTRANDOM_VALUE	SHAPE_ENVro   rn   BACKWARD_STATE	EPHEMERALSYNTHETIC_LOCALr|   r{   r~   r}   
TEMP_LOCALrp   ry   r   r   r   r   r   r   r]   r]      s        EF"##$ HLINIO$&!%'",.)-/*JW W W W
 
 
 
"
 
 
 

 
 
 

 
 
 
 
 
r   r]   c                      e Zd ZdS )GuardBuilderBaseNrP   rQ   rR   r   r   r   r   r      s        Dr   r   )r)   c                  ,    e Zd ZU ded<   ded<   d	dZdS )
SLocz#traceback.FrameSummary | str | Noneframework_locr<   maybe_user_locr2   r3   c                    t          | j        t                    r| j        nt          | j                  }| j        | j         d| dS d| dS )Nz ()()
isinstancer   r3   r   r   )r8   flocs     r   r:   zSLoc.__str__   sg     $,c222Dd011 	
 *)44T4444t;;;r   NrO   r[   r   r   r   r   r      sB         6666	 	 	 	 	 	r   r   c                  .    e Zd ZU ded<   ded<   ded<   dS )
ShapeGuardzsympy.logic.boolalg.Booleanexprr   slocrl   size_obliviousNrP   rQ   rR   rS   r   r   r   r   r      s3         %%%%JJJr   r   )r+   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ed<   d4dZd5dZd6dZd7dZed8d             Zed9d"            Zed:d$            Zd8d%Zd8d&Zd;d*Zd<d+Zd<d,Zd<d-Zd8d.Zd=d3ZdS )>GuardSourceoriginating_sourcez)Callable[[GuardBuilderBase, Guard], None]	create_fnNzlist[str] | Noneguard_types	code_listzobject | Noneobj_weakref!weakref.ReferenceType[Any] | Noneguarded_class_weakrefzCapturedTraceback | Nonestackztraceback.StackSummary | None
user_stackr.   _hashFrl   _unserializabler2   rE   c                    | j         3t          | j        | j        t	          | j                  f          | _         | j         S r   )r   hashnamesourceidr   rZ   s    r   __hash__zGuard.__hash__  s6    :ty$+r$.7I7IJKKDJzr   tuple[bool, int, int, str, int]c                (   t          | j        t          j                  o&| j        j        t
          j        j        j        j	        u }|| j
        r| j
        j        ndt          | j                  | j        |                                 j        j        fS )N)r   r   	functoolspartialfunctorchrt   guardsGuardBuilderDUPLICATE_INPUTr   valuelenr   inner_create_fn__code__co_firstlineno)r8   is_duplicate_inputs     r   sort_keyzGuard.sort_key  s    
 t~y'899 Y#u}';'H'XX 	
 !%4DK"	NNI  ""+:
 	
r   otherc                V    |                                  |                                 k     S r   )r   r8   r   s     r   __lt__zGuard.__lt__/  s    }}!1!111r   (Callable[[GuardBuilderBase, Guard], Any]c                f    t          | j        t          j                  r| j        j        S | j        S r   )r   r   r   r   r   rZ   s    r   r   zGuard.inner_create_fn2  s,    dni&788 	">&&>!r   r3   c                    | j         j        S r   )r   r   rZ   s    r   r   z
Guard.name8  s    &++r   r]   c                    | j         j        S r   )r   guard_sourcerZ   s    r   r   zGuard.source<  s    &33r   objectc           
     @   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>)r   weakrefReferenceTypehexr   	__class__rP   r3   )r   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	
        r5    z&
        {
            'guard_types': z,
            'code': z,
            'obj_weakref': z
            'guarded_class': z
        }
        )r   r   lowerreprr   rP   r   r   r   r   r   )r8   ss     r   __repr__zGuard.__repr__Y  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: 
r5   z    Source: z    Create Function: z    Guard Types: z    Code List: z    Object Weakref: z    Guarded Class Weakref: )r   r   r   r   r   rP   r   r   r   r   r   )r8   outputr   s      r   r:   zGuard.__str__e  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   r   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:
%sr5   )
r   rG   log	exceptionr3   rstripr   errorjoinformat)r8   r   s     r   createzGuard.createp  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 r   )r   ry   rZ   s    r   ry   zGuard.is_specialized_nn_moduley  s    {33555r   c                4    | j                                         S r   )r   rp   rZ   s    r   rp   zGuard.is_fsdp_module|  s    {))+++r   c                4    | j                                         S r   )r   r   rZ   s    r   r   zGuard.is_local  s    {##%%%r   c                v    t          | j        t          j                  r| j        j        }n| j        }|j        S r   )r   r   r   r   r   rP   )r8   r   s     r   create_fn_namezGuard.create_fn_name  s5    dni&788 	'+III!!r   
guard_typeguarded_class	list[str]Nonec                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))r   appendr   r   extendr   callable)r8   r   r   r   r   s        r   set_export_infozGuard.set_export_info  s      	"!D
+++).
 
 
 
 9
 
 
 &3"~ 	-&DNNN!!),,, d 333()) 4  ""**O +**&r   r2   rE   )r2   r   )r   r   r2   rl   )r2   r   rO   r2   r]   )r   r   r2   r3   )r   r   r2   r   r   )
r   r3   r   r   r   r   r   r   r2   r   )rP   rQ   rR   rS   r   r   r   r   r   r   r   r   r   r   r   r   propertyr   r   staticmethodr   r   r:   r   ry   rp   r   r   r   r   r   r   r   r      s        & 8888 %)K(((("&I&&&&!%K%%%%?CCCCC&*E****04J4444E!O!!!!   

 
 
 
 2 2 2 2" " " " , , , X, 4 4 4 X4 $ $ $ \$0
 
 
 
	 	 	 	   6 6 6 6, , , ,& & & &" " " " '  '  '  '  '  'r   r   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dZdS )	DuplicateInputsr   input_source_ainput_source_br2   r   c                *    | j         | j        k    sJ d S r   )r  r  rZ   s    r   __post_init__zDuplicateInputs.__post_init__  s    "d&9999999r   Nr2   r   )rP   rQ   rR   rS   r  r   r   r   r   r     sB         : : : : : :r   r   c                  $    e Zd ZU ded<   ded<   dS )StorageOverlapzlist[Source]overlapping_sourcesnon_overlapping_sourcesNr   r   r   r   r  r    s*         %%%%))))))r   r  c                  >    e Zd Zedd            Zed	d            ZdS )
Checkpointabler2   r   c                    d S r   r   rZ   s    r   copy_graphstatezCheckpointable.copy_graphstate  s    $'Cr   stater   c                    d S r   r   r8   r  s     r   restore_graphstatez!Checkpointable.restore_graphstate  s    47Cr   N)r2   r   )r  r   r2   r   )rP   rQ   rR   r   r  r  r   r   r   r  r    s<        ''' ^'777 ^777r   r  c                  6    e Zd ZU dZded<   ddZdd	ZddZdS )GuardsCheckpointStatezW
    The GuardCheckpointState - it is the T of Checkpointable[T] for GuardsContext
    OrderedSet[Guard]dynamo_guardsr2   r   c                    || _         d S r   )r  )r8   r  s     r   __init__zGuardsCheckpointState.__init__  s    *r   r   Optional[OrderedSet[Guard]]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 an OrderedSet() of mismatched
        Guard type objects.
        r   N)r  
differencer   r8   r   rs      r   diffzGuardsCheckpointState.diff  s6     ))%*=>>q66Q;;4r   r   rl   c                ^    t          |t                    sdS |                     |          d u S NF)r   r  r  r   s     r   __eq__zGuardsCheckpointState.__eq__	  s1    %!677 	5yy4''r   N)r  r  r2   r   )r   r  r2   r  r   r   r2   rl   )rP   rQ   rR   __doc__rS   r  r  r   r   r   r   r  r    sj           %$$$+ + + +
 
 
 
( ( ( ( ( (r   r  c                  6    e Zd ZU i Zded<   ddZddZddZdS )ModuleContextCheckpointStatedict[str, torch.nn.Module]
nn_modulesr2   r   c                    || _         d S r   r&  )r8   r&  s     r   r  z%ModuleContextCheckpointState.__init__  s    $r   r   set[str] | Nonec                    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)setr&  keysr  r   r  s      r   r  z!ModuleContextCheckpointState.diff  s]     $$&&''223u7G7L7L7N7N3O3OPPq66Q;;4r   r   rl   c                ^    t          |t                    sdS |                     |          d u S r  )r   r$  r  r   s     r   r   z#ModuleContextCheckpointState.__eq__!  1    %!=>> 	5yy4''r   N)r&  r%  r2   r   )r   r$  r2   r)  r!  )rP   rQ   rR   r&  rS   r  r  r   r   r   r   r$  r$    sc         -/J////% % % %
 
 
 
( ( ( ( ( (r   r$  c                  &    e Zd Zd	dZd
dZddZdS )ModuleContextr2   r   c                    i | _         d S r   r(  rZ   s    r   r  zModuleContext.__init__(  s    *,r   r$  c                D    t          t          | j                            S r   )r$  dictr&  rZ   s    r   r  zModuleContext.copy_graphstate+  s    +D,A,ABBBr   r  c                L    t          |t                    sJ |j        | _        d S r   )r   r$  r&  r  s     r   r  z ModuleContext.restore_graphstate.  s'    %!=>>>>>*r   Nr  )r2   r$  )r  r$  r2   r   rP   rQ   rR   r  r  r  r   r   r   r0  r0  '  sT        - - - -C C C C+ + + + + +r   r0  c                  6    e Zd ZU i Zded<   ddZdd	ZddZdS )GlobalContextCheckpointStatedict[str, tuple[Callable, Any]]global_stateglobal_statesr2   r   c                    || _         d S r   r9  )r8   r:  s     r   r  z%GlobalContextCheckpointState.__init__6  s    )r   r   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+  r9  r,  r  r   r  s      r   r  z!GlobalContextCheckpointState.diff9  s^     !&&(())44S9K9P9P9R9R5S5STTq66Q;;4r   r   rl   c                ^    t          |t                    sdS |                     |          d u S r  )r   r7  r  r   s     r   r   z#GlobalContextCheckpointState.__eq__E  r.  r   N)r:  r8  r2   r   )r   r7  r2   r)  r!  )rP   rQ   rR   r9  rS   r  r  r   r   r   r   r7  r7  3  sc         46L6666* * * *
 
 
 
( ( ( ( ( (r   r7  c                  2    e Zd ZdZh dZddZddZd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_enabledr2   r   c                    i | _         d S r   r<  rZ   s    r   r  zGlobalContext.__init__Z  s    =?r   r7  c                *    t          | j                  S r   )r7  r9  rZ   s    r   r  zGlobalContext.copy_graphstate]  s    +D,=>>>r   r  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)r   r7  r9  r   _supported_global_statesr+  r,  values)r8   r  r   argss       r   r  z GlobalContext.restore_graphstate`  s    %!=>>>>>!.!""c$*G&H&HHHD%**,,--1NNNN" ONN+2244 	 	JD$DJJJJ	 	r   Nr  )r2   r7  )r  r7  r2   r   )rP   rQ   rR   r"  rJ  r  r  r  r   r   r   r@  r@  K  sp         
     @ @ @ @? ? ? ?     r   r@  c                  X    e Zd ZdddZddZd d
Zd!dZd"dZdddd#dZd$dZ	d%dZ
dS )&	GuardsSetNinnerr  r2   r   c                B    |t                      | _        d S || _        d S r   )r   rO  )r8   rO  s     r   r  zGuardsSet.__init__n  s!    =,6LLDJJJDJJJr   Iterator[Guard]c                *    t          | j                  S r   )iterrO  rZ   s    r   __iter__zGuardsSet.__iter__t      DJr   rE   c                *    t          | j                  S r   )r   rO  rZ   s    r   __len__zGuardsSet.__len__w  s    4:r   r   c                :    t          | j        |j        z
            S r   )rN  rO  r   s     r   __sub__zGuardsSet.__sub__|  s    ek1222r   rl   c                *    t          | j                  S r   )rl   rO  rZ   s    r   __bool__zGuardsSet.__bool__  rU  r   Tr   )collect_debug_stackskipguardr   r\  r]  c                   || j         v rd S |r$|j        t          j        d|z             |_        |j        t
                                          |_        | j                             |           d S Nr^   )r]  )rO  r   r   extractr   TracingContextextract_stackadd)r8   r^  r\  r]  s       r   rd  zGuardsSet.add  sw     DJF 	G{"/7QXFFF#-;;==E
ur   others
set[Guard]c                H    |D ]}|D ]}|                      |d           d S r`  )rd  )r8   re  ogs       r   updatezGuardsSet.update  sH     	$ 	$A $ $####$	$ 	$r   r   r   c                b    ddl m t          fd| j        D                       | _        dS )z.Delete all guards that contains a given sourcer^   )is_from_sourcec              3  >   K   | ]} |j                   |V  d S r   )r   ).0ri  rl  r   s     r   	<genexpr>z6GuardsSet.remove_guards_with_source.<locals>.<genexpr>  sK        
  
8Lf)U)U 
 
  
  
  
  
  
r   N)_dynamo.sourcerl  r   rO  )r8   r   rl  s    `@r   remove_guards_with_sourcez#GuardsSet.remove_guards_with_source  sX    222222  
  
  
  
  
z 
  
  
 
 



r   r   )rO  r  r2   r   )r2   rQ  r   )r   rN  r2   rN  r   )r^  r   r\  rl   r]  rE   r2   r   )re  rf  r2   r   )r   r   r2   r   )rP   rQ   rR   r  rT  rW  rY  r[  rd  rj  rq  r   r   r   rN  rN  m  s                      
3 3 3 3        <@Q
 
 
 
 
 
$ $ $ $

 
 
 
 
 
r   rN  c                  &    e Zd Zd	dZd
dZddZdS )GuardsContextr2   r   c                :    t                      | _        g | _        d S r   )rN  r  aotautograd_guardsrZ   s    r   r  zGuardsContext.__init__  s    (168r   r  c                N    t          t          | j        j                            S r   )r  r   r  rO  rZ   s    r   r  zGuardsContext.copy_graphstate  s    $Z0B0H%I%IJJJr   r  c                f    t          |t                    sJ t          |j                  | _        d S r   )r   r  rN  r  r  s     r   r  z GuardsContext.restore_graphstate  s2    %!677777&u':;;r   Nr  )r2   r  )r  r  r2   r   r5  r   r   r   rs  rs    sT        9 9 9 9K K K K< < < < < <r   rs  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	edd            Z
edd            ZdS )HopSubgraphCachefn_idrE   
identifierr3   r2   r   c                    d S r   r   r8   rz  r{  s      r   add_dynamo_installed_submodulez/HopSubgraphCache.add_dynamo_installed_submodule  s    SVSVr   r   c                    d S r   r   r8   rz  s     r   get_dynamo_installed_submodulesz0HopSubgraphCache.get_dynamo_installed_submodules      HKr   keyr    c                    d S r   r   r8   r{  r  s      r   add_autograd_key_entryz'HopSubgraphCache.add_autograd_key_entry  s    NQcr   Callable | Nonec                    d S r   r   r8   r{  s     r   get_autograd_key_entryz'HopSubgraphCache.get_autograd_key_entry  s    JM#r   c                    d S r   r   r  s      r   add_proxy_dispatch_entryz)HopSubgraphCache.add_proxy_dispatch_entry  s    PSPSr   c                    d S r   r   r  s     r   get_proxy_dispatch_entryz)HopSubgraphCache.get_proxy_dispatch_entry  s    LOCr   tangent_metadatatuple[object]gmodtorch.fx.GraphModulec                    d S r   r   )r8   r{  r  r  s       r   add_lazy_bwd_entryz#HopSubgraphCache.add_lazy_bwd_entry  s	     cr   .tuple[torch.fx.GraphModule | None, int | None]c                    d S r   r   r8   r{  r  s      r   get_lazy_bwd_entryz#HopSubgraphCache.get_lazy_bwd_entry  s	     :=r   Nrz  rE   r{  r3   r2   r   rz  rE   r2   r   r{  r3   r  r    r2   r   r{  r3   r2   r  r{  r3   r  r  r  r  r2   rE   r{  r3   r  r  r2   r  )rP   rQ   rR   r   r~  r  r  r  r  r  r  r  r   r   r   ry  ry    s        VVV ^VKKK ^KQQQ ^QMMM ^MSSS ^SOOO ^O   ^ = = = ^= = =r   ry  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$dZ
d%dZd&dZd'dZdS )(InvokeSubgraphCacher2   r   c                    i | _         i | _        t          t                    | _        t          t
                    | _        i | _        d S r   )autograd_cacheproxy_dispatch_cacher   listdynamo_installed_submodulesr3  lazy_bwd_cacheeffects_cacherZ   s    r   r  zInvokeSubgraphCache.__init__  sJ    359;!ALTARAR(  	
  	r   rz  rE   r{  r3   c                F    | j         |                             |           d S r   )r  r   r}  s      r   r~  z2InvokeSubgraphCache.add_dynamo_installed_submodule  s$    (/66zBBBBBr   r   c                8    | j                             |g           S r   )r  getr  s     r   r  z3InvokeSubgraphCache.get_dynamo_installed_submodules  s    /33E2>>>r   r  r    c                    || j         |<   d S r   )r  r  s      r   r  z*InvokeSubgraphCache.add_autograd_key_entry  s    *-J'''r   r  c                8    | j                             |d           S r   )r  r  r  s     r   r  z*InvokeSubgraphCache.get_autograd_key_entry  s    "&&z4888r   c                    || j         |<   d S r   )r  r  s      r   r  z,InvokeSubgraphCache.add_proxy_dispatch_entry  s    03!*---r   c                8    | j                             |d           S r   )r  r  r  s     r   r  z,InvokeSubgraphCache.get_proxy_dispatch_entry  s    (,,Z>>>r   r  r  r  r  c                ^    t          | j        |                   }||f| j        |         |<   |S r   )r   r  )r8   r{  r  r  	num_gmodss        r   r  z&InvokeSubgraphCache.add_lazy_bwd_entry  s7     +J788	=A9<MJ'(89r   r  c                Z    || j         vrdS | j         |                             |d          S )N)NN)r  r  r  s      r   r  z&InvokeSubgraphCache.get_lazy_bwd_entry  s6     T000<":.223C\RRRr   effectsr+  c                    | j                             |d          x}r||k    sJ d| d| d| d            || j         |<   dS )z>Store the effect types for a given invoke_subgraph identifier.NzPDifferent number of effects were found for invoke_subgraph call with identifier z,. 
Previously we had the following effects: z.
But now we have: .r  r  )r8   r{  r  prev_effectss       r   add_effectszInvokeSubgraphCache.add_effects  s    -11*dCCC< 	l***/(2/ /<H/ / %,/ / / +** *1:&&&r   
set | Nonec                8    | j                             |d          S )zARetrieve the effect types for a given invoke_subgraph identifier.Nr  r  s     r   get_effectszInvokeSubgraphCache.get_effects  s    !%%j$777r   Nr  r  r  r  r  r  r  )r{  r3   r  r+  r2   r   )r{  r3   r2   r  )rP   rQ   rR   r  r~  r  r  r  r  r  r  r  r  r  r   r   r   r  r    s        	 	 	 	C C C C? ? ? ?. . . .9 9 9 94 4 4 4? ? ? ?	 	 	 	S S S S	1 	1 	1 	18 8 8 8 8 8r   r  c                      e Zd Zd	dZd
dZdS )HopDispatchSetCacher2   r   c                <    ddl m} |t                      i| _        d S )Nr   )invoke_subgraph)'torch._higher_order_ops.invoke_subgraphr  r  hop_cache_map)r8   r  s     r   r  zHopDispatchSetCache.__init__  s.    KKKKKK-/B/D/DEr   optorch._ops.HigherOrderOperatorHopSubgraphCache | Nonec                2    || j         vrd S | j         |         S r   )r  )r8   r  s     r   	get_cachezHopDispatchSetCache.get_cache  s#    T'''4!"%%r   Nr  )r  r  r2   r  )rP   rQ   rR   r  r  r   r   r   r  r    s@        F F F F& & & & & &r   r  c                  v    e Zd Zedd            Zedd            ZddZedd	            Zedd            ZdS )CompileContextr2   c                 6    t           j        J t           j        S r   )_TLScompile_contextr   r   r   r  zCompileContext.get7  s    #///##r   CompileContext | Nonec                 .    t          t          dd           S Nr  getattrr  r   r   r   try_getzCompileContext.try_get<      t.555r   r;   r=   r   c                b    |t          |t                    sJ || _        d| _        g | _        d S rr   )r   r-   r;   rW   shape_env_guards)r8   r;   s     r   r  zCompileContext.__init__@  s9    !Z
I%F%F!!!,6+-r   c                 J    t                                           } | d S | j        S r   )r  r  r;   rZ   s    r   current_compile_idz!CompileContext.current_compile_idG  s%    %%''<4r   TraceId | Nonec                     t                                           } | d S | j        d S t          | j        | j                  S r   )r  r  r;   rV   rW   rZ   s    r   current_trace_idzCompileContext.current_trace_idN  s>    %%''<4?"4t555r   N)r2   r  )r2   r  )r;   r=   r2   r   )r2   r=   )r2   r  )	rP   rQ   rR   r   r  r  r  r  r  r   r   r   r  r  6  s        $ $ $ \$ 6 6 6 \6. . . .    \ 6 6 6 \6 6 6r   r  c                  `   e Zd ZdZed"d            Zed#d            Zd$d	Zd%d
Zee	d&d                        Z
ed'd            Zd(dZeej	        d)d                        Zeej	        d*d                        Zeej	        d+d                        Zed,d            Zed-d             Zd!S ).rb  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.
    r2   TracingContext | Nonec                 .    t          t          dd           S )Ntracing_contextr  r   r   r   r  zTracingContext.try_get`  r  r   c                 Z    t                                           x} r| S t          d          )Nz<TracingContext.get() must be called within an ongoing trace.)rb  r  RuntimeError)ctxs    r   r  zTracingContext.getd  s5     ((***3 	JJ
 
 	
r   	fake_modeFakeTensorMode | Noner   c                   t                      | _        t                      | _        t	                      | _        t                      | _        t                      | _        || _	        g | _
        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d| _        t)                      | _        d| _        t/                      | _        g | _        d S r  )rs  guards_contextr0  module_contextr@  global_contextr3  previously_inlined_functionspreviously_cleaned_instructionsr  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)r8   r  s     r   r  zTracingContext.__init__l  s    +oo+oo+oo<@FF)?Cvv,09AC  :>7;=A04-1?C*@D+ DH 490!8!:!:
 "'&9&;&;#+-r   c                    i | j         _        | j                                         | j                                         d S r   )r  r9  r  clearr  rZ   s    r   r  zTracingContext.clear  s?     ,.()//111,2244444r   kwargsr   Generator[None, None, None]c               +    K   i }t                                           }| D ]}t          ||          ||<   |                                 D ]\  }}t	          |||           	 d V  |                                D ]\  }}t	          |||           d S # |                                D ]\  }}t	          |||           w xY wr   )rb  r  r  rD   setattr)r  priorr  r  vals        r   patchzTracingContext.patch  s         "" 	+ 	+C c**E#JJ 	# 	#HCCc""""	'EEE!KKMM ' 'SS#&&&&' 'EKKMM ' 'SS#&&&&'s   "B -C traceback.StackSummaryc                     t                                           } | t          j                    S | j        }| j        ||                                 gz   }t          j                            |          S r   )rb  r  	tracebackStackSummaryr  r  _populate_loc_in_frame_summary	from_list)r8   r   s     r   rc  zTracingContext.extract_stack  sh    %%''<)+++((T@@BBCCE%//666r   traceback.FrameSummaryc                Z    | j         J | j         \  }}}t          j        |||d          S )NF)lookup_line)r  r  FrameSummary)r8   filenamelineno
frame_names       r   r  z-TracingContext._populate_loc_in_frame_summary  s;     ,,,'+'8$&*%h
PUVVVVr   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)	rb  r  unittestmockr  r   rG   hasattrr  )tcrM   s     r   clear_framezTracingContext.clear_frame  s_      !!M&&r+@"EE	 	M&&r>4@@	 	   $ q,// (#'AL) 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sZ   'B?)B'+A0/B'0
B:BBB'B?'B+	+B?.B+	/B??CCframe_summarytraceback.FrameSummary | Nonec              #    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  )
rb  r  r  r   r  rG   r  rc  r  pop)r  r  oldrM   s       r   current_framezTracingContext.current_frame  s       !!$"))-888o		"EEEE 	 	 	1l++ 2!//11	  (&**,,,!BOOO (&**,,,!BO!!!!s*   A B- 
B*B  BB- -$C:Generator[list[tuple[int, ...] | None] | None, None, None]c               #     K   t                                           } | d V  d S | j        }g | _        	 | j        V  || _        d S # || _        w xY wr   )rb  r  r  )r  old_output_stridess     r   report_output_stridesz$TracingContext.report_output_strides  st      
 ##%%:JJJF.	3#### 2B 2B2222s   	A 	Ar	  r3   r
  rE   r  c                H    | ||ft                                           _        d S r   )rb  r  r  )r	  r
  r  s      r   set_current_loczTracingContext.set_current_loc  s%     .6vz,J)))r   list[CodeType] | Nonec                 J    t                                           } | d S | j        S r   )rb  r  r  )r  s    r   get_traced_codezTracingContext.get_traced_code  s%    ##%%:4~r   N)r2   r  )r2   rb  )r  r  r2   r   r  )r  r   r2   r  )r2   r  )r2   r  )r2   r  )r  r  r2   r  )r2   r  )r	  r3   r
  rE   r  r3   r2   r   )r2   r  )rP   rQ   rR   r"  r   r  r  r  r  r   r  rc  r  
contextlibr  r  r  r  r!  r   r   r   rb  rb  X  s         6 6 6 \6 
 
 
 \
1. 1. 1. 1.f5 5 5 5 ' ' ' ^ \' 7 7 7 \7W W W W     \< " " "  \"* 3 3 3  \3 K K K \K
    \  r   rb  contextr  r2   ,Generator[CompileContext | None, None, None]c              #     K   t          t          dd           }| t          _        	 | V  |t          _        d S # |t          _        w xY wr  )r  r  r  )r#  old_contexts     r   r  r    sR       $ 1488K"D+*{****s	   8 Ar  ,Generator[TracingContext | None, None, None]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  )
r  r  r  rG   r  rc  r  r  	shape_envcleanup)r#  r&  rM   s      r   tracingr+  )  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,rH   type[T]r  r   c                    d S r   r   rH   r  s     r   dataclass_with_cached_hashr/  F  r  r   r   Callable[[type[T]], type[T]]c                    d S r   r   r.  s     r   r/  r/  J  s	     $'3r   type[T] | None&type[T] | Callable[[type[T]], type[T]]c                .    dfd}| |S  ||           S )N	cls_innerr,  r2   c                j    t          j        | fi }| j        dfd}d }||_        ||_        |S )Nr2   rE   c                |    t          | d          s%t                              | d |                      | j        S )Nr   )r  r   __setattr__r   )r8   old_hashs    r   r   z:dataclass_with_cached_hash.<locals>.wrap.<locals>.__hash__X  s>    4)) B""4((4..AAA:r   c                t     t          j                   }t           fd|D                       } j        |fS )Nc              3  B   K   | ]}t          |j                  V  d S r   )r  r   )rn  fr8   s     r   ro  zOdataclass_with_cached_hash.<locals>.wrap.<locals>.__reduce__.<locals>.<genexpr>b  s/       G G1qv!6!6 G G G G G Gr   )dataclassesfieldstupler   )r8   r>  field_valuess   `  r   
__reduce__z<dataclass_with_cached_hash.<locals>.wrap.<locals>.__reduce__]  sD     !'--F  G G G G G G GGGLNL11r   r   )r=  r   r   rA  )r5  new_clsr   rA  r9  r  s       @r   wrapz(dataclass_with_cached_hash.<locals>.wrapT  sh    '	<<V<<%	 	 	 	 	 	
	2 	2 	2 $'r   )r5  r,  r2   r,  r   )rH   r  rC  s    ` r   r/  r/  P  s;         * {499r   c                      e Zd ZddZddZddZej        dd
            Ze	dd            Z
ej        dd            Zd dZd!dZddZddZdS )"r   r2   rl   c                    dS r  r   rZ   s    r   is_dict_keyzSource.is_dict_keys      ur   c                    dS r  r   rZ   s    r   is_ephemeralzSource.is_ephemeralv  rG  r   codegenr%   r   c                    t           r   NotImplementedError)r8   rJ  s     r   reconstructzSource.reconstructy  s    !!r   r]   c                    t           r   rL  rZ   s    r   r   zSource.guard_source|  s    !!r   r3   c                    t           )a  
        A template for the name of the source. Used to prevent code duplication between
        `name` and `get_value`.

        For non-ChainedSources, `name` and `get_value` use the returned string directly.

        For ChainedSources, `name` and `get_value` expect the return to be a format string
        with `{0}` present - `name` and `get_value` will apply different values to this function's
        returned format string.
        rL  rZ   s    r   _name_templatezSource._name_template  s
     "!r   c                    | j         S r   )rQ  rZ   s    r   r   zSource.name  s    ""r   globalsdict[str, Any]localscache&weakref.WeakKeyDictionary[Source, Any]r   c                T    | |v r||          S t          | j        ||          }||| <   |S r   )evalrQ  )r8   rS  rU  rV  r   s        r   	get_valuezSource.get_value  s9     5==;T('6::dr   r   Callable[..., Any]r   c                V    | j         t          j        u rt          t	          | |          S r   )r   r]   r   rM  r   )r8   r   s     r   
make_guardzSource.make_guard  s'     444%%T2r   c                4    | j                                         S r   )r   ry   rZ   s    r   ry   zSource.is_specialized_nn_module  s     99;;;r   c                ,    | j         t          j        k    S )z+True if you can guard on attributes of this)r   r]   r   rZ   s    r   subguards_allowedzSource.subguards_allowed  s     K$???r   Nr   )rJ  r%   r2   r   r   rO   rS  rT  rU  rT  rV  rW  r2   r   )r   r[  r2   r   )rP   rQ   rR   rF  rI  rN  r   cached_propertyr   r   rQ  r   rZ  r]  ry   r`  r   r   r   r   r   q  s             " " " " " " " " " " " X" # # # #
 
 
 
   
< < < <@ @ @ @ @ @r   r   c                  ~    e Zd ZU ded<   ddZddZej        dd            Zdd	Z	ej        dd            Z
ddZdS )ChainedSourcer   baser2   rl   c                4    | j                                         S r   )re  rF  rZ   s    r   rF  zChainedSource.is_dict_key  s    y$$&&&r   c                4    | j                                         S r   )re  rI  rZ   s    r   rI  zChainedSource.is_ephemeral  s    y%%'''r   r]   c                    | j         j        S r   )re  r   rZ   s    r   r   zChainedSource.guard_source  s    y%%r   c                l    | }t          |t                    r|j        }t          |t                    |S r   )r   rd  re  )r8   currents     r   get_basezChainedSource.get_base  s9    -00 	#lG -00 	#r   r3   c                J    | j                             | j        j                  S r   )rQ  r   re  r   rZ   s    r   r   zChainedSource.name  s    "))$).999r   rS  rT  rU  rV  rW  r   c                    | |v r||          S d}d}||v rd| }|dz  }||v | j                             |||          ||<   t          | j                            |          ||          }||= ||| <   |S )Ntmpr   r^   )re  rZ  rY  rQ  r   )r8   rS  rU  rV  tmpvarcounterr   s          r   rZ  zChainedSource.get_value  s     5==;$7__FqLG  ,,WfeDDvT(//77&II6Ndr   Nr   r   )r2   r   rO   ra  )rP   rQ   rR   rS   rF  rI  r   rb  r   rk  r   rZ  r   r   r   rd  rd    s         LLL' ' ' '( ( ( ( & & & &    : : : :     r   rd  inputsr  c                d   ddl m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 ]\  }	t          |	          r|                    |	j        df           t          |	          rKg }
 ||	|
           fd	|
D             }|                    fd
t          |          D                        |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   )
FakeTensorr(   get_plain_tensorsNztracing context _get_current_dispatch_mode_stackzactive fake modezfake tensor input)outc                4    g | ]}t          |          |S r   )r   )rn  xrs  s     r   
<listcomp>z$detect_fake_mode.<locals>.<listcomp>   s8     . . .*Q
";";.. . .r   c                0    g | ]\  }}|j         d  |fS )zsubclass input )r  )rn  ixtensoris      r   rz  z$detect_fake_mode.<locals>.<listcomp>  s@       "F %'<'<'<bA  r   r^   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_tensorrs  r(   rt  rb  r  r  r   torch.utils._python_dispatchrv  	enumeratereversedr   pytreetree_leavesr   r   r   )rq  r(   rt  
fake_modesr#  r  rv  mflat_inputs
flat_inputrw  fake_tensorsdesc1i1desc2i2rs  r~  s                   @@r   detect_fake_moder    s             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";//  :j*-- 	Nz35H!LMMM(44 	;=Cjc2222. . . .. . .L    &/&=&=      )!}	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'   ru  N)r  r(   r  rv  r  r  r   )r(   rv  rY   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#  r  r2   r$  )r#  r  r2   r'  )rH   r,  r  r   r2   r,  r   )rH   r   r  r   r2   r0  )rH   r2  r  r   r2   r3  )rq  r   r2   r  )r2   r  )b
__future__r   r"  r=  enumr   loggingresys	threadingr  unittest.mockr  r   abcr   collectionsr   r   r   typingr   r	   r
   r   r   r   r   version_infor   r   torch.utilsr   r  torch.utils._ordered_setr   r  r   torch.utils._tracebackr   r   torch.utils.weakr   	getLoggerrP   r   collections.abcr    r!   r"   typesr#   sympy"torch._dynamo.backends.distributedr$   torch._dynamo.codegenr%   &torch._functorch._aot_autograd.schemasr&   r  r(   compiler@   rA   r-   rV   Enumr]   r   r   r   r   r   r   r   r  r  r  r$  r0  r7  r@  rN  rs  ry  r  r  localr  r  rb  r  r+  r/  r   rd  r  r  r   r   r   <module>r     s   " " " " " "               				 



                    # # # # # # % % % % % % ! ! ! ! ! ! W W W W W W W W W W W W W W W W W W w*******    ) ) ) ) ) ) / / / / / / F F F F F F B B B B B B B B 4 4 4 4 4 4 g!!  	===========LLLFFFFFF//////JJJJJJ<<<<<<  RZ PQQ "
X  " $D111/J /J /J /J /J /J /J 21/Jd7 7 7 7 7j 7 7 7<
 <
 <
 <
 <
$) <
 <
 <
~	 	 	 	 	 	 	 	 d###       $#         T"""o' o' o' o' o' o' o' #"o'd GCLL d###	 	 	 	 	 	 	 $#	 d###: : : : :l : : $#: d###* * * * *\ * * $#*

8 8 8 8 8WQZ 8 8 8( ( ( ( ( ( ( (8( ( ( ( ( ( ( (0	+ 	+ 	+ 	+ 	+N#?@ 	+ 	+ 	+( ( ( ( ( ( ( (0    N#?@   D,
 ,
 ,
 ,
 ,
 ,
 ,
 ,
^< < < < <N#89 < < <= = = = = = = =B>8 >8 >8 >8 >8* >8 >8 >8B
& 
& 
& 
& 
& 
& 
& 
& y&6 6 6 6 6 6 6 6DB B B B B B B BJ + + + + + + + +8 
 K K K 
 K 
' ' ' ' 
'
     @ 4(((6@ 6@ 6@ 6@ 6@ 6@ 6@ )(6@t 4((() ) ) ) )F ) ) )()X? ? ? ? ?D     r   