
    Vh?T                      U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZmZ d dlmZmZmZ d dlmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZm Z  d dlm!Z!m"Z"m#Z# d d	l
m$Z$ d dl%Z%d dl&Z%d dl'm(Z( d dl)m(c mZ* d dl+m,c m-Z. d d
l%m/Z/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z> d dl?m@Z@ d dl'mAZAmBZBmCZC d dlDmEZE d dlFmGZGmHZHmIZI d dlJmKZK d dlLmMZM d dlNmOZO d dlPmQZQmRZRmSZSmTZT d dlUmVZV d dlWmXZX d dlYmZZZ d dl[m\Z\m]Z]m^Z^ ddl_m`Z` ddlambZb er d dlcZcd dlmdZd d dleZed d l&mfZf d d!lgmhZh d d"limjZj g d#Zke d$   Zle%j                  e5fZne e%j                  e5f   Zoe%j                  j                  Zqe%j                  j                  Zr ej                  et      Zue%j                  j                  etd%      Zxi ayd&ezd'<   dZ{ ed(      Z| ed)      Z} e"d*      Z~ ed+      Z ee      Z e.j                  e%j                  d, d- d. d/0       dd1Ze	 	 	 	 dd2       Z e       Z G d3 d4      Z e       Zd d5limZmZ  G d6 d7e      Zdd8Zedd:       Ze	 	 	 	 	 	 	 	 dd;       Ze	 	 	 	 	 	 	 	 dd<       Z	 	 	 	 	 	 	 	 dd=Zdd>ZeXeB   Ze	 	 	 	 	 	 dd?       Ze	 	 	 	 	 	 	 	 dd@       Ze	 	 	 	 	 	 	 	 	 	 ddA       Ze	 	 	 	 	 	 ddB       Ze	 	 	 	 	 	 	 	 ddC       Ze	 	 	 	 	 	 	 	 	 	 ddD       Ze	 	 	 	 	 	 ddE       Ze	 	 	 	 	 	 	 	 ddF       Ze	 	 	 	 	 	 	 	 	 	 ddG       ZedH f	 	 	 	 	 	 	 	 	 ddIZddJZee eeoe`edK   edL   eedKf   e1eeef
      ZddMZedNdO	 	 	 	 	 ddP       ZeddQ       ZeddR       ZddSZ	 	 	 	 	 	 	 	 	 	 ddTZ	 	 	 	 	 	 	 	 	 	 ddUZe eBedV   eedVf   f   Ze e1edW   eedWf   f   Z	 	 	 	 	 	 	 	 	 	 ddXZe G dY d9             Z	 	 	 	 ddZZedd[       Ze	 	 	 	 	 	 dd\       Ze	 	 	 	 	 	 dd]       Z	 	 	 	 	 	 dd^Ze1e%jP                  jR                  e;fZ	 	 	 	 	 	 dd`Z	 	 	 	 	 	 	 	 	 	 	 	 ddaZ G db dc      Z G dd deeC      Z	 	 	 	 ddfZe%j`                  	 d	 	 	 	 	 	 	 ddg       Z	 	 	 	 	 	 	 	 	 	 ddhZdadiezdj<   eddk       Z G dl dmeO      Z ee      Z G dn doeO      Z ee      Z G dp d_eT      Z G dq dre(jt                  jv                        Z G ds dte(jz                        Z	 	 	 	 	 	 	 	 dduZeddv       Z G dw dxe      Z G dy dz      Z G d{ d|e      Z G d} d~      Zdadezd<   edd       Z	 	 	 dddddNd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZddZddZedd       Z	 	 	 	 	 	 	 	 	 	 ddZ	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZddZy)    )annotationsN)defaultdictOrderedDict)	GeneratorMappingSequence)_GeneratorContextManagercontextmanager	ExitStacknullcontext)	dataclass)AnyCallableOptionaloverloadProtocolTYPE_CHECKINGTypeVarUnion)Concatenate	ParamSpecSelf)WeakKeyDictionary)SymBoolSymIntTensor)enable_python_dispatcher)FakeScriptObject)trace_structured)fast_detach)
FakeTensorFakeTensorModeis_fakeunset_fake_temporarily)is_sparse_any)GraphModuleProxyTracer)_assign_attr)1_side_effectful_need_to_be_preserved_pre_dispatchArgumentTarget)_extract_tensor_metadata)Module)TorchFunctionMode)_disable_infra_mode
_push_mode_unset_infra_modeTorchDispatchMode)count)Thunk)CapturedTraceback)_WeakHashRefWeakIdKeyDictionaryWeakTensorKeyDictionary   )BackwardState)SymNode)MutableMapping)
OpOverload)PHBase)IntLikeType)
PythonKeyTracerdispatch_tracemake_fxDecompositionInterpreterpy_sym_typesget_innermost_proxy_modeget_proxy_modehandle_sym_dispatchmaybe_enable_thunkifymaybe_disable_thunkify)rA   _GraphAppendingTracerExnot_implementedzMapping[OpOverload, Callable]CURRENT_DECOMPOSITION_TABLETU_PRc                    t        |       d fS N)list)xss    R/home/dcms/DCMS/lib/python3.12/site-packages/torch/fx/experimental/proxy_tensor.py<lambda>rW   ~   s    R$     c                    t        |       S rS   )tuple)rU   _s     rV   rW   rW      s
    %) rX   c                x    t        |       D cg c]  \  }}t        j                  |      |f c}}d fS c c}}w rS   )	enumeratepytreeSequenceKey)rU   ixs      rV   rW   rW      s5    09">1&

Q
	#>% >s   !6z
torch.Size)flatten_with_keys_fnserialized_type_namec                n    dj                  d t        |      D              }t        d| d| dd| i      S )z*FX gets confused by varargs, de-confuse it,c              3  &   K   | ]	  }d |   yw)argN ).0r`   s     rV   	<genexpr>z!fake_signature.<locals>.<genexpr>   s     8a#aS	8s   zlambda z: fn()fn)joinrangeeval)rl   nargsargnamess      rV   fake_signaturerr      s:    xx85<88H'(5
!4tRjAArX   c              #  H   K   t         }| xs i a 	 t          |a y # |a w xY wwrS   )rM   )decomposition_tableold_decomposition_tables     rV   	decomposerv      s1     
 :"5";>))&=#&=#s   " ""c                      e Zd Zy)
_NoDefaultN__name__
__module____qualname__rh   rX   rV   rx   rx          rX   rx   )rE   	PySymTypec                      e Zd ZU ded<   y)_HasMetazdict[str, PySymType]metaNrz   r{   r|   __annotations__rh   rX   rV   r   r      s    
rX   r   c                    t        | d      sJ d       d| j                  v xr t        | j                  d   t              S )Nr   z3All nodes traced with proxy_tensor should have metaval)hasattrr   
isinstancerE   )nodes    rV   is_sym_noder      s<    4 W"WW DIIL*TYYu-=|"LLrX   _ProxyTensorc                     y rS   rh   objtracerproxys      rV   set_proxy_slotr          rX   c                     y rS   rh   r   s      rV   r   r           rX   c                     y rS   rh   r   s      rV   r   r      r   rX   c                ^   t         j                  d| t        |       |       t        | t              r"t        |t
              sJ ||j                  | <   y t        | t              r"t        |t              sJ ||j                  | <   y t        | t              sJ t        |              | |j                  vrzt        j                  t        |      |j                  | <   dd l}t        | j"                  j$                  |j&                        r$||j(                  | j"                  j$                  <   y y y )Nzset_proxy_slot %s (%s) %sr   )logdebugidr   r   r   tensor_tracker_AnyScriptObjectr'   script_object_trackerrE   typesymnode_trackertypingcast_PySymProxyTypesympyr   exprSymbolsympy_expr_tracker)r   r   r   r   s       rV   r   r      s    
 II)33?#v %...%*c"	C*	,%''',1$$S) #|,7d3i7,f,,,*0++ou*MF""3' #((--6;@))#((--8 7# -rX   c                ~    t        | t        t        f      sJ t        |              t	        t        | |dd             S )NFc                     yNTrh   )r[   s    rV   rW   z has_proxy_slot.<locals>.<lambda>   s    rX   )r   r   r<   r   boolget_proxy_slotr   r   s     rV   has_proxy_slotr      s6    cFG,-8tCy8-sFE>BCCrX   c                     y rS   rh   r   s     rV   r   r          
 rX   c                     y rS   rh   r   r   defaults      rV   r   r           rX   c                     y rS   rh   r   r   r   	transforms       rV   r   r   	       rX   c                     y rS   rh   r   s     rV   r   r     r   rX   c                     y rS   rh   r   s      rV   r   r     r   rX   c                     y rS   rh   r   s       rV   r   r   $  r   rX   c                     y rS   rh   r   s     rV   r   r   .  r   rX   c                     y rS   rh   r   s      rV   r   r   6  r   rX   c                     y rS   rh   r   s       rV   r   r   ?  r   rX   c                    | S rS   rh   ra   s    rV   rW   rW   P  s    A rX   c                   t        | t              r|j                  }nIt        | t              r|j                  }n,t        | t
              sJ t        |              |j                  }| |vrt        | t
              rF| j                  j                  |j                  v r$|j                  | j                  j                     }n3t        |t              rt        |  dt        |        d|       |S ||    } ||      }|S )Nz (z)is not tracked with proxy for )r   r   r   r   r   rE   r   r   r   r   r   rx   RuntimeErrorr   )r   r   r   r   trackervalueress          rV   r   r   L  s     #v''	C)	*..#|,7d3i7,((
'c<(SXX]]f>W>W-W--chhmm<E':."e2bgY&EfXN  N
E
CJrX   c                n    t        | t              rt        | j                  |       S | j	                         S rS   )r   r!   r    	fake_modedetach)r   s    rV   snapshot_faker   k  s+     #z"3==#..zz|rX   _ExtractValType)r   .c                >   t        |       rt        |       S t        | t              r| S t        | t              r| S t        | t
              r| S t        | t        t        f      r(| j                  | D cg c]  }t        |       c}      S t        | t              r-| j                         D ci c]  \  }}|t        |       c}}S t        | t              rz| j                  smddlm}  ||       }|st!        d      }|5  t#        j$                  | j&                  | j)                         | j*                  | j,                        cd d d        S y t        | t.        t0        t2        f      r| S | y t5        j6                  |        y c c}w c c}}w # 1 sw Y   *xY w)Nr   )detect_fake_modeT)allow_fallback_kernels)devicedtype)r#   r   r   rE   r   r;   rT   rZ   	__class__extract_valdictitemsr   	is_sparsetorch._guardsr   r"   torchempty_stridedshapestrider   r   intfloatr   typing_extensionsassert_never)r   ra   kvr   fake_tensor_modes         rV   r   r     sJ   s|S!!	C	&
	C)	*
	C	'
	C$	'}}c:k!n:;;	C	.1iik:da;q>!::	C	 }} 7/4##1#N ! **IIszz|CJJcii 
 	C#ud+	,
	""3'7 ;: s   2F.FAFFTenablec             #  b   K   | j                   }|| _         	 d || _         y# || _         w xY ww)a{  
    Enable thunkification inside the context manager.  Thunkification prevents
    SymNode computation from directly being traced into an FX graph; instead,
    the compute is only added to the graph if it is actually used.  This helps
    us track SymNode compute when it is computed (since we need /something/
    to put in the tracker) even if it is unlikely to be used.
    N)enable_thunkify)r   r   olds      rV   _enable_thunkifyr     s3      
 
 C#F%!$s   /# /	,/c               #     K   t               } | %t        | j                  d      5  d ddd       yd y# 1 sw Y   yxY ww)a[  Within a context, disable thunkification.  See :func:`maybe_enable_thunkify`
    for more details.  This is helpful if you have a wrapper function which
    you want to enable thunkification on, but in some segment on the inside (say,
    the original user function), you want to disable thunkification as you know
    it is not needed there.
    NFr   rG   r   r   
proxy_modes    rV   rJ   rJ     sG       !Jj//> 		 	 		 	s   $A9AAAc               #     K   t               } | #t        | j                        5  d ddd       yd y# 1 sw Y   yxY ww)a3  Within this context manager, if you are doing make_fx tracing, we will thunkify
    all SymNode compute and avoid tracing it into the graph unless it is actually needed.
    You should prefer to avoid using this as much as possible, as lazy evaluation of
    SymNode tracing can lead to long chains of thunks which will stack overflow
    if you evaluate them.  However, this is currently sometimes necessary as there
    are buggy parts of PT2 which will fail with "s0 is not tracked with proxy" error
    due to insufficient tracing of SymNode computation.
    Nr   r   s    rV   rI   rI     sE       !Jj//0 		 	 		 	s   "A7AA Ac                x   t        |      | j                  j                  d<   t        | j                        5  t        |      r#t        |      | j                  j                  d<   n>t        |t              r.|j                  s"t        |      | j                  j                  d<   d d d        | S # 1 sw Y   | S xY w)Nr   tensor_meta)
r   r   r   r   r   r#   r-   r   r   r   )r   r   s     rV   set_metar     s    (-EJJOOE	%,,	' K3<-Ec-JEJJOOM*V$S]]-Ec-JEJJOOM*K LK Ls   A-B//B9c                    | j                   r"t        t        j                  |g|i |      S  ||i |t        fd      S )zT
    Delays computation of f until it's called again
    Also caches the result
    c                      S rS   rh   )rs   rV   rW   zthunkify.<locals>.<lambda>   s    Q rX   )r   r5   	functoolspartial)r   fargskwargsr   s       @rV   thunkifyr     sH     Y&&q:4:6:;;tvYrX   c                  	 	 	 	 	 	 	 	 	 	 dfd}t        | j                        D ]  \  }} ||fd|        t        |       s/t        | j                               D ]  \  }} ||fd|         || j	                         fd       t        |       s || j                         fd       t        | t        |             y )Nc           
         t        |      sJ t        | t              r1t              5  t	        | t        || g|i |       d d d        y y # 1 sw Y   y xY wrS   )callabler   r   r   r   r   )outer_sproxy_callabler   r   r   s       rV   try_set_proxy_slotz(track_tensor.<locals>.try_set_proxy_slot  sh     '''gv&!&) V^WNtNvN  ' s   AAc                    t        j                  dt        j                  j                  j
                  j                  |fi       |       S Ncall_function)r   create_proxyr   opsatensym_sizer   ra   r`   r   r   s     rV   rW   ztrack_tensor.<locals>.<lambda>  s@    ###UYY^^%<%<%@%@5!*b 	 rX   c                    t        j                  dt        j                  j                  j
                  j                  |fi       |       S r   )r   r   r   r   r   
sym_strider   r  s     rV   rW   ztrack_tensor.<locals>.<lambda>*  sB    X''')B)B)F)FPQ
TV 	 rX   c                    t        j                  dt        j                  j                  j
                  j                  fi       |       S r   )r   r   r   r   r   	sym_numelr   ra   r   r   s    rV   rW   ztrack_tensor.<locals>.<lambda>5  s>    (!9!9!A!AE8R 	
 rX   c                    t        j                  dt        j                  j                  j
                  j                  fi       |       S r   )r   r   r   r   r   sym_storage_offsetr   r  s    rV   rW   ztrack_tensor.<locals>.<lambda>?  sA    h###IINN55==H	  rX   )
r   r@   r   z+Callable[Concatenate[PySymType, _P], Proxy]r   _P.argsr   	_P.kwargsreturnNone)r]   r   r%   r   numelstorage_offsetr   r   )tensorr   constantr   r   r`   ss    ` `   rV   track_tensorr    s    C  	
 
( &,,' 

1 		


  fmmo. 
	DAq 	
	 	
  !!#	
 66<x#@ArX   _NestedProxys_NestedTensorsc               T    t        | |       	 	 	 	 	 	 	 	 dfd | ||       | S )Nc           	        t        | t              rBt        t              sJ |t        |t              sJ t        | |       t	        |        y t        | t
              r9t        t              sJ t	        |        t        | t        fd             y t        | t              r,t        t              sJ t        |        t	        |        y t        | t        t        f      rXt        t        j                        rt	        |        	 	 	 	 	 	 dd}t        |       D ]  \  }} 	||    |||              y t        | t              rP|J t        t        j                        rt	        |        | j                         D ]  \  }} 	||   d         y t        | t              r&t        t              sJ t	        |        | _        y y )N)r   r  c                      S rS   rh   r   s   rV   rW   z<track_tensor_tree.<locals>.wrap_with_proxy.<locals>.<lambda>v  s    u rX   c                B    | y t        | t        t        f      sJ | |   S rS   )r   rT   rZ   )cidxs     rV   get_constantz@track_tensor_tree.<locals>.wrap_with_proxy.<locals>.get_constant  s)     9%a$777S6MrX   )r  Optional[_NestedTensors]r  r   r  r  )r   r   r'   r  r   rE   r   r   r   rZ   rT   fxr]   r   r   r;   r   )
er   r  r  r  eekeyr   r   wrap_with_proxys
    `      rV   r#  z*track_tensor_tree.<locals>.wrap_with_proxyj  s    a eU+++#z(F'CCCE&8DUA<(eU+++UA1fhv}&EF+,eU+++1fe,UAE4=)%*""+"25")" %Q< MR  E#JXs0KLM
 4  ###%*"GGI 7SU3Z67 =)eU+++UAAG rX   )r   objectr   r  r  r  r  r  )_set_unbacked_bindings)	inner_res	proxy_resr  r   r#  s      `@rV   track_tensor_treer(  T  sI    ( 9i0::':3K:	:x Iy(3rX   c                  "    e Zd ZU ded<   ded<   y)r   r'   r   Optional[Tensor]r  Nr   rh   rX   rV   r   r     s    LrX   c                     d fd}|S )Nc                   | j                   }|j                  |j                  S | j                   j                  j                  r}t	        | t
              rt        | j                   j                        S t	        | t              rt        | j                   j                        S t        | j                   j                        S t	        | t              sJ t        |       j                         S rS   )r   r  r   	is_numberr   r   r   r   r   r   rE   r   force)r   nr   s     rV   innerzfetch_sym_proxy.<locals>.inner  s    FF::!::66;;  !W%AFFKK((Av&166;;''%%a...!!V,2244rX   )r   r~   r  zUnion[int, bool, float, Proxy]rh   )r   r0  s   ` rV   fetch_sym_proxyr1    s    5 LrX   c                     y rS   rh   r   ts     rV   fetch_object_proxyr5    r   rX   c                     y rS   rh   r3  s     rV   r5  r5    r   rX   c                     y rS   rh   r3  s     rV   r5  r5    r   rX   c                    t        || |      S rS   r   r3  s     rV   r5  r5    s     !VQ''rX   ProxyTorchDispatchModec                $   |j                   s|j                  syt        | t        j                  j
                        r&t        j                  j                  | j                  vryt        t        t        |j                  j                  j                                    }|j                  j!                  d      }t        |t        j"                        r,|j$                  t        j&                  t        j(                  fvryd|j                  d<   y)zd
    Records pointwise operators in user program (non decomposed) that were output in fp16/bf16
    Nr   Tlow_precision_pointwise_barrier)decomp_layersemulate_precision_castsr   r   _opsr>   Tag	pointwisetagsnextiterreversedr   graphnodesr   getr   r   bfloat16float16)funcr   	last_noder4  s       rV   _maybe_record_pointwise_barrierrM    s     z'I'I tUZZ22399dii/T(:#4#4#:#:#@#@ABCI5!Aa&!'': + 	8<INN45rX   c           	         g t        j                  ||f      \  }}d fdt        fd|D              st        j	                  d       t
        S t         |||      }|t
        urt        |        |S |s|t        j                  j                  j                  j                  t        j                  j                  j                  j                  t        j                  j                  j                  j                  fvr1 5   |j                  |i |}|t
        ur|cd d d        S 	 d d d        |t        j                  j                  j                   j                  u r" 5  |d   dk7  j#                         cd d d        S  j$                  }|D 	cg c]&  }	t'        |	t(        t*        f      rt-        ||	      n|	( }
}	t/        d |
D               xr t/        d |D               }t        j0                  j2                  |j4                  v r|r`|
D cg c]   }t'        |t6              r|j8                  n|" }}t        j:                  ||      \  }}t=               5   ||i |cd d d        S  j>                  r-t        j@                  t(        d ||f      rtC        d| d	      |
D cg c]   }t'        |t6              r|jD                  n|" }}|D cg c]/  }t'        |tF              r tI         j$                        |      n|1 }}t        j:                  ||      \  }}|t        j                  j                  jJ                  j                  u r.t        j                  j                  jL                  j                  } j$                  jO                  d
||| j$                  jP                  jS                  |jT                  jV                              }tY         j$                        5   ||i |}d d d        t/        d |
D              }d }dd}|t        j                  j                  jL                  j                  u rjj[                         t\        k  rSt=               5  t'        |d   t^        t(        f      sJ ta        |d                |d   jc                         }d d d        nt        j0                  jd                  |j4                  vr|r}|r{t        j@                  t(        |      r`t=               5  |
D cg c]   }t'        |t6              r|j8                  n|" }}t        j:                  ||      \  }} ||i |}d d d        nd }tg        |||       t        |        |S # 1 sw Y   QxY w# 1 sw Y   xY wc c}	w c c}w # 1 sw Y   6xY wc c}w c c}w # 1 sw Y   xY w# 1 sw Y   nxY wc c}w # 1 sw Y   xY w)Nc                    t        |       t        v xs t        | j                        }j                  r*|xs& t        |       t
        j                  j                  fv }|sj                  t        |              |S rS   )	r   HANDLED_TYPESr   r   _allow_fake_constantr   _subclassesr!   append)ra   r   r   unrecognized_typess     rV   can_handle_tensorz%proxy_call.<locals>.can_handle_tensor  sh    G}$Lq*:K:K(L**?T!W!2!2!=!= ??A%%d1g.rX   c              3  P   K   | ]  }t        |t              s |        y wrS   )r   r   )ri   ra   rU  s     rV   rj   zproxy_call.<locals>.<genexpr>  s      WAvAV #Ws   &&zEProxyTensorMode tensors without proxy had unrecognized subclasses: %sr   c              3  X   K   | ]"  }t        |t              r|j                  d u  $ y wrS   r   r   r  ri   r4  s     rV   rj   zproxy_call.<locals>.<genexpr>9  s+      
!\* JJ$
   (*c              3  <   K   | ]  }t        |t                y wrS   )r   rE   )ri   ra   s     rV   rj   zproxy_call.<locals>.<genexpr>@  s     JAJq,/Js   c                    t        |        S rS   )r#   r4  s    rV   rW   zproxy_call.<locals>.<lambda>S  s    '!*n rX   zHIt appears that you're trying to get value out of a tracing tensor with z - erroring out! It's likely that this is caused by data-dependent control flow or similar.  It may be possible to trace this with dynamic shapes; try setting tracing_mode='symbolic' in your make_fx call.r   )namec              3  X   K   | ]"  }t        |t              r|j                  d u $ y wrS   rX  rY  s     rV   rj   zproxy_call.<locals>.<genexpr>  s+      a& 	


$rZ  c                0    | j                         t        k  S rS   )r  CONSTANT_NUMEL_LIMITr]  s    rV   tensor_numel_in_limitz)proxy_call.<locals>.tensor_numel_in_limit  s    wwy000rX   r  r   )ra   r   r  r   )r4  r   r  r   )4r^   tree_flattenallnot_implemented_logr   NotImplementedmaybe_handle_decomprM  r   r   r   sizer   r   r  rv   
is_nonzeroitemr   r   r   r   r5  anyr@  data_dependent_outputrB  r   r  tree_unflattenr$   _error_on_data_dependent_opstree_all_onlyr   r   rE   r1  
lift_freshlift_fresh_copyr   rF  _target_to_stroverloadpacketrz   r   r  ra  r'   r   clonenondeterministic_seededr(  )r   rK  pre_dispatchr   r   flat_args_kwargsspecr   r   ra   f_flat_args_kwargsall_constantr4  const_flat_args_kwargs
const_argsconst_kwargsr   proxy_flat_args_kwargs
proxy_argsproxy_kwargs	proxy_outoutany_constantr  rb  rU  rT  s   `                        @@rV   
proxy_callr    s    &(#00$@d W-=WW!!S	
 JdF;A'j9 D		##		%%		%%--) 
  	//A&	 	&	
 uyy~~((000 	)GqL&&(	) 	) F "  !f&678 vq)   
'
 
 	
 	K J9IJJJ  yy&&$))3 ,& )L9

q@&" & (.'<'<&($J () 9Z8<89 9
 22v7K7K,tVn8
 Z[_Z` a( (  @R:;:a.A5 
 ( 3=Q2M	+**	+A	.ST	T   &445KTRJF uyy~~((000yy~~--55!!..$$33D4G4G4P4PQ / I 
*++	, $D#F#$0  # L H1 			..666IIK//#% 	'd1gv7Fd1gF7Aw}}H	' 	' 			)):  )>D $% 	9 ,& )L9

q@&" & (.'<'<&($J Z8<8H	9 	9 c9xG#D*5Jc	 		) 	)4&9 9d$ $T	' 	'&	9 	9ss   
V +V+V%V&V$5%V1 4V69	V;3A WW%W5#W V
V$V.;WWWW"c                  V    e Zd ZdZd
dZddZddZddZ	 d	 	 	 	 	 ddZddZ	dd	Z
y)_SymNodeDictzM
    Wrapper around a dictionary that will hash SymInts with their nodes
    c                    i | _         y rS   )sym_node_dictselfs    rV   __init__z_SymNodeDict.__init__  s
    ?ArX   c                6    || j                   |j                  <   y rS   r  r   )r  r"  r   s      rV   __setitem__z_SymNodeDict.__setitem__  s    ',388$rX   c                4    | j                   |j                     S rS   r  r  r"  s     rV   __getitem__z_SymNodeDict.__getitem__  s    !!#((++rX   c                2    |j                   | j                  v S rS   )r   r  r  s     rV   __contains__z_SymNodeDict.__contains__  s    xx4----rX   Nc                N    | j                   j                  |j                  |      S rS   )r  rH  r   )r  r"  r   s      rV   rH  z_SymNodeDict.get  s!    
 !!%%chh88rX   c                    t         rS   )NotImplementedErrorr  s    rV   __iter__z_SymNodeDict.__iter__  s    !!rX   c                ,    t        | j                        S rS   )lenr  r  s    rV   __len__z_SymNodeDict.__len__  s    4%%&&rX   r  r  )r"  r~   r   r   r  r  )r"  r~   r  r   )r"  r~   r  r   rS   )r"  r~   r   zOptional[_PySymProxyType]r  r   )r  r   )r  r   )rz   r{   r|   __doc__r  r  r  r  rH  r  r  rh   rX   rV   r  r    sJ    B-,. DH99'@9	9"'rX   r  c                      e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   dZded<   d fdZ	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZd fdZe	dd       Z
e	dd       Z
e		 	 	 	 dd       Z
ddZ
	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 d  fdZ xZS )!rA   +MutableMapping[_AnyScriptObjectType, Proxy]r   r  r   dict[sympy.Symbol, object]r   $MutableMapping[Tensor, _ProxyTensor]r   dict[OpOverload, int]torch_fn_countsFr   r   c                    t         |   d       t               | _        t	               | _        t        d t              | _        t               | _
        d | _        i | _        d| _        y )Nrh   )autowrap_modulesr   ref_typeF)superr  r9   r   r  r   r8   r7   r   r   r   torch_fn_metadatar  r   )r  r   s    rV   r  zPythonKeyTracer.__init__  sb    "-57+~%8&
" #'& "&  "$rX   c                     ||i |S rS   rh   )r  mforwardr   r   s        rV   call_modulezPythonKeyTracer.call_module  s     '''rX   c                    |S rS   rh   )r  attrattr_valparameter_proxy_caches       rV   getattrzPythonKeyTracer.getattr  s	     rX   c                   t        |t        j                  j                        rx| j                  j                         D ]  \  }}||u s| j                  d|di       c S  | j                  d      }t        | j                  ||       | j                  d|di       S t        |t              r.|j                  j                  J |j                  j                  S t        | 5  |      S )Nget_attrrh   _param_constant)r   r   nn	Parameterrootnamed_parameterscreate_nodeget_fresh_qualnamesetattrrE   r   r  r  
create_arg)r  ar/  pqualnamer   s        rV   r  zPythonKeyTracer.create_arg  s    a++,		224 C16++J2rBBC ../@AHDIIx+##J"bAA<(66??...66??"w!!$$rX   c                     y rS   rh   r  r   s     rV   unwrap_proxyzPythonKeyTracer.unwrap_proxy.      rX   c                     y rS   rh   r  s     rV   r  zPythonKeyTracer.unwrap_proxy2  r  rX   c                     y rS   rh   r  s     rV   r  zPythonKeyTracer.unwrap_proxy6  s     	rX   c                    t        |t              rt        || |d       S t        |t              rt        || |d       S t        |t              rt        || |      S |S )Nc                    | j                   S rS   r  r   s    rV   rW   z.PythonKeyTracer.unwrap_proxy.<locals>.<lambda>>  s
     rX   c                "    | j                         S rS   )r.  )r   s    rV   rW   z.PythonKeyTracer.unwrap_proxy.<locals>.<lambda>@  s    	 rX   )r   r   r   rE   r   r  s     rV   r  zPythonKeyTracer.unwrap_proxy<  sY    a !!T1.?@@<(!!T1.ABB+,!!T1--HrX   c                \   t         |   ||||||      }dd}t        |t        j                  j
                  j                  t        j                  j
                  j                  f      r@t        j                  j                  j                  ||f|      \  }	}
|	|
f|j                  d<   |S )Nc                   t        | t        j                  j                        rd| j                  vry | j                  d   }t        |t        j
                        rt        |t              sy t        | j                  d         S )Nr   )r   r   r  Noder   r   r!   r   )r   r   s     rV   map_fnz+PythonKeyTracer.create_node.<locals>.map_fnQ  s^    a/53F&&-C #u||,ZZ5Pqvve}--rX   arg_kwarg_vals)r   r   r  zOptional[_ExtractValType])r  r  r   r   _higher_order_opstriton_kernel_wrapTritonKernelWrapperFunctionalTritonKernelWrapperMutationr  r   map_aggregater   )r  kindtargetr   r   r^  	type_exprr   r  arg_inp	kwarg_inpr   s              rV   r  zPythonKeyTracer.create_nodeF  s     w"4vtYO	. ''::XX''::VV
 "'!<!<dF^V!TGY+2I*>DII&'rX   r  )
r  r.   r  zCallable[..., Any]r   ztuple[Any, ...]r   zdict[str, Any]r  r   r  strr  r$  r  zdict[str, Proxy]r  r$  )r  r$  r  fx.node.Node)r   r   r  zUnion[Proxy, Tensor])r   r~   r  zUnion[Proxy, PySymType])r   _AnyScriptObjectTyper  "Union[Proxy, _AnyScriptObjectType])r   rN   r  r$  )NN)r  r  r  r,   r   ztuple[Argument, ...]r   zdict[str, Argument]r^  zOptional[str]r  zOptional[Any]r  ztorch.fx.Node)rz   r{   r|   r   r   r  r  r  r  r   r  r  __classcell__r   s   @rV   rA   rA     s6   FF!!2288**!OT!%&(( $( 	(
 ( 
(#)BR	
%     %	+ 
  ##'     #	 
 $    !  
   rX   rA   c                &     t         d fd       }|S )Nc               3    K   ddl m} m}m} g }d } |        dkD  r2 |       }t	        |      r|}n|j                  |        |        dkD  r2t        |      D ]
  } ||        	 | |Lt        |      }|dkD  r |       }|dz  }|dkD  r|j                  |       t        |      D ]
  } ||        y y # |Lt        |      }|dkD  r |       }|dz  }|dkD  r|j                  |       t        |      D ]
  } ||        w w xY ww)Nr   )_len_torch_function_stack	_pop_moder1   r:   )torch.overridesr  r  r1   r   rS  rE  r  )r  r  r1   temp_elementsremoved_modemoder4   mode_tys          rV   context_manager_fnzB_make_temp_remove_mode_context_manager.<locals>.context_manager_fnl  sC    TT')A-;D$(#$$T* ()A- ]+ 	Dt		% 'M*ai$;DQJE ai $$\2$]3 %Dt$% (|'M*ai$;DQJE ai $$\2$]3 %Dt$% (s0   A
DD'B: +#D+D:$D
+D

D)r  z2Generator[Optional[TorchFunctionMode], None, None])r
   )r  r  s   ` rV   &_make_temp_remove_mode_context_managerr  i  s      % %@ rX   c                &   |j                  | |      }dd}|j                  |       ddlm}  ||       t	        | t
              r| j                  j                  n| j                  }t        j                  j                  |j                  ||      S )Nc                    ddl m} | j                         ry ||       ryt        | j                  j                  d      t              rt        d | j                  D              ryy)Nr:   )is_accessor_nodeTFr   c              3     K   | ]G  }t        |t        j                        r+t        |j                  j	                  d       t
               I yw)r   N)r   r  r  r   rH  rE   )ri   r  s     rV   rj   z6dispatch_trace.<locals>.impure_pred.<locals>.<genexpr>  s:      a) 166::e,l;s   AA)	symbolic_shapesr  	is_impurer   r   rH  rE   re  r   )r/  r  s     rV   impure_predz#dispatch_trace.<locals>.impure_pred  s^    5 ;;= A
 qvvzz%(,7     rX   r   )dedupe_symints)r/  zfx.Noder  r   )traceeliminate_dead_code,torch._inductor.fx_passes.dedupe_symint_usesr  r   r.   r   rz   r  _lazy_graph_module_make_graph_moduler  )r  r   concrete_argsrF  r  r  r^  s          rV   rB   rB     sq     LL}-E8 
k*K5&0v&>4>>""DMMD  33FKKMMrX   c                     t        j                        \  }t        j                         d fd       }|S )Nc                    t        j                  |       \  }}t        |      t        	      k(  sJ t               5 }t	        |t
              sJ t        	|d        d d d        dfd} 
 }t        j                  t        ||      }t        j                  t        fd|      }dfd}t        j                  t        ||      }|S # 1 sw Y   pxY w)Nrc  c                "    t        | | d       S )Nc                    | j                   S rS   r  r   s    rV   rW   zJwrap_key.<locals>.wrapped.<locals>.get_tensor_proxy_slot.<locals>.<lambda>  s
    !'' rX   r9  r4  r   s    rV   get_tensor_proxy_slotz8wrap_key.<locals>.wrapped.<locals>.get_tensor_proxy_slot  s    !!VQ0ABBrX   c                "    t        | | d       S )Nc                    | S rS   rh   r   s    rV   rW   z=wrap_key.<locals>.wrapped.<locals>.<lambda>.<locals>.<lambda>  s    q rX   r9  r  s    rV   rW   z+wrap_key.<locals>.wrapped.<locals>.<lambda>  s    q&![(Q rX   c                8    t        |       j                         S rS   )r   r.  r  s    rV   get_sym_proxy_slotz5wrap_key.<locals>.wrapped.<locals>.get_sym_proxy_slot  s    !!V,2244rX   )r4  r   r  zUnion[Tensor, Proxy])r4  r~   r  r'   )r^   rd  r  disable_proxy_modes_tracingr   r:  r(  tree_map_onlyr   r   rE   )proxies_unusedflat_proxies_proxies_specr  r  r  r  r   flat_tensorstensorsr   s           rV   wrappedzwrap_key.<locals>.wrapped  s    &,&9&9'&B#m< C$5555(* 	Xaa!7888lL4PVW	X	C k""6+@#F""QSV
	5 ""<1CSI
#	X 	Xs   "CC)r  r
  r  r  r  rQ   )r^   rd  r   wraps)r   r
  r   rw  _tensors_specr  r	  s   ```   @rV   wrap_keyr    s<     #)"5"5g">L-__Q , NrX   zOptional[object]ORIGINAL_ATENc              #     K   t         Dt        j                         r0| a | t        j                  d<   	 d  d a d t        j                  d<   y d  y # d a d t        j                  d<   w xY ww)Noriginal_aten)r  fx_tracebackhas_preserved_node_metacurrent_meta)rK  s    rV   set_original_aten_opr    sf      !E!E!G59!!/2	> M9=L%%o6 !M9=L%%o6s   0A,A A,A))A,c                  4    e Zd ZddZ	 	 d	 	 	 	 	 	 	 	 	 ddZy)TorchFunctionMetadataModec                    || _         y rS   )r   r  r   s     rV   r  z"TorchFunctionMetadataMode.__init__  s	    rX   Nc                    |xs i }|| j                   _        | j                   j                  j                  |d      dz   | j                   j                  |<    ||i |S )Nr   r:   )r   r  r  rH  r  rK  typesr   r   s        rV   __torch_function__z,TorchFunctionMetadataMode.__torch_function__  s[     2(,%,0KK,G,G,K,KDRS,TWX,X##D)T$V$$rX   r   _ProxyTracerr  r  rh   N
rK  r>   r   tuple[torch._C._TensorMeta, ...]r   tuple[object, ...]r   Optional[dict[str, object]]r  r$  rz   r{   r|   r  r  rh   rX   rV   r  r    sD     $&.2
%
% 0
% !	
%
 ,
% 

%rX   r  c                  4    e Zd ZddZ	 	 d	 	 	 	 	 	 	 	 	 ddZy)PreDispatchTorchFunctionModec                     || _         g | _        y rS   )r   enter_autocast_nodesr  s     rV   r  z%PreDispatchTorchFunctionMode.__init__	  s     :<!rX   Nc                `   |xs i }|t         v r|t        j                  j                  j                  k(  r| j
                  j                         }|f}| j                  j                  d||i       }|t        j                  j                  j                  k(  r| j
                  j                  |       |t        j                  j                  t        j                  j                  j                  t        j                  j                  j                  fv rd |j                  d<   |S  ||i |S )Nr   r   )r*   r   ampautocast_mode_exit_autocastr)  popr   r  _enter_autocastrS  _C_set_grad_enabledr   )r  rK  r  r   r   
enter_noder   s          rV   r  z/PreDispatchTorchFunctionMode.__torch_function__  s     2DD
 uyy..===!66::<
"};;**?D$KDuyy..>>>))006**		''77		''66 
 $(		% K T$V$$rX   r  r   )
rK  zUnion[OpOverload, Callable]r  r"  r   r#  r   r$  r  r$  r%  rh   rX   rV   r'  r'    sD    < $&.2%)% 0% !	%
 ,% 
%rX   r'  c                       e Zd Zed	d       Z	 	 	 d
	 	 	 	 	 	 	 	 	 	 	 d fdZe	 	 d	 	 	 	 	 	 	 	 	 dd       Zd fdZ	 	 	 	 	 	 	 	 d fdZ	e
d	d       Z	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 ddZ xZS )r:  c                     yr   rh   r  s    rV   enable_tracingz%ProxyTorchDispatchMode.enable_tracing6      rX   c                V   |r$t         j                  j                  j                  nd }t        |   |       || _        || _        || _        || _	        || _
        t         j                  j                  j                  | _        g | _        d| _        ddlm} |j$                  | _        y )Nr   )config)r   r0  DispatchKeyPreDispatchr  r  r   tracing_moderw  rQ  ro  _TorchDispatchModeKeyPROXY	_mode_keyenter_stackr=  torch._inductorr8  r>  )	r  r   r;  rw  rQ  ro  dkr8  r   s	           rV   r  zProxyTorchDispatchMode.__init__:  s     2>UXX!!--4(($8!,H) 77== DF*'-'E'E$rX   c                    t        |      5  |xs i }|t        j                  j                  fv r ||i |cd d d        S t	        | || j
                  ||      cd d d        S # 1 sw Y   y xY wrS   )r  primr   r   r  rw  r  s        rV   __torch_dispatch__z)ProxyTorchDispatchMode.__torch_dispatch__U  st     "$' 	K\rF++--T,V,		K 	K dD$*;*;T6J	K 	K 	Ks   +A#A##A,c                    t        t        j                  j                  j                        }| j
                  j                  |       t        | !         S rS   )	r2   r   r0  r<  r=  r?  rS  r  	__enter__)r  maybe_prev_proxy_moder   s     rV   rF  z ProxyTorchDispatchMode.__enter__e  sA     1%((2P2P2V2V W 56w ""rX   c                x    t         |   |||      }| j                  j                         }|t	        |       |S rS   )r  __exit__r?  r.  r1   )r  exc_type	exc_value	tracebackbmb_previous_proxy_moder   s         rV   rI  zProxyTorchDispatchMode.__exit__k  sC     GXy)< "&!1!1!5!5!7!--.rX   c                     yr   rh   )clss    rV   is_infra_modez$ProxyTorchDispatchMode.is_infra_modez  r6  rX   c                D    t        |      dk(  r2t        |d   t        t        f      rt         fd|d   D              f}nt         fd|D              } j                  j                  d||i       }t        j                  | j                        }t        ||       |S )Nr:   r   c              3     K   | ]D  }t        |t              r.t        |j                        j	                         j
                  n| F y wrS   r   rE   r   r   r.  r   ri   r  r  s     rV   rj   z8ProxyTorchDispatchMode._compute_proxy.<locals>.<genexpr>  sI        "!\2 #1dkk288:??   A
Ac              3     K   | ]D  }t        |t              r.t        |j                        j	                         j
                  n| F y wrS   rT  rU  s     rV   rj   z8ProxyTorchDispatchMode._compute_proxy.<locals>.<genexpr>  sI        a. q$++.446;;rV  r   )	r  r   rT   rZ   r   r  r  r'   r   )r  rK  r   r  n_argsn_outp_outs   `      rV   _compute_proxyz%ProxyTorchDispatchMode._compute_proxy~  s    
 t9>ja4-@  "!W	 F   	 F ''vrJ,rX   c                Z   |t         j                  k(  r@t        |d   t              r|d   dk(  r|d   S t        |d   t              r|d   dk(  r|d   S |rJ  ||i |}t        |t              r;t        | j                  | j                  |||      }t        || j                  |       |S )Nr:   r   )rK  r   r  )	operatormulr   r   rE   r   r   r[  r   )r  rK  r  r   r   r  p_out_thunks          rV   __sym_dispatch__z'ProxyTorchDispatchMode.__sym_dispatch__  s     8<<$q'3'DGqLAwDGS)d1glAw
 zD#F# c<("T00t$CK 3[9
rX   )r  r   )FFT)r   r  r;  r  rw  r   rQ  r   ro  r   r  r  r   r!  )r  r   )rJ  zOptional[type[BaseException]]rK  zOptional[BaseException]rL  zOptional[types.TracebackType]r  zOptional[bool])rK  r>   r   r#  r  r~   r  r'   )
rK  r>   r  r"  r   r#  r   dict[str, object]r  r$  )rz   r{   r|   propertyr5  r  r4   rD  rF  rI  classmethodrQ  r[  r`  r  r  s   @rV   r:  r:  4  sW     #%*-1FF F 	F
 #F '+F 
F6 
 $&.2KK 0K !	K
 ,K 
K K#/ + 1	
 
  &8?H	: 0 !	
 " 
rX   c                  l     e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   dZded<   d fdZ xZS )rK   r  r   z*MutableMapping[PySymType, _PySymProxyType]r   r  r   r  r   zOptional[OpOverload]r  r  r  Fr   r   c                    t         |   |       t        j                         | _        t               | _        i | _        t        d t              | _
        d | _        i | _        y )Nr  )r  r  weakrefr   r   r9   r   r   r8   r7   r   r  r  )r  rF  r   s     rV   r  z _GraphAppendingTracerEx.__init__  sZ    &88:57"$%8&
" "&  "rX   )rF  zfx.graph.Graphr  r  )rz   r{   r|   r   r   r  r  r  s   @rV   rK   rK     s;    FF??8822++**!OT!" "rX   rK   c                       e Zd Z	 d	 	 	 	 	 	 	 	 	 d fdZ	 	 	 	 	 	 	 	 d fdZ	 	 	 	 	 	 	 	 d fdZ	 	 	 	 	 	 	 	 d fdZd	 fdZ xZS )
rD   c                    t        |   |fi | || _        t        | j                        | _        |xs i | _        t        | j                  d      | _        y )Nreal)r;  )r  r  	new_graphrK   r   rt   r:  r  )r  modulerj  rt   r   r   s        rV   r  z!DecompositionInterpreter.__init__  sM     	*6*"-dnn=#6#<" *4;;VL	rX   c                    t         |   |||      }t        j                  | j                  j                  |      | j
                        }t        ||d | j
                         |S Nrc  )r  placeholderr  r'   rj  r   r(  r  r  r   r   r  r   r   s         rV   rn  z$DecompositionInterpreter.placeholder  sR     g!&$733F;T[[I#utDKKH
rX   c                    t         |   |||      }t        j                  | j                  j                  |      | j
                        }t        ||d | j
                         |S rm  )r  r  r  r'   rj  r   r(  ro  s         rV   r  z!DecompositionInterpreter.get_attr  sR     gvtV4008$++F#utDKKH
rX   c                     t            |||      }ddd fd} j                  j                  t        j                  ||             |S )Nc                .    | j                   j                  S rS   )r   r   r   s    rV   get_proxy_nodez7DecompositionInterpreter.output.<locals>.get_proxy_node  s    77<<rX   c                4    t        | j                  |       S rS   )r   r   )r   rs  r  s    rV   unwrapz/DecompositionInterpreter.output.<locals>.unwrap  s    !!T[[!^DDrX   )ra   r   r  r  )r   r   r  zUnion[Tensor, fx.Node])r  outputrj  r^   tree_map)r  r  r   r   r  ru  rs  r   s   `     @rV   rv  zDecompositionInterpreter.output  sF     gnVT62	 	E 	foofc:;
rX   c                    t        | j                        5  | j                  5  t        |   |i |cd d d        cd d d        S # 1 sw Y   nxY wd d d        y # 1 sw Y   y xY wrS   )rv   rt   r  r  run)r  r   r   r   s      rV   ry  zDecompositionInterpreter.run  sY     t//0 	0$)) 	07;//	0 	0 	0 	0 	0 	0 	0s!   AA	AA	AA$rS   )
rk  fx.GraphModulerj  fx.Graphrt   'Optional[Mapping[OpOverload, Callable]]r   r$  r  r  )r  r  r   r#  r   ra  r  r$  )r   r$  r   r$  r  r$  )	rz   r{   r|   r  rn  r  rv  ry  r  r  s   @rV   rD   rD     s    
 HL	MM M E	M
 M 
M!3=N	!3=N	!3=N	0 0rX   rD   c                P     t        j                  ||f      \  }d fd}||fS )Nc                F    t        j                  |       \  }} |i |S rS   )r^   rn  )	flat_argsfn_args	fn_kwargsrK  ry  s      rV   r  z-wrapper_and_args_for_make_fx.<locals>.wrapped  s*    #229dCW*	**rX   )r  zlist[object]r  rQ   )r^   rd  )rK  r   r   r  r  ry  s   `    @rV   wrapper_and_args_for_make_fxr    s/    
 ))4.9OIt+ IrX   c               #     K   t        j                         } t        j                  d       	 d  t        j                  |        y # t        j                  |        w xY wwNF)r   is_autocast_cache_enabledset_autocast_cache_enabled)	old_values    rV   disable_autocast_cacher    sF     //1I	$$U+4((3((3s   *A!A A!AA!c                      e Zd Zy)#_ModuleNotInstalledAsSubmoduleErrorNry   rh   rX   rV   r  r  &  r}   rX   r  c                      e Zd ZddZy)
_AttrProxyc                     y rS   rh   )r  basepaths      rV   reset_proxy_mappingz_AttrProxy.reset_proxy_mapping,  s    rX   N)r  r.   r  r  r  r  )rz   r{   r|   r  rh   rX   rV   r  r  +  s    rX   r  c                       e Zd ZdZd	 fdZd
dZ	 	 	 	 	 	 	 	 d fdZ	 	 	 	 	 	 d fdZ	 	 	 	 	 	 	 	 	 	 ddZddZ	d fdZ
 xZS )_ModuleStackTracera  Customized version of PythonKeyTracer that retains module stack
    information in node.meta["nn_module_stack"].

    FX symbolic trace actually does this already, but it relies on `self.root`
    being the actual module being traced. Since make_fx traces a lambda of our
    creation, things don't work properly.

    So for this version we hold onto a reference to the original module
    (scope_root) and use that to match the path. Also when we see,
            A
           / \
          B   C
           \ /
            D
    we want to record the path as A.B.D by recording only one path.
    See Note [Preserving the nn module stack metadata during export non-strict mode]  # noqa: W605
    c                   t         |           || _        d| _        i | _        | j                  j                  d      D ]N  \  }}|| j                  v r,t        j                  d| j                  |   |       d| _        @|| j                  |<   P t               | _	        t               | _
        t               | _        d| _        t        t              | _        | j                  j                  d      D ],  \  }}| j                  t!        |         j#                  |       . |  G fddt$              | _        y )NF)remove_duplicatez<Shared module found between %s and %s, AttrProxy is enabled.Tr   c                  f     e Zd ZdfdZd fdZdfdZd	 fdZed
fd       Z xZ	S )._ModuleStackTracer.__init__.<locals>.AttrProxyc                   t        |t              r|j                         }t        |t              sJ t	        |j
                  j                  | j
                  |j
                  fi       | _        |j                  | _        |j
                  j                  | j
                  _        |j
                  j                  | j
                  _	        |j                  | <   |j                  | <   y rS   )r   r  get_baser.   r   r   rz   __dict__r{   r|   proxy_pathsproxy_modules)r  r  r  r   s      rV   r  z7_ModuleStackTracer.__init__.<locals>.AttrProxy.__init__b  s    dJ/==?D!$/// "&NN++^^T^^4"
 !%,0NN,E,E).2nn.I.I+ ,0""4(-1$$T*rX   c                    t        | t              sJ t        |   |      }t        |t              s|S  |j                  |    dz   |z         S N.)r   r.   r  __getattr__r  )r  r^  r  	AttrProxyr   r   s      rV   r  z:_ModuleStackTracer.__init__.<locals>.AttrProxy.__getattr__w  sU    !$/// !7.t4!(F3#O 6+=+=d+Cc+ID+PQQrX   c                "    j                   |    S rS   )r  r  s    rV   r  z7_ModuleStackTracer.__init__.<locals>.AttrProxy.get_base  s    ++D11rX   c                ^   t        |t              rt        | t        j                  j                        rgt        j                  j	                  t        t        | j                  j                               |               } |j                  |     d|       S t        | t        j                  j                        r^t        j                  j                  t        | j                  j                               |         } |j                  |     d|       S t        | 5  |      S r  )r   slicer   r  
Sequentialr   rT   _modulesr   r  
ModuleListvaluesr  r  )r  r  r   r  r   r   s      rV   r  z:_ModuleStackTracer.__init__.<locals>.AttrProxy.__getitem__  s    c5)!$(;(;<#hh11'T]]-@-@-B(CC(HI  )1C1CD1I0J!C5.QRR#D%((*=*=>#hh11$t}}7K7K7M2Ns2ST(1C1CD1I0J!C5.QRRw*3//rX   c                   d| j                   v sJ | j                   d   }t        |t              sJ |j                         D ci c]/  \  }}||% |j                  |    dz   t        |      z         n|1 c}}S c c}}w )Nr  r  )r  r   r   r   r  r  )r  
submodulesr"  r   r  r   s       rV   r  z7_ModuleStackTracer.__init__.<locals>.AttrProxy._modules  s    !T]]222!]]:6
!*d333 '1&6&6&8 #U  , "%););D)AC)G#c()RS"#  s   4A>)r  zUnion[Module, _AttrProxy]r  r  r  r  )r^  r  r  r  )r  r.   )r  zUnion[int, slice]r  r  )r  zdict[str, AttrProxy])
rz   r{   r|   r  r  r  r  rb  r  r  )r   r  r   s   @rV   r  r  a  s,    2*	R20  rX   r  )r  r  
scope_rootenable_attr_proxysubmodule_pathsnamed_modulesr   infor   r  attr_proxy_mapr  counterr   rT   module_id_cacher   rS  r  
proxy_type)r  r  r^  r  modr  r   r   s        @@rV   r  z_ModuleStackTracer.__init__C  s*   $!&!44e4L 		/GD!D(((R((+
 *.&*.$$Q'		/ @Q?REVEXDUDW*40666N 	7ID#  C)006	7 ?	
 ?	B $rX   c                    || j                   u ryt        |t              r| j                  |   S 	 t	        j
                  | |      S # t        $ r}t        |d}~ww xY w)z
        Use tracked access path during tracing instead of the default BFS behavior.
        Still use all the possible module paths to verify the result.
         N)r  r   r  r  r(   path_of_module	NameErrorr  )r  r  r   s      rV   r  z!_ModuleStackTracer.path_of_module  s^    
 $//!c:&##C((	=((s33 	=51<	=s   A 	AAAc                n   t        |t              r&t        |t        j                        s| j                  st
        |   |||      S t        |t              r|S || j                  vr | j                  ||      | j                  |<   n| j                  |   j                  ||       | j                  |   S rS   )r   r.   r  r&   r  r  r  r  r  r  r  )r  r  r  r  r   s       rV   r  z_ModuleStackTracer.getattr  s     8V,(BNN3))7?43HIIh
+O 4...,0OOHd,KD))==hM""8,,rX   c                B   t         |   ||      }g }| j                  j                         D ]'  \  }}|| j                  v s|j                  ||f       ) dd}|D ]>  \  }}	 || j                  |       | j                  |	   }
t        |
| j                  |       @ |S )Nc                <   |j                  d      }|d d |d   }}t        | t              sJ | }|D ]4  }t        ||      s yt	        ||      }t        |t
        t        f      r4 y t        ||      syt        t	        ||      t
              syt        ||       y)Nr  FT)splitr   r.   r   r  r  delattr)r   r  atomsr  target_submodr  rk  s          rV   _delete_proxy_attrz4_ModuleStackTracer.trace.<locals>._delete_proxy_attr  s     LL%E"'*eBi-Dc6***C  !sD) c4(!#
F';< ! 3. gc=9:FC'rX   )r   r.   r  r  r  r   )r  r  r  r  r  rS  r)   )r  r  r  r   !proxy_module_names_to_be_replacedr^  rk  r  proxy_module_nameproxy_moduleactual_moduler   s              rV   r  z_ModuleStackTracer.trace  s     gmD-0 KM) II335 	ILD&+++188$H	I	8 0Q 	F+|tyy*;< ..|<M		3DE	F
 
rX   c                    ddl m} t        ||t        f      r ||i |S 	 t	        j
                  | ||||      S # t        $ r$ t        j                  d| d        ||i |cY S w xY w)zlPythonKeyTracer overrides call_module to avoid the scope handling,
        but we actually want it.
        r   )OptimizedModulez&Unable to find the path of the module z. This might be because the module was not properly registered as a submodule, which is not good practice. We will trace through the module without recording stack information.)	torch._dynamor  r   r&   r(   r  r  warningswarn)r  r  r  r   r   r  s         rV   r  z_ModuleStackTracer.call_module  s     	2 a/;78D+F++		,%%dAwfEE2 	,MM8 <J J D+F++	,s   ; *A('A(c                     yr  rh   )r  r  module_qualified_names      rV   is_leaf_modulez!_ModuleStackTracer.is_leaf_module  s    rX   c                   t        
|   |i |}|j                  dvrd|j                  vr| j                  |j                  d<   |j                  d   j                         D ]G  \  }\  }}t        |t              s||j                  dz   |j                  z   f|j                  d   |<   I |j                  dk(  r| j                  d|j                  vrx| j                  j                   d| j                  | j                      | j                  j                  j                   d| j                  j                   f|j                  d<   d|j                  vr|j                  dvrt        j                         j!                         }|r|D cg c].  }|j"                  dk(  s|j$                  j'                  d	      r|0 }	}|	D cg c]:  }|j$                  j'                  d
      s|j$                  j'                  d      s|< }	}|	rYt(        j*                  j-                  |	      }	dj/                  |	j1                               j3                         |j                  d<   |S c c}w c c}w )aF  
        Create node and add on metadata.
        Add nn_module_stack here instead of TracerBase,
        since calls to make_fx() might not want to record module stack metadata.
        Add torch_fn by looking at torch_fn_metadata and torch_fn_counts.
        Add stack_trace by filtering out forward() stack frames.
        )rn  rv  nn_module_stackr  r   torch_fnr[   stack_tracer  ztorch/__init__.pyzfx/_symbolic_trace.pyzexport/_trace.pyr  )r  r  opr   module_stackr   r   r   r{   r|   r  rz   r  r   r6   extractsummaryr^  filenameendswithrL  StackSummary	from_listrm   formatstrip)r  r   r   r   r"  fqnmod_clsuser_frame_summaryframer  r   s             rV   r  z_ModuleStackTracer.create_node  sN    w"D3F3 7733 		1/3/@/@		+,'+yy1B'C'I'I'K #^c7gt,**S073G3GG9DII/05 GG&&&2$))+ ))2231T5I5I$J`J`5a4bc))33<<=Qt?U?U?^?^>_`%DIIj! 		)dgg=V.V!2!:!:!<!D!D!F!
 "4

i/ >>223FG	   "-//0GH >>223EF	    "+"8"8"B"B;"OK/1ww{7I7I7K/L/R/R/TDIIm,1s   3I*?I/)r  r&   r  r  )r  r.   r  r  r  )r  Union[Module, Callable]r  r$  r  r{  )
r  r.   r  r   r   r#  r   ra  r  r  )r  r.   r  r  r  r   )r   r$  r   r$  r  r  )rz   r{   r|   r  r  r  r  r  r  r  r  r  r  s   @rV   r  r  0  s    $_$B= --#)-BR-	-&0+0<W0	0d,, , !	,
 ", 
,B? ?rX   r  c                      e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZe	 	 	 	 	 	 dd       ZddZe	 	 	 	 dd       Z	ddZ
ddZdd	Zy
)_MakefxTracerc                   t        |xs i       | _        | j                  j                  t        j                  j
                  j                  j                  t        j                  j                  j                         || _
        || _        || _        || _        || _        || _        d | _        t#               | _        t#               | _        d | _        t#               | _        t#               | _        y rS   )r   rt   
setdefaultr   r   r   r  r   _decompdecompositionsr;  _allow_non_fake_inputsrw  record_module_stackrQ  ro  r   r   r   proxy_function_mode	fx_tracerpython_dispatcher_modetorch_fn_metadata_mode)r  rt   r;  r  rw  r  rQ  ro  s           rV   r  z_MakefxTracer.__init__`  s     @D%2@
  	  ++IINN$$,,emm.J.J.T.T	
 ".,B#".)< *>!2N) ;?FQm M 	  59?J}# M 	#rX   c                    | j                   | j                  | j                  | j                  | j                  | j
                  gS rS   r   r   r  r  r  r  r  s    rV   _checkpoint_modesz_MakefxTracer._checkpoint_modes  s>    !!OO$$NN''''
 	
rX   c                X    || _         || _        || _        || _        || _        || _        y rS   r  )r  prev_fake_tensor_modeprev_proxy_modeprev_proxy_function_modeprev_fx_tracerprev_python_dispatcher_modeprev_torch_fn_metadata_modes          rV   _restore_modesz_MakefxTracer._restore_modes  s2     !6)#; '&A#&A#rX   c              #    K   | j                         }	 ddlm} t        |d      r)| j                  r|j
                  }t        |      | _        nt               | _        | j                  dk(  rudd l
}|j                  j                  j                  |      }|Bdd lmc m} |j#                  d      5  t%        d| j&                   |       d	      }d d d        || _        n| j                  d
k(  rdd l
}|j                  j                  j                  |      }|C |       }	dd lmc m} |j#                  d      5  t%        d| j&                  |	      }d d d        |j*                  J d       || _        n'| j                  dk(  st-        d| j                         | j/                  | j                         d   | j0                  |  y # 1 sw Y   xY w# 1 sw Y   xY w#  | j0                  |  w xY ww)Nr:   )ShapeEnv	_orig_modfaker   F)(fake_tensor_allow_unsafe_data_ptr_accessT)r   allow_non_fake_inputs	shape_envstatic_shapessymbolic)r   r  r  2shape_env should be set if tracing with 'symbolic'ri  zUnexpected tracing type: )r  r  r  r   r  r  r  r  rA   r;  r  _dynamoutilsr   torch._functorch.config
_functorchr8  patchr"   r  r   r  AssertionError_construct_modes_with_fx_tracerr  )
r  r   r   
prev_modesr  r  r   r   _configr  s
             rV   _init_modes_from_inputsz%_MakefxTracer._init_modes_from_inputs  s     ++-
4	-1q+&4+C+C[[
!3J!?!0!2  F*$#(==#6#6#G#G#M #+== PUV +937262M2M&.j*.	,( )9%""j0$#(==#6#6#G#G#M #+ (
I== PUV +938262M2M&/,( %..:HGH:(8%((F2(3D4E4E3FG  00@D,G   &  D,sO   G<BG( 3GA,G( >GA)G(  G<GG( G%!G( (G99G<c                *   t        || j                  | j                  | j                  | j                        | _        | j                  rt        |      | _        | j                  dk(  s| j                  rt               | _	        t        |      | _        y )N)rw  rQ  ro  r  )r:  r;  rw  rQ  ro  r   r'  r  r   r  r  r  )r  r  s     rV   r  z-_MakefxTracer._construct_modes_with_fx_tracer  s}    0**!%!:!:)-)J)J
 'CI'ND$ 
*d.?.?*B*DD'&?	&J#rX   c              #  &  K   | j                         }	 |j                  | _        dd}|j                  J  ||j                        | _        | j                  | j                         d   | j                  |  y #  | j                  |  w xY ww)Nc                    t        |       t        k(  r
t               S t        |       t        k(  rt        | j                        S t	        dt        |        d      )NzUnexpected tracer type: r  )r   rA   r  r  r   )parent_tracers    rV   _create_sub_fx_tracerzD_MakefxTracer._init_modes_from_parent.<locals>._create_sub_fx_tracer  sV    &/9*,,-(,>>-m.F.FGG&243F2GqI rX   )r  r  r  rA   )r  r   r  r  r  )r  r  r  r  s       rV   _init_modes_from_parentz%_MakefxTracer._init_modes_from_parent  s      ++-
	-$1$B$BD! !**6662=3J3JKDN00@D,D,s   BAA= -B=BBc           	        
 dd l 
t        j                  
fd|      }d 
fd}dd} ||      } |||      }t        j                  t
         j                        }t               5 }|j                  t         j                                j                  r|j                   j                         |j                   j                         |j                   j                         |j                   j                         |j                  |       |j                  t                      |j                  t!                       j"                  J 	 t%        t'        || j"                   j(                         j"                  t+        |            }		 d d d         j0                  d
k(  r) j                  J  j                  j2                  	_        	S # t,        $ r t/        dd  fd	        w xY w# 1 sw Y   cxY w)Nr   c                D    j                   j                  j                  S rS   )r  _symbolic_tracePH)r[   r   s    rV   rW   z,_MakefxTracer._trace_inner.<locals>.<lambda>  s    (@(@(C(C rX   c                n    ddfd}d ||d}t        j                  |j                     |       S )Nr   c                   ddl m} j                  J  |d       }t        | t              r"dz  j                  j                  | |      S t        |       t        u rzj                  dk(  rkj                  j                  J d       j                  j                  j                  j                  j                  j                  | |d       | |	      S t        | j                        r0j                  j                  j                  j                  |       S t        | t               rJ d
|  d       | S )Nr   )ConstantSourceinputr:   )sourcer  r   )positive)hintr  zScriptObject z. has been fakified. Cannot wrap_fake it again.)torch._dynamo.sourcer  r   r   r   from_tensorr   r   r;  r  create_symintnodecreate_symbolScriptObject_libraryfake_class_registrymaybe_to_fake_objr   )ra   r  r  	arg_countr  r   s      rV   inner_wrap_fakezG_MakefxTracer._trace_inner.<locals>._wrap_fake.<locals>.inner_wrap_fake  sZ    @,,888'%	{(;<a(NI00<<Qv<NN!W^(9(9Z(G--77CLKLC00::LL--77EEv F  % M    5#5#56 >>==OO--q  &' U"1#%STU  rX   c                    | S rS   rh   r   s    rV   rW   z@_MakefxTracer._trace_inner.<locals>._wrap_fake.<locals>.<lambda>=  s    ! rX   ri  r  r  )ra   r$  r  r$  )r^   rw  r;  )r   r%  wrap_fn_mapr$  r  r   s      @rV   
_wrap_fakez._MakefxTracer._trace_inner.<locals>._wrap_fake  s>    I!H $'+K
 ??;t/@/@#A4HHrX   c                    t        t        j                  |       d      r:t        j                  |       j                  j                  t        j
                  z  rt        | t        |            S | S )N__code__)r   inspectru  r+  co_flags
CO_VARARGSrr   r  )r   phss     rV   
_wrap_funcz._MakefxTracer._trace_inner.<locals>._wrap_funcC  sP    GNN1-z:>>!$--669K9KK &aS22HrX   )r   r  artifactc                     dddS )Nmake_fx_fail_partialstring)r^  encodingrh   rh   rX   rV   rW   z,_MakefxTracer._trace_inner.<locals>.<lambda>m  s     6$,) rX   c                 j     j                   j                  j                  dddd      j                  S )Nr  T)root_moduleverboseinclude_strideinclude_device)r  rF  python_codesrcr  s   rV   rW   z,_MakefxTracer._trace_inner.<locals>.<lambda>q  s8    t~~';';'G'G$* $'+'+	 (H (
 c rX   )metadata_fn
payload_fnr  )r   rN   r  rN   )r   Callable[_P, R]r/  zSequence[PHBase]r  r?  )r  r^   rw  r   r   r:  r   r   enter_contextrv   rt   r   r  r  r  r  _set_make_fx_tracerr  rB   r  rw  rZ   	Exceptionr   r;  r  )r  r   r   r/  r)  r0  rK  r   stackr4  r   s   `         @rV   _trace_innerz_MakefxTracer._trace_inner  s    	ooCTJ+	IZ	 $!S! .4[["DOO.

 [  	E	$*B*B CD$$##D$9$9: ; ;< 8 89 ; ;<
+ 6 89 3D 9:>>---"T49J9JK>>"'* 	F 
*((444//99AK)   !  % 	  	s    *C/G>AGG;;G>>Hc                x    | j                  ||      5   | j                  |g| cd d d        S # 1 sw Y   y xY wrS   )r
  rD  )r  r   r   s      rV   r  z_MakefxTracer.trace  s<    ))!T2 	/$4$$Q..	/ 	/ 	/s   09c           	        t        | j                  d| j                  | j                  | j                  | j
                  | j                        }|j                  |       5   |j                  |g| cd d d        S # 1 sw Y   y xY w)Nri  )	r  rt   r  rw  r  rQ  ro  r  rD  )r  r   r   
sub_tracers       rV   trace_subgraphz_MakefxTracer.trace_subgraph  s    "$$''$$%%--

 //5 	5*:**14t4	5 	5 	5s   A<<BN)rt   r|  r;  r  r  r   rw  r   r  r   rQ  r   ro  r   r  r  )r  z	list[Any])r  zOptional[FakeTensorMode]r  z*Union[nullcontext, ProxyTorchDispatchMode]r  z0Union[nullcontext, PreDispatchTorchFunctionMode]r  zOptional[PythonKeyTracer]r  zUnion[nullcontext, Any]r  z-Union[nullcontext, TorchFunctionMetadataMode]r  r  )r   r   r   r#  r  Generator[None, None, None])r  r  r  r  )r  r  r  rI  )r   r   r   r$  r  r&   )r   r   r   r$  r  rz  )rz   r{   r|   r  r  r  r
   r
  r  r  rD  r  rH  rh   rX   rV   r  r  _  s   &D& & !%	&
 & "& #& '+& 
&P
B7B DB #S	B
 2B &=B &SB 
B  8-8-!38-	$8- 8-tK& -*-	$- -6rh/5rX   r  zOptional[_MakefxTracer]_CURRENT_MAKE_FX_TRACERc              #  8   K   t         }	 | a d  |a y # |a w xY wwrS   )rJ  )r   prev_tracers     rV   rA  rA    s'      *K."("-+s    F)rw  r  rQ  ro  c          	     v    	 |dv sJ t        |||||||      	t        j                         d 	fd       }|S )z
    Given a function f, return a new function which when executed with valid
    arguments to f, returns an FX GraphModule representing the set of operations that
    were executed during the course of execution.
    r'  c                 *     j                   g|  S rS   )r  )r   r   make_fx_tracers    rV   r  zmake_fx.<locals>.wrapped  s    #~##A---rX   )r   r$  r  r&   )r  r   r  )
r   rt   r;  r  rw  r  rQ  ro  r  rO  s
   `        @rV   rC   rC     sW    " 7777"$N __Q. . NrX   c                 R    t         j                  j                  j                         S rS   )r   r  _python_dispatch _get_current_dispatch_mode_stackrh   rX   rV   get_torch_dispatch_modesrS    s    ;;''HHJJrX   c                     t               S rS   )rG   rh   rX   rV   rF   rF     s    rX   c                 4   t         j                  j                  t         j                  j                  j
                        } t         j                  j                  t         j                  j                  j
                        }| |J d|  d|        | xs |S )z
    Current the currently active proxy tracing mode, or None if
    we are not currently tracing.  This includes pre-dispatch proxy
    tracing.
    zpre_dispatch_mode=z, mode=)r   r?  _get_dispatch_mode_pre_dispatchr0  r<  r=  _get_dispatch_mode)pre_dispatch_moder  s     rV   rG   rG     s     

BB&&,, 88&&uxx'E'E'K'KLD!T\=	-.gdV<=1$$rX   c                    t               }|sJ t               5  g }|j                  | |||      cddd       S # 1 sw Y   yxY w)z
    Call into the currently active proxy tracing mode to do a
    SymInt/SymFloat/SymBool dispatch trace on a function that operates on
    these arguments.
    N)rG   r  r`  )rK  r   r   r  r  s        rV   rH   rH     sM     DK4 
%	& @$$T5$?@ @ @s	   9Ac                 \    t        t        j                  j                  j                        S rS   )r0   r   r0  r<  r=  rh   rX   rV   r  r    s    uxx==CCDDrX   c                   ddl m} t        v rb|j                  ddfd      rt        S | 5  | xj
                  dz  c_        t           |i |}| xj
                  dz  c_        |cd d d        S t        S # 1 sw Y   t        S xY w)Nr   )CompilerBisectoraot_eager_decomp_partitiondecompositionc                     t               S rS   )repr)r  s   rV   rW   z%maybe_handle_decomp.<locals>.<lambda>  s    48 rX   r:   )!torch._inductor.compiler_bisectorr\  rM   disable_subsystemrg  r=  )r   r  r   r   r\  r  s    `    rV   rh  rh    s     C	((--(/;K
 "! 	$$)$-b14B6BC$$)$		 	 	 s   :A88Bc                    t        | ||      \  }}t               5   t        |||      |      }ddd       |S # 1 sw Y   S xY w)a  A helper function used to get the GraphModule for the given func.

    It's expected to be used in the ProxyTensor tracing context.
    It detaches the args and kwargs from the current tracer so that the trace of
    the current graph module can be created without any side-effects.
    )rt   r;  N)r  r  rC   )rK  r   r   r;  rt   r  all_argsgms           rV   get_isolated_graphmodulerf  	  sY     5T4HGX	$	& 
W)<<

 I	 Is	   :Ac                >   ddl m} t        j                  j	                  t        j                  j
                  j                        }|rT|j                  rG ||j                  |       x}r1t        |t              sJ |       ||j                  j                  d<   yyyy)zOA helper function for setting up unbacked_bindings on the destination FX graph.r:   )compute_unbacked_bindingsunbacked_bindingsN)r  rh  r   r0  rW  r<  FAKEr  r   r'   r   r   )r  	out_proxyrh  r   symbol_to_paths        rV   r%  r%  !	  s    : ++EHH,J,J,O,OPIY((6y7J7JCPP>Pi/::/7EINN 34 Q )yrX   )rl   r?  rp   r   r  r?  )rt   r|  r  z4Generator[Mapping[OpOverload, Callable], None, None])r   r   r  r   )r   r   r   r  r   r   r  r  )r   r  r   r  r   r'   r  r  )r   r~   r   r  r   r   r  r  )r   z.Union[PySymType, _AnyScriptObjectType, Tensor]r   r  r   r$  r  r  )r   r   r   r  r  r   )r   r   r   r  r  r   )r   r   r   r  r   rO   r  zUnion[_ProxyTensor, U])
r   r   r   r  r   rO   r   zCallable[[_ProxyTensor], R]r  Union[R, U])r   r  r   r  r  r'   )r   r  r   r  r   rO   r  zUnion[Proxy, U])
r   r  r   r  r   rO   r   zCallable[[Proxy], R]r  rm  )r   r~   r   r  r  r   )r   r~   r   r  r   rN   r  zUnion[T, _PySymProxyType])
r   r~   r   r  r   rO   r   zCallable[[_PySymProxyType], R]r  rm  )
r   .Union[Tensor, _AnyScriptObjectType, PySymType]r   r  r   r$  r   r   r  r$  )r   r   r  r*  )r   r   r  r   )r   r  r   r   r  rI  )r  rI  )r   r'   r   r   r  r'   )
r   r  r   r?  r   r
  r   r  r  zThunk[R])
r  r   r   r'   r  r*  r   r  r  r  )
r&  rN   r'  r  r  r  r   r  r  rN   )r   r  r  z5Callable[[PySymType], Union[bool, int, float, Proxy]])r   r  r4  r   r  zUnion[_ProxyTensor, Tensor])r   r  r4  r  r  r  )r   r  r4  r~   r  z!Union[_PySymProxyType, PySymType])r   r  r4  rn  r  r$  )rK  r$  r   r:  r  r  )r   r:  rK  r>   rw  r   r   r#  r   ra  r  r$  )r  ztype[TorchFunctionMode]r  zCCallable[[], _GeneratorContextManager[Optional[TorchFunctionMode]]]rS   )r  r  r   r(   r  zOptional[tuple[Any, ...]]r  r&   )
r   r?  r
  r
  r   r  rw  r   r  r?  )rK  r>   r  rI  )rK  zCallable[..., R]r   r#  r   ra  r  z0tuple[Callable[[list[object]], R], list[object]])r   r  r  rI  )Nri  F)r   r   rt   r|  r;  r  r  r   rw  r   r  r   rQ  r   ro  r   r  zCallable[..., GraphModule])r  zlist[TorchDispatchMode])r  z Optional[ProxyTorchDispatchMode])rK  r?  r   r
  r   r  r  rQ   )r  z-Generator[ProxyTorchDispatchMode, None, None])
r   r:  r  r>   r   r#  r   ra  r  r$  )ri  N)rK  r   r   r#  r   ra  r;  r  rt   r|  r  r&   )r  r$  rk  r  r  r  )
__future__r   r   r,  loggingr]  rL  r   r   r  rf  collectionsr   r   collections.abcr   r   r   
contextlibr	   r
   r   r   dataclassesr   r   r   r   r   r   r   r   r   r   r   r   r   r   
torch._opstorch.fxr  torch.fx.tracebackr  torch.utils._pytreer  _pytreer^   r   r   r   torch._dispatch.pythonr   "torch._library.fake_class_registryr   torch._loggingr   torch._subclasses.fake_implsr    torch._subclasses.fake_tensorr!   r"   r#   r$   torch._subclasses.meta_utilsr%   r&   r'   r(   torch.fx.graph_moduler)   torch.fx.noder*   r+   r,   torch.fx.passes.shape_propr-   torch.nnr.   r  r/   torch.utils._python_dispatchr0   r1   r2   r3   torch.utils._statsr4   torch.utils._thunkr5   torch.utils._tracebackr6   torch.utils.weakr7   r8   r9   _backward_stater;   sym_noder<   r  r=   r   r>   torch.fx._symbolic_tracer?   torch.typesr@   __all__r  r   r   r  r   r   rC  	getLoggerrz   r   _logginggetArtifactLoggerrf  rM   r   ra  rN   rO   rP   rQ   r   null_ctx_typeregister_pytree_nodeSizerr   rv   r$  
proxy_slotrx   
no_defaultrE   r~   r   r   r   r   r   r   r   rT   rZ   r   r  r   r   r   r   r   r   rJ   rI   r   r   r  r  r  r(  r   r1  r5  r  r  rP  rM  r  r  rA   r  _disable_dynamorB   r  r  r  r  )_temp_remove_metadata_torch_function_moder'  -_temp_remove_pre_dispatch_torch_function_moder:  r   GraphAppendingTracerrK   InterpreterrD   r  r  r  r  r  r  r  rJ  rA  rC   rS  rF   rG   rH   r  rh  rf  r%  rh   rX   rV   <module>r     s
   #          0 8 8 W W !	 	 	 ; : %    ) ) $ $ ) ) ; ? + 4  7 / / . 
 @  -  % $ 4 W W *  .%/' AB&&(89 U//1AAB yy~~yy~~g!nn66xARS =? : ? CLCLt_CL[!   	JJ &	B 	>@	>9	> 	> X
	 	 \
 /x M
 
 
 
	'3<A	 
 
	(1@	 
)A	7)A)A )A 
	)AXD
 , 
	  
 
	  	 
 
	  +	
  
 
	  
 
	  	 
 
	  $	
  
 
	  
 
	  	 
 
	  .	
  
 !%		7  	
 > 	$%S##$		 %(P ,0%%%)% % %$    0	  , 5< HQ  FBFB FB/?FBIUFB	FBR 	8O$gfo.E&FF 
H%&8H0H(II
TTT '	T
 T Tn   
:* 
 
 
1' 
 
&& 
((K(( ++Z8=
=4=	=4W&W
W W 	W
 W Wt' '>qf qh$$$H$N  04)N
!)N)N -)N 	)N )NX!(2>NR@ #' &  % 1 %" -S- )$%#4 $%N 1W 1 -
F. FR"bhh;; "440r~~ 40n
"4>O5 4 4	) 	
 
l l^	q5 q5h	 48 0 7 . . DH#(	!  %!&)-!!@! ! !	! ! ! ! #'!  !HK% @  E E&  	
 6 CG

  	
 A ,FrX   