
    8hc                   ~   % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
JrJr  S SKJrJrJr  S SKJrJrJrJr  S SKJr  S SKJrJrJrJrJrJrJrJr  S SKJ r J!r!J"r"J#r#J$r$  S S	K	J%r%  S SK&r&S SK'r&S SK(J)r)  S SK*J)s  Jr+  S SK,J-s  J.r/  S S
K&J0r0J1r1J2r2  S SK3J4r4  S SK5J6r6  S SK7J8r8  S SK9J:r:  S SK;J<r<J=r=J>r>J?r?  S SK@JArA  S SK(JBrBJCrCJDrD  S SKEJFrF  S SKGJHrHJIrIJJrJ  S SKKJLrL  S SKMJNrN  S SKOJPrP  S SKQJRrRJSrSJTrTJUrU  S SKVJWrW  S SKXJYrY  S SKZJ[r[  S SK\J]r]J^r^J_r_  SSK`Jara  SSKbJcrc  \(       a   S SKdrdS SKJere  S SKfrfS S K'Jgrg  S S!KhJiri  S S"KjJkrk  / S#Qrl\S$   rm\&R                  \64ro\\&R                  \64   rp\&R                  R                  rr\&R                  R                  rs\R                  " \u5      rv\&R                  R                  \uS%5      ry0 qzS&\{S''   Sr|\" S(5      r}\" S)5      r~\!" S*5      r\" S+5      r\#" S,5      r\" \5      r\/GR                  " \&GR
                  S- S. S/ S0S19  \&GR
                  \0rSS2 jr\    SS3 j5       r\" 5       r " S4 S55      r\" 5       rS S6KjJrJr   " S7 S8\5      rSS9 jr\SS; j5       r\        SS< j5       r\        SS= j5       r        SS> jrSS? jr\Y\C   r\      SS@ j5       r\        SSA j5       r\          SSB j5       r\      SSC j5       r\        SSD j5       r\          SSE j5       r\      SSF j5       r\        SSG j5       r\          SSH j5       r\SI 4         SSJ jjrSSSL jjr\\\\p\a\SM   \SN   \\SM4   \2\\\4
      rSSSO jjr\SPSQ.     SSR jj5       r\SSS j5       r\SST j5       rSSU jr          SSV jr          SSW jr\\C\SX   \\SX4   4   r\\2\SY   \\SY4   4   r          SSZ jr\ " S[ S:5      5       r    SS\ jr\      SS] j5       r\      SS^ j5       r\      SS_ j5       r      SS` jr\2\&GRV                  GRX                  \<4r      SSb jr            SSc jr " Sd Se5      r " Sf Sg\D5      r S     SSh jjr    SSi jr\&GRh                   S       SSj jj5       r          SSk jrSqSl\{Sm'   \SSn j5       r " So Sp\P5      r\" \5      r " Sq Sr\P5      r\" \5      r " Ss Sa\U5      r " St Su\)GR|                  GR~                  5      r " Sv Sw\)GR                  5      r        SSx jr\SSy j5       r " Sz S{\5      r " S| S}5      r " S~ S\5      r " S S5      rSqS\{S'   \SS j5       r   SSKSKSKSPSKS.                   SS jjjrSS jrSS jrSS jr        SS jr\SS j5       r          SS jr  S           SS jjrSS jrg)    )annotationsN)defaultdictOrderedDict)	GeneratorMappingSequence)_GeneratorContextManagercontextmanager	ExitStacknullcontext)	dataclass)AnyCallableOptionaloverloadProtocolTYPE_CHECKINGTypeVarUnion)Concatenate	ParamSpecSelfTypeVarTupleUnpack)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)rC   _GraphAppendingTracerExnot_implementedzMapping[OpOverload, Callable]CURRENT_DECOMPOSITION_TABLETU_PR_Tsc                    [        U 5      S 4$ N)list)xss    \/var/www/fran/franai/venv/lib/python3.13/site-packages/torch/fx/experimental/proxy_tensor.py<lambda>rZ   ~   s    R$    c                    [        U 5      $ rV   )tuple)rX   _s     rY   rZ   rZ      s    %)r[   c                ~    [        U 5       VVs/ s H  u  p[        R                  " U5      U4PM     snnS 4$ s  snnf rV   )	enumeratepytreeSequenceKey)rX   ixs      rY   rZ   rZ      s5    09">&

Q
	#>%>s   $9z
torch.Size)flatten_with_keys_fnserialized_type_namec                n    SR                  S [        U5       5       5      n[        SU SU S3SU 05      $ )z*FX gets confused by varargs, de-confuse it,c              3  ,   #    U  H
  nS U 3v   M     g7f)argN ).0rc   s     rY   	<genexpr>!fake_signature.<locals>.<genexpr>   s     8<a#aS	<s   zlambda z: fn()fn)joinrangeeval)rp   nargsargnamess      rY   fake_signaturerv      s:    xx85<88H'(5
!4tRjAAr[   c              #  R   #    [         nU =(       d    0 q  [         v   Uq g ! Uq f = f7frV   )rO   )decomposition_tableold_decomposition_tables     rY   	decomposerz      s0     
 :"5";>))&=#&=#s   '  '$'c                      \ rS rSrSrg)
_NoDefault   rk   N__name__
__module____qualname____firstlineno____static_attributes__rk   r[   rY   r|   r|          r[   r|   )rG   	PySymTypec                       \ rS rSr% S\S'   Srg)_HasMeta   zdict[str, PySymType]metark   Nr   r   r   r   __annotations__r   rk   r[   rY   r   r      s    
r[   r   c                    [        U S5      (       d   S5       eSU R                  ;   =(       a    [        U R                  S   [        5      $ )Nr   z3All nodes traced with proxy_tensor should have metaval)hasattrr   
isinstancerG   )nodes    rY   is_sym_noder      s?    4  W"WW DIIL*TYYu-=|"LLr[   _ProxyTensorc                    g rV   rk   objtracerproxys      rY   set_proxy_slotr      s    TWr[   c                    g rV   rk   r   s      rY   r   r           r[   c                    g rV   rk   r   s      rY   r   r      r   r[   c                   [         R                  SU [        U 5      U5        [        U [        5      (       a&  [        U[
        5      (       d   eX!R                  U '   g [        U [        5      (       a&  [        U[        5      (       d   eX!R                  U '   g [        U [        5      (       d   [        U 5      5       eXR                  ;  a  [        R                  " [        U5      UR                  U '   SS Kn[        U R"                  R$                  UR&                  5      (       a#  X!R(                  U R"                  R$                  '   g g g )Nzset_proxy_slot %s (%s) %sr   )logdebugidr   r   r   tensor_tracker_AnyScriptObjectr)   script_object_trackerrG   typesymnode_trackertypingcast_PySymProxyTypesympyr   exprSymbolsympy_expr_tracker)r   r   r   r   s       rY   r   r      s    
 II)33?#v %....%*c"	C*	,	,%'''',1$$S) #|,,7d3i7,,,,*0++ou*MF""3' #((--66;@))#((--8 7# -r[   c                    [        U [        [        45      (       d   [        U 5      5       e[	        [        XSS 5      5      $ )NFc                    gNTrk   )r^   s    rY   rZ    has_proxy_slot.<locals>.<lambda>   s    Tr[   )r   r   r>   r   boolget_proxy_slotr   r   s     rY   has_proxy_slotr      s7    cFG,--8tCy8-sE>BCCr[   c                    g rV   rk   r   s     rY   r   r      s     r[   c                    g rV   rk   r   r   defaults      rY   r   r     s    
 !r[   c                    g rV   rk   r   r   r   	transforms       rY   r   r          r[   c                    g rV   rk   r   s     rY   r   r     s     r[   c                    g rV   rk   r   s      rY   r   r     s    
 r[   c                    g rV   rk   r   s       rY   r   r   #  r   r[   c                    g rV   rk   r   s     rY   r   r   ,  s     r[   c                    g rV   rk   r   s      rY   r   r   3  s    
 !$r[   c                    g rV   rk   r   s       rY   r   r   ;  r   r[   c                    U $ rV   rk   rd   s    rY   rZ   rZ   K  s    Ar[   c                2   [        U [        5      (       a  UR                  nOS[        U [        5      (       a  UR                  nO1[        U [
        5      (       d   [        U 5      5       eUR                  nX;  a  [        U [
        5      (       aH  U R                  R                  UR                  ;   a$  UR                  U R                  R                     nO7[        U[        5      (       a  [        U  S[        U 5       SU 35      eU$ X@   nU" U5      nU$ )Nz (z)is not tracked with proxy for )r   r   r   r   r   rG   r   r   r   r   r   r|   RuntimeErrorr   )r   r   r   r   trackervalueress          rY   r   r   G  s     #v''	C)	*	*..#|,,7d3i7,((
c<((SXX]]f>W>W-W--chhmm<E':.."e2bgY&EfXN  N
E
CJr[   Fc                x    [        U [        5      (       a  [        U R                  X5      $ U R	                  5       $ rV   )r   r#   r"   	fake_modedetach)r   include_reals     rY   snapshot_faker   f  s.     #z""3==#<<zz|r[   _ExtractValType)r   .c                   [        U 5      (       a	  [        XS9$ [        U [        5      (       a  U $ [        U [        5      (       a  U $ [        U [
        5      (       a  U $ [        U [        [        45      (       a+  U R                  U  Vs/ s H  n[        U5      PM     sn5      $ [        U [        5      (       a/  U R                  5        VVs0 s H  u  p4U[        U5      _M     snn$ [        U [        5      (       a  U R                  (       dm  SSKJn  U" U 5      nU(       d	  [!        SS9nU   ["        R$                  " U R&                  U R)                  5       U R*                  U R,                  S9sS S S 5        $ g [        U [.        [0        [2        45      (       a  U $ U c  g [4        R6                  " U 5        g s  snf s  snnf ! , (       d  f       N0= f)Nr   r   )detect_fake_modeT)allow_fallback_kernels)devicedtype)r%   r   r   rG   r   r=   rW   r]   	__class__extract_valdictitemsr   	is_sparsetorch._guardsr   r$   torchempty_stridedshapestrider   r   intfloatr   typing_extensionsassert_never)r   r   rd   kvr   fake_tensor_modes          rY   r   r     s^   s||S<<	C	&	&
	C)	*	*
	C	'	'
	C$	'	'}}c:ck!nc:;;	C		.1iik:kda;q>!k::	C	 	 }} 7/4##1#N !**IIszz|CJJcii "!
 	C#ud+	,	,
	""3'7 ;: "!s   	F:F?/AG
GTenablec             #  \   #    U R                   nXl          Sv   X l         g! X l         f = f7f)ac  
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      rY   _enable_thunkifyr     s,      
 
 C#%!$s   ,! ,),c               #     #    [        5       n U b"  [        U R                  SS9   Sv   SSS5        gSv   g! , (       d  f       g= f7f)aG  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   rI   r   r   
proxy_modes    rY   rL   rL     s=       !Jj//> ?> 	 ?>s   "A7A
AAc               #     #    [        5       n U b#  [        U R                  5         Sv   SSS5        gSv   g! , (       d  f       g= f7f)a  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    rY   rK   rK     s;       !Jj//0 10 	 10s   #A	8A	
AA	c                   [        XR                  R                  S:H  S9U R                  R                  S'   [	        U R
                  5         [        U5      (       a#  [        U5      U R                  R                  S'   OH[        U[        5      (       a3  UR                  (       d"  [        U5      U R                  R                  S'   S S S 5        U $ ! , (       d  f       U $ = f)Nplaceholderr   r   tensor_meta)r   r   opr   r   r   r%   r/   r   r   r   )r   r   s     rY   set_metar     s    (::==M9EJJOOE 
%,,	'3<<-Ec-JEJJOOM*V$$S]]-Ec-JEJJOOM* 
( L 
(	' Ls   A<C
C"c                   ^ U R                   (       a#  [        [        R                  " U/UQ70 UD65      $ U" U0 UD6m[        U4S j5      $ )zH
Delays computation of f until it's called again
Also caches the result
c                    > T $ rV   rk   )rs   rY   rZ   thunkify.<locals>.<lambda>  s    Qr[   )r   r7   	functoolspartial)r   fargskwargsr   s       @rY   thunkifyr     sH     Y&&q:4:6:;;tvYr[   c                 ^^           SU4S jjn[        U R                  5       H  u  pVU" UUU4S jU5        M     [        U 5      (       d1  [        U R                  5       5       H  u  pVU" UUU4S jU5        M     U" U R	                  5       UU4S j5        [        U 5      (       d  U" U R                  5       UU4S j5        [        U T[        TU5      5        g )Nc           
        > [        U5      (       d   e[        U [        5      (       a0  [        T5         [	        U T[        TX/UQ70 UD65        S S S 5        g g ! , (       d  f       g = frV   )callabler   r   r   r   r   )outer_sproxy_callabler   r   r   s       rY   try_set_proxy_slot(track_tensor.<locals>.try_set_proxy_slot  sa     ''''gv&&!&)V^NtNvN *) '))s   A
A(c                   > [        TR                  S[        R                  R                  R
                  R                  TU40 5      U 5      $ Ncall_function)r   create_proxyr   opsatensym_sizer   rd   rc   r   r   s     rY   rZ   track_tensor.<locals>.<lambda>  s>    ###UYY^^%<%<%@%@5!*b 	r[   c                   > [        TR                  S[        R                  R                  R
                  R                  TU40 5      U 5      $ r  )r   r
  r   r  r  
sym_strider   r  s     rY   rZ   r  '  s@    X''')B)B)F)FPQ
TV 	r[   c                   > [        TR                  S[        R                  R                  R
                  R                  T40 5      U 5      $ r  )r   r
  r   r  r  	sym_numelr   rd   r   r   s    rY   rZ   r  2  s<    (!9!9!A!AE8R 	
r[   c                   > [        TR                  S[        R                  R                  R
                  R                  T40 5      U 5      $ r  )r   r
  r   r  r  sym_storage_offsetr   r  s    rY   rZ   r  <  s?    h###IINN55==H	 r[   )
r  rB   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  rc   ss    ` `   rY   track_tensorr      s    C  	
 
( &,,' 		
 (   fmmo.DA 	 / 	
   !!#	
 66<x#@Ar[   _NestedProxys_NestedTensorsc               T   ^^ [        X5                SUU4S jjmT" XU5        U $ )Nc           	     D  >^ [        U [        5      (       aJ  [        T[        5      (       d   eUb  [        U[        5      (       d   e[        U TTUS9  [	        TU 5        g [        U [
        5      (       a?  [        T[        5      (       d   e[	        TU 5        [        U T[        TU4S j5      5        g [        U [        5      (       a1  [        T[        5      (       d   e[        U TT5        [	        TU 5        g [        U [        [        45      (       a^  [        T[        R                  5      (       a  [	        TU 5              SS jn[        U 5       H  u  pET	" UTU   U" X$5      5        M     g [        U [        5      (       aW  Ub   e[        T[        R                  5      (       a  [	        TU 5        U R                  5        H  u  pgT	" UTU   S 5        M     g [        U [        5      (       a+  [        T[        5      (       d   e[	        TU 5        TU l        g g )N)r   r  c                    > T $ rV   rk   r   s   rY   rZ   <track_tensor_tree.<locals>.wrap_with_proxy.<locals>.<lambda>s  s    ur[   c                L    U c  g [        U [        [        45      (       d   eX   $ rV   )r   rW   r]   )cidxs     rY   get_constant@track_tensor_tree.<locals>.wrap_with_proxy.<locals>.get_constant}  s*     9%a$77776Mr[   )r)  Optional[_NestedTensors]r*  r   r  r-  )r   r   r)   r   r   rG   r   r   r   r]   rW   fxr`   r   r   r=   r   )
er   r  r+  r*  eekeyr   r   wrap_with_proxys
    `      rY   r2  *track_tensor_tree.<locals>.wrap_with_proxyg  s    a  eU++++#z(F'C'CCCE&8DUA<((eU++++UA1fhv}&EF+,,eU++++1fe,UAE4=))%**""+"25")" %Q<  E#JX0KL (
 4   ###%**"GGIU3Z6 & =))eU++++UAAG r[   )r/  objectr   r!  r  r-  r  r  )_set_unbacked_bindings)	inner_res	proxy_resr  r   r2  s      `@rY   track_tensor_treer8  Q  sJ    ( 90::':3K:	: :x I(3r[   c                  *    \ rS rSr% S\S'   S\S'   Srg)r   i  r)   r   Optional[Tensor]r  rk   Nr   rk   r[   rY   r   r     s    Lr[   c                   ^  SU 4S jjnU$ )Nc                  > U R                   nUR                  b  UR                  $ U R                   R                  R                  (       a  [	        U [
        5      (       a  [        U R                   R                  5      $ [	        U [        5      (       a  [        U R                   R                  5      $ [        U R                   R                  5      $ [	        U [        5      (       d   e[        U T5      R                  5       $ rV   )r   r  r   	is_numberr   r   r   r   r   r   rG   r   force)r/  nr   s     rY   innerfetch_sym_proxy.<locals>.inner  s    FF::!::66;;  !W%%AFFKK((Av&&166;;''%%a....!!V,2244r[   )r/  r   r  zUnion[int, bool, float, Proxy]rk   )r   r@  s   ` rY   fetch_sym_proxyrB    s    5 Lr[   c                    g rV   rk   r   ts     rY   fetch_object_proxyrF    s     #&r[   c                    g rV   rk   rD  s     rY   rF  rF    s     *-r[   c                    g rV   rk   rD  s     rY   rF  rF    s     ),r[   c                    [        XU5      $ rV   r   rD  s     rY   rF  rF    s     !Q''r[   ProxyTorchDispatchModec                T   UR                   (       d  UR                  (       d  g[        U [        R                  R
                  5      (       a(  [        R                  R                  U R                  ;  a  g[        [        [        UR                  R                  R                  5      5      5      nUR                  R!                  S5      n[        U[        R"                  5      (       a.  UR$                  [        R&                  [        R(                  4;  a  gSUR                  S'   g)z\
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_noderE  s       rY   _maybe_record_pointwise_barrierr^    s     z'I'I tUZZ223399dii/T(:#4#4#:#:#@#@ABCI5!Aa&&!'': + 	8<INN45r[   c           	     0  ^ ^^ / m[         R                  " X445      u  pVSU U4S jjm[        U4S jU 5       5      (       d  [        R	                  ST5        [
        $ [        T XU5      nU[
        La  [        UT 5        U$ U(       d  U[        R                  R                  R                  R                  [        R                  R                  R                  R                  [        R                  R                  R                  R                  4;  a2  T    UR                  " U0 UD6nU[
        La  UsS S S 5        $  S S S 5        U[        R                  R                  R                   R                  L aN  T    [        R"                  " US   R%                  5       S:H  S 5        US   S:g  R'                  5       sS S S 5        $ T R(                  nU V	s/ s H+  n	[+        U	[,        [.        45      (       a  [1        X5      OU	PM-     n
n	[3        S U
 5       5      (       + =(       a    [3        S U 5       5      (       + n[        R4                  R6                  UR8                  ;   a  U(       ag  U
 Vs/ s H&  n[+        U[:        5      (       a  UR<                  OUPM(     nn[         R>                  " X5      u  p[A        5          U" U0 UD6sS S S 5        $ T RB                  (       a2  [         RD                  " [,        S	 X445      (       a  [G        S
U S35      eU
 Vs/ s H&  n[+        U[:        5      (       a  URH                  OUPM(     nnU Vs/ s H5  n[+        U[J        5      (       a  [M        T R(                  5      " U5      OUPM7     nn[         R>                  " UU5      u  nnU[        R                  R                  RN                  R                  L a.  [        R                  R                  RP                  R                  nT R(                  RS                  SUUUT R(                  RT                  RW                  URX                  RZ                  5      S9n[]        T R(                  5         U" U0 UD6nS S S 5        [3        S U
 5       5      nS nSS jnU[        R                  R                  RP                  R                  L ap  WR%                  5       [^        ::  aX  [A        5          [+        US   [`        [,        45      (       d   [c        US   5      5       eUS   Re                  5       nS S S 5        O[        R4                  Rf                  UR8                  ;  a  U(       a  U(       a  [         RD                  " [,        UW5      (       ag  [A        5          U
 Vs/ s H&  n[+        U[:        5      (       a  UR<                  OUPM(     nn[         R>                  " X5      u  pU" U0 UD6nS S S 5        OS n[i        WUUUS9  [        UT 5        U$ ! , (       d  f       GN= f! , (       d  f       GNo= fs  sn	f s  snf ! , (       d  f       GN|= fs  snf s  snf ! , (       d  f       GN= f! , (       d  f       N= fs  snf ! , (       d  f       N= f)Nc                *  > [        U 5      [        ;   =(       d    [        U TR                  5      nTR                  (       a0  U=(       d'    [        U 5      [
        R                  R                  4;   nU(       d  TR                  [        U 5      5        U$ rV   )	r   HANDLED_TYPESr   r   _allow_fake_constantr   _subclassesr#   append)rd   r   r   unrecognized_typess     rY   can_handle_tensor%proxy_call.<locals>.can_handle_tensor  sh    G}$Lq*:K:K(L**?T!W!2!2!=!= ??A%%d1g.r[   c              3  b   >#    U  H$  n[        U[        5      (       d  M  T" U5      v   M&     g 7frV   )r   r   )rl   rd   rf  s     rY   rm   proxy_call.<locals>.<genexpr>  s(     W-=AvAV# ##-=s   //zEProxyTensorMode tensors without proxy had unrecognized subclasses: %sr   r<   c                     g)Nz=Boolean value of Tensor with more than one value is ambiguousrk   rk   r[   rY   rZ   proxy_call.<locals>.<lambda>'  s    Wr[   c              3  l   #    U  H*  n[        U[        5      (       d  M  UR                  S L v   M,     g 7frV   r   r   r  rl   rE  s     rY   rm   ri  9  s,      
'!\* AJJ$'   44c              3  B   #    U  H  n[        U[        5      v   M     g 7frV   )r   rG   )rl   rd   s     rY   rm   ri  @  s     J9IAJq,//9Is   c                "    [        U 5      (       + $ rV   )r%   rE  s    rY   rZ   rk  S  s
    '!*nr[   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  l   #    U  H*  n[        U[        5      (       d  M  UR                  S Lv   M,     g 7frV   rm  rn  s     rY   rm   ri    s,      #Aa& 	

$#ro  c                0    U R                  5       [        :*  $ rV   )r  CONSTANT_NUMEL_LIMITrr  s    rY   tensor_numel_in_limit)proxy_call.<locals>.tensor_numel_in_limit  s    wwy000r[   r  r   )rd   r   r  r   )rE  r   r  r   )5ra   tree_flattenallnot_implemented_logr   NotImplementedmaybe_handle_decompr^  r   r  r  sizer   r   r  rz   
is_nonzero_checkr  itemr   r   r   r   rF  anyrQ  data_dependent_outputrS  r   r  tree_unflattenr&   _error_on_data_dependent_opstree_all_onlyr   r   rG   rB  
lift_freshlift_fresh_copyr
  rW  _target_to_stroverloadpacketr   r   rv  r)   r   clonenondeterministic_seededr8  )r   r\  pre_dispatchr   r   flat_args_kwargsspecr   r   rd   f_flat_args_kwargsall_constantrE  const_flat_args_kwargs
const_argsconst_kwargsr/  proxy_flat_args_kwargs
proxy_argsproxy_kwargs	proxy_outoutany_constantr  rw  rf  re  s   `                        @@rY   
proxy_callr    s    &(#00$@  W-=WWW!!S	
 JF;A'j9 D		##		%%		%%--) 
 //A& Z& 
 uyy~~((000LLQ1$W GqL&&( Z F " "A !f&6788 v) "    
'
 
 	
 	K J9IJJJ  yy&&$))3 ,&+A )L99

q@+ # & (.'<'<&($J ()Z8<8 *)
 22v7K7K,tn8
 8
 Z[_Z` a( (  @R?Q!:a..A5?Q  
 ('A 3=Q2M2M**	+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7Fd1gF7Aw}}H &% 			)):  )>DD $% ,&+A )L99

q@+ # & (.'<'<&($J Z8<8H &% c9xG#D*5Jk Z Z4& *)d 
-	,T &%& &%st   X;AX'2X93-X>Y-Y<Y0	Y-AY1Z!-Z"Z
X$'
X6
Y
Y.1
Y?Z
Zc                  n    \ rS rSrSrSS jrSS jrSS jrSS jr S     SS jjr	SS	 jr
SS
 jrSrg)_SymNodeDicti  zE
Wrapper around a dictionary that will hash SymInts with their nodes
c                    0 U l         g rV   sym_node_dictselfs    rY   __init___SymNodeDict.__init__  s
    ?Ar[   c                4    X R                   UR                  '   g rV   r  r   )r  r1  r   s      rY   __setitem___SymNodeDict.__setitem__  s    ',388$r[   c                4    U R                   UR                     $ rV   r  r  r1  s     rY   __getitem___SymNodeDict.__getitem__  s    !!#((++r[   c                4    UR                   U R                  ;   $ rV   )r   r  r  s     rY   __contains___SymNodeDict.__contains__  s    xx4----r[   Nc                N    U R                   R                  UR                  U5      $ rV   )r  rY  r   )r  r1  r   s      rY   rY  _SymNodeDict.get  s!    
 !!%%chh88r[   c                    [         erV   )NotImplementedErrorr  s    rY   __iter___SymNodeDict.__iter__  s    !!r[   c                ,    [        U R                  5      $ rV   )lenr  r  s    rY   __len___SymNodeDict.__len__  s    4%%&&r[   r  r  r  )r1  r   r   r   r  r  )r1  r   r  r   )r1  r   r  r   rV   )r1  r   r   zOptional[_PySymProxyType]r  r   )r  r   )r  r   )r   r   r   r   __doc__r  r  r  r  rY  r  r  r   rk   r[   rY   r  r    sJ    B-,. DH99'@9	9"'r[   r  c                  D  ^  \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
\S'   SrS\S'   SrS\S'   SU 4S jjr          SS jr        SS jr	SU 4S jjr
\SS j5       r\SS j5       r\    S S j5       rS!S jr  S"             S#U 4S jjjrSrU =r$ )$rC   i  +MutableMapping[_AnyScriptObjectType, Proxy]r   r  r   dict[sympy.Symbol, object]r   $MutableMapping[Tensor, _ProxyTensor]r   dict[OpOverload, int]torch_fn_countsFr   r   stack_tracec                   > [         TU ]  SS9  [        5       U l        [	        5       U l        [        S [        S9U l        [        5       U l
        S U l        0 U l        SU l        g )Nrk   )autowrap_modulesr   ref_typeF)superr  r;   r   r  r   r:   r9   r   r   r   torch_fn_metadatar  r   )r  r   s    rY   r  PythonKeyTracer.__init__  sb    "-57+~%8&
" #'& "&  "$r[   c                    U" U0 UD6$ rV   rk   )r  mforwardr   r   s        rY   call_modulePythonKeyTracer.call_module  s     '''r[   c                    U$ rV   rk   )r  attrattr_valparameter_proxy_caches       rY   getattrPythonKeyTracer.getattr  s	     r[   c                  > [        U[        R                  R                  5      (       ax  U R                  R                  5        H  u  p#XL d  M  U R                  SUS0 5      s  $    U R                  S5      n[        U R                  XA5        U R                  SUS0 5      $ [        U[        5      (       a/  UR                  R                  c   eUR                  R                  $ [        TU ]5  U5      $ )Nget_attrrk   _param_constant)r   r   nn	Parameterrootnamed_parameterscreate_nodeget_fresh_qualnamesetattrrG   r   r  r  
create_arg)r  ar?  pqualnamer   s        rY   r  PythonKeyTracer.create_arg   s    a++,,		2246++J2rBB 5 ../@AHDIIx+##J"bAA<((66??...66??"w!!$$r[   c                    g rV   rk   r  r/  s     rY   unwrap_proxyPythonKeyTracer.unwrap_proxy/  s    ?Br[   c                    g rV   rk   r  s     rY   r  r  2  s    EHr[   c                    g rV   rk   r  s     rY   r  r  5  s     .1r[   c                    [        U[        5      (       a  [        XUS 5      $ [        U[        5      (       a  [        XUS 5      $ [        U[        5      (       a  [        XU5      $ U$ )Nc                    U R                   $ rV   r&  r   s    rY   rZ   .PythonKeyTracer.unwrap_proxy.<locals>.<lambda><  s    r[   c                "    U R                  5       $ rV   )r>  )r/  s    rY   rZ   r  >  s
    	r[   )r   r   r   rG   r   r  s     rY   r  r  :  s\    a  !!1.?@@<((!!1.ABB+,,!!1--Hr[   c                n  > [         TU ]  XX4XV5      nU R                  (       Ga$  SUR                  ;  Ga  UR                  S;  Ga  [
        R                  " 5       R                  5       nU(       a  U V	s/ s H7  n	U	R                  S:X  d"  U	R                  R                  S5      (       d  M5  U	PM9     n
n	U
 V	s/ s H'  n	U	R                  R                  S5      (       a  M%  U	PM)     n
n	U
(       aY  [        R                  R                  U
5      n
SR                  U
R                  5       5      R!                  5       UR                  S'   US:X  aw  [#        U[$        5      (       d   e['        U R(                  U5      n[#        U[*        R,                  5      (       a+  [/        5          [1        U5      UR                  S'   S S S 5        SS	 jn[3        X#U45      (       a=  [*        R4                  R6                  R9                  X44U5      u  pX4UR                  S
'   U$ s  sn	f s  sn	f ! , (       d  f       Nn= f)Nr  r   outputr  ztorch/__init__.py)zfx/_symbolic_trace.pyzexport/_trace.py r  r   c                .   [        U [        R                  R                  5      (       a  SU R                  ;  a  g U R                  S   n[        U[        R
                  5      (       a  [        U[        5      (       d  g [        U R                  S   5      $ )Nr   )r   r   r.  Noder   r   r#   r   )r   r   s     rY   map_fn+PythonKeyTracer.create_node.<locals>.map_fnw  sg    a//53F&&-C #u||,,ZZ5P5Pqvve}--r[   eager_input_vals)r   r   r  zOptional[_ExtractValType])r  r  r  r   r   r8   extractsummaryrs  filenameendswith	tracebackStackSummary	from_listrq   formatstripr   strr  r  r   r   disable_proxy_modes_tracingr   _should_save_eager_input_valsr.  r   map_aggregate)r  kindtargetr   r   rs  	type_exprr   user_frame_summaryframer  r  r  arg_inp	kwarg_inpr   s                  rY   r  PythonKeyTracer.create_nodeD  s    w"4tO TYY.88!2!:!:!<!D!D!F!
 "4!3

i/ >>223FG	 !3   "-!, >>22E !,    "+"8"8"B"B;"OK/1ww{7I7I7K/L/R/R/TDIIm,:fc****499f-D$--02'24'8DIIe$ 3	. )@@ "'!<!<d^V!TG-4,@DII()c" 32s$   54H-H9$H!!H!%H&&
H4)r   r   r   r   r   r  r  r  )
r  r0   r  zCallable[..., Any]r   ztuple[Any, ...]r   zdict[str, Any]r  r   r  r  r  r4  r  zdict[str, Proxy]r  r4  )r  r4  r  fx.node.Node)r/  r   r  zUnion[Proxy, Tensor])r/  r   r  zUnion[Proxy, PySymType])r/  _AnyScriptObjectTyper  "Union[Proxy, _AnyScriptObjectType])r/  rP   r  r4  )NN)r  r  r  r.   r   ztuple[Argument, ...]r   zdict[str, Argument]rs  zOptional[str]r  zOptional[Any]r  ztorch.fx.Node)r   r   r   r   r   r   r  r  r  r  r  r   r  r  r   __classcell__r   s   @rY   rC   rC     s=   FF!!2288**!OT!K%&(( $( 	(
 ( 
(#)BR	
% B BH H1%1	+1 1  ##'FF F #	F
 $F F !F 
F Fr[   rC   c                   SSK Jn  [        U 5      (       d  g[        U [        R
                  R                  R                  [        R
                  R                  R                  U45      (       a  gUb  U [        R                  R                  R                  L d'  U [        R                  R                  R                  L a\  US   n[        US   [        R                  R                  [        R                  R                  45      (       d   e[!        US   S 5      $ U [        R                  R                  R"                  L a  g[        U [        R                  R                  5      (       a/  [$        R&                  " [         U5      (       a  [)        SU  S35      e[        U [        R                  R                  5      (       a3  SSKJn  U" U 5      [        R.                  R0                  R2                  :H  $ g)Nr   )InvokeSubgraphHOPFTzNYI: The HOP z has an input that is an OpOverload that needs exact strides. We probably need special logic to propagate the FakeTensor vals. Please file an issue.)get_layout_constraint_tag)'torch._higher_order_ops.invoke_subgraphr  r  r   r   _higher_order_opstriton_kernel_wrapTritonKernelWrapperFunctionalTritonKernelWrapperMutationr  higher_orderauto_functionalizedauto_functionalized_v2rP  r@   HigherOrderOperatorr  with_effectsra   tree_anyr   torch._library.utilsr  _CrQ  needs_exact_strides)r  args_kwargsr  r   r  s        rY   r  r    s    JF##66TT##66RR	
  %))((<<<UYY++BBB1~Gejj++UZZ-K-KL
 
 	
 
 -T!Wd;;''444 &%**8899??8+FFx (G H 
 &%**//00B(0EHHLL4T4TTTr[   c                *   ^  [         SU 4S jj5       nU$ )Nc               3  J  >#    SSK Jn JnJn  / nS nU " 5       S:  a9  U" 5       n[	        UT5      (       a  UnOUR                  U5        U " 5       S:  a  M9  [        U5       H  nU" U5        M      Uv   UbQ  [        U5      nUS:  a  U" 5       nUS-  nUS:  a  M  UR                  U5        [        U5       H  nU" U5        M     g g ! UbQ  [        U5      nUS:  a  U" 5       nUS-  nUS:  a  M  UR                  U5        [        U5       H  nU" U5        M     f f = f7f)Nr   )_len_torch_function_stack	_pop_moder3   r<   )torch.overridesr'  r(  r3   r   rd  rV  r  )r'  r(  r3   temp_elementsremoved_modemoder6   mode_tys          rY   context_manager_fnB_make_temp_remove_mode_context_manager.<locals>.context_manager_fn  s6    TT')A-;D$((#$$T* ()A- ]+Dt ,	% 'M*ai$;DQJE ai $$\2$]3Dt$ 4 (|'M*ai$;DQJE ai $$\2$]3Dt$ 4 (s0   AD#D#1C
 5&D#-D#
'D 3-D  D#)r  z2Generator[Optional[TorchFunctionMode], None, None])r
   )r-  r.  s   ` rY   &_make_temp_remove_mode_context_managerr0    s      % %@ r[   c                .   UR                  X5      nSS jnUR                  U5        SSKJn  U" U5        [	        U [
        5      (       a  U R                  R                  OU R                  n[        R                  R                  UR                  X65      $ )Nc                    SSK Jn  U R                  5       (       a  gU" U 5      (       a  g[        U R                  R                  S5      [        5      (       a"  [        S U R                   5       5      (       a  gg)Nr<   )is_accessor_nodeTFr   c              3     #    U  HO  n[        U[        R                  5      (       d  M$  [        UR                  R	                  S 5      [
        5      v   MQ     g7f)r   N)r   r.  r  r   rY  rG   )rl   r  s     rY   rm   6dispatch_trace.<locals>.impure_pred.<locals>.<genexpr>  s>      Aa) <
166::e,l;;s
   #A0A)	symbolic_shapesr3  	is_impurer   r   rY  rG   r{  r   )r?  r3  s     rY   impure_pred#dispatch_trace.<locals>.impure_pred  sk    5 ;;== A
 qvvzz%(,77      r[   r   )dedupe_symints)r?  zfx.Noder  r   )traceeliminate_dead_code,torch._inductor.fx_passes.dedupe_symint_usesr:  r   r0   r   r   r.  _lazy_graph_module_make_graph_moduler  )r  r   concrete_argsrW  r8  r:  rs  s          rY   rD   rD     sp     LL-E8 
k*K5&0v&>&>4>>""DMMD  33FKKMMr[   c                   ^ ^^^ [         R                  " T5      u  mn[        R                  " T 5      SU UUU4S jj5       nU$ )Nc                   > [         R                  " U 5      u  p#[        U5      [        T	5      :X  d   e[        5        n[	        U[
        5      (       d   e[        T	US TS9  S S S 5        SU4S jjnT" T
6 n[         R                  " [        XV5      n[         R                  " [        U4S jU5      nSU4S jjn[         R                  " [        Xv5      nU$ ! , (       d  f       N{= f)Nry  c                "   > [        U TU S 5      $ )Nc                    U R                   $ rV   r&  r   s    rY   rZ   Jwrap_key.<locals>.wrapped.<locals>.get_tensor_proxy_slot.<locals>.<lambda>  s    !''r[   rJ  rE  r   s    rY   get_tensor_proxy_slot8wrap_key.<locals>.wrapped.<locals>.get_tensor_proxy_slot  s    !!VQ0ABBr[   c                "   > [        U TU S 5      $ )Nc                    U $ rV   rk   r   s    rY   rZ   =wrap_key.<locals>.wrapped.<locals>.<lambda>.<locals>.<lambda>#  s    qr[   rJ  rF  s    rY   rZ   +wrap_key.<locals>.wrapped.<locals>.<lambda>#  s    q&![(Qr[   c                8   > [        U T5      R                  5       $ rV   )r   r>  rF  s    rY   get_sym_proxy_slot5wrap_key.<locals>.wrapped.<locals>.get_sym_proxy_slot&  s    !!V,2244r[   )rE  r   r  zUnion[Tensor, Proxy])rE  r   r  r)   )ra   rz  r  r  r   rK  r8  tree_map_onlyr   r   rG   )proxies_unusedflat_proxies_proxies_specr  rG  r  rN  r   flat_tensorstensorsr   s           rY   wrappedwrap_key.<locals>.wrapped  s    &,&9&9'&B#< C$5555(*aa!78888lL4PVW +	C k""6+@F""QSV
	5 ""<1CI
# +*s   $C
C%)rQ  r  rR  r  r  rS   )ra   rz  r   wraps)r   rV  r   r  _tensors_specrW  rU  s   ```   @rY   wrap_keyr[    sA     #)"5"5g">L-__Q  , Nr[   zOptional[object]ORIGINAL_ATENc              #     #    [         cJ  [        R                  " 5       (       a0  U q U [        R                  S'    S v   S q S [        R                  S'   g S v   g ! S q S [        R                  S'   f = f7f)Noriginal_aten)r\  fx_tracebackhas_preserved_node_metacurrent_meta)r\  s    rY   set_original_aten_oprb  3  sh      !E!E!G!G59!!/2	> M9=L%%o6 !M9=L%%o6s   7A3A A3A00A3c                  B    \ rS rSrSS jr  S         SS jjrSrg)	TorchFunctionMetadataModeiB  c                    Xl         g rV   r   r  r   s     rY   r  "TorchFunctionMetadataMode.__init__C  s    r[   Nc                    U=(       d    0 nXR                   l        U R                   R                  R                  US5      S-   U R                   R                  U'   U" U0 UD6$ )Nr   r<   )r   r  r  rY  r  r\  typesr   r   s        rY   __torch_function__,TorchFunctionMetadataMode.__torch_function__F  sY     2(,%,0KK,G,G,K,KDRS,TWX,X##D)T$V$$r[   rf  r   _ProxyTracerr  r  rk   N
r\  r@   rk   tuple[torch._C._TensorMeta, ...]r   tuple[object, ...]r   Optional[dict[str, object]]r  r4  r   r   r   r   r  rl  r   rk   r[   rY   rd  rd  B  sI     $&.2
%
% 0
% !	
%
 ,
% 

% 
%r[   rd  c                  B    \ rS rSrSS jr  S         SS jjrSrg)	PreDispatchTorchFunctionModei[  c                    Xl         / U l        g rV   )r   enter_autocast_nodesrg  s     rY   r  %PreDispatchTorchFunctionMode.__init__\  s     :<!r[   Nc                t   U=(       d    0 nU[         ;   Ga  U[        R                  R                  R                  :X  a  U R
                  R                  5       nU4nU R                  R                  SX0 5      nU[        R                  R                  R                  :X  a  U R
                  R                  U5        U[        R                  R                  [        R                  R                  R                  [        R                  R                  R                  4;   a  S UR                  S'   U$ U" U0 UD6$ )Nr	  r   )r,   r   ampautocast_mode_exit_autocastry  popr   r  _enter_autocastrd  r"  _set_grad_enabledr   )r  r\  rk  r   r   
enter_noder   s          rY   rl  /PreDispatchTorchFunctionMode.__torch_function__c  s     2DD
 uyy..===!66::<
"};;**?DKDuyy..>>>))006**		''77		''66 
 $(		% K T$V$$r[   )ry  r   rn  rp  )
r\  zUnion[OpOverload, Callable]rk  rr  r   rs  r   rt  r  r4  ru  rk   r[   rY   rw  rw  [  sI    < $&.2%)% 0% !	%
 ,% 
% %r[   rw  c                  
  ^  \ rS rSr\SS j5       r   S           SU 4S jjjr\  S         SS jj5       rSU 4S jjr	        SU 4S jjr
\SS j5       r        SS jr          SS	 jrS
rU =r$ )rK  i  c                    gr   rk   r  s    rY   enable_tracing%ProxyTorchDispatchMode.enable_tracing      r[   c                V  > U(       a$  [         R                  R                  R                  OS n[        TU ]  U5        Xl        X l        X0l        X@l	        XPl
        [         R                  R                  R                  U l        / U l        SU l        SSKJn  UR$                  U l        g )Nr   config)r   r"  DispatchKeyPreDispatchr  r  r   tracing_moder  rb  r  _TorchDispatchModeKeyPROXY	_mode_keyenter_stackrN  torch._inductorr  rO  )	r  r   r  r  rb  r  dkr  r   s	           rY   r  ProxyTorchDispatchMode.__init__  s     2>UXX!!--4(($8!,H) 77== DF"#*-3-K-K$r[   c                    [        U5         U=(       d    0 nU[        R                  R                  4;   a  U" U0 UD6sS S S 5        $ [	        XU R
                  X45      sS S S 5        $ ! , (       d  f       g = frV   )rb  primr   r   r  r  rj  s        rY   __torch_dispatch__)ProxyTorchDispatchMode.__torch_dispatch__  s_     "$'\rF++--T,V,	 (' d$*;*;TJ (''s   2A(A((
A6c                   > [        [        R                  R                  R                  5      nU R
                  R                  U5        [        TU ]!  5       $ rV   )	r4   r   r"  r  r  r  rd  r  	__enter__)r  maybe_prev_proxy_moder   s     rY   r   ProxyTorchDispatchMode.__enter__  sA     1%((2P2P2V2V W 56w ""r[   c                x   > [         TU ]  XU5      nU R                  R                  5       nUb  [	        U5        U$ rV   )r  __exit__r  r  r3   )r  exc_type	exc_valuer  bmb_previous_proxy_moder   s         rY   r  ProxyTorchDispatchMode.__exit__  sA     GX)< "&!1!1!5!5!7!--.r[   c                    gr   rk   )clss    rY   is_infra_mode$ProxyTorchDispatchMode.is_infra_mode  r  r[   c                R  ^  [        U5      S:X  a8  [        US   [        [        45      (       a  [        U 4S jUS    5       5      4nO[        U 4S jU 5       5      nT R                  R                  SX0 5      n[        R                  " UT R                  5      n[        Xc5        U$ )Nr<   r   c              3     >#    U  HJ  n[        U[        5      (       a.  [        UTR                  5      R	                  5       R
                  OUv   ML     g 7frV   r   rG   r   r   r>  r   rl   r  r  s     rY   rm   8ProxyTorchDispatchMode._compute_proxy.<locals>.<genexpr>  sM       % &a66 'q$++6<<>CC %   AAc              3     >#    U  HJ  n[        U[        5      (       a.  [        UTR                  5      R	                  5       R
                  OUv   ML     g 7frV   r  r  s     rY   rm   r    sM       A "!\22 #1dkk288:?? r  r	  )	r  r   rW   r]   r   r  r.  r)   r   )r  r\  r   r  n_argsn_outp_outs   `      rY   _compute_proxy%ProxyTorchDispatchMode._compute_proxy  s    
 t9>ja4-@@  "!W 	F    F ''rJ,r[   c                ~   U[         R                  :X  aL  [        US   [        5      (       a  US   S:X  a  US   $ [        US   [        5      (       a  US   S:X  a  US   $ U(       a   eU" U0 UD6n[        U[        5      (       a6  [        U R                  U R                  XUS9n[        XPR                  U5        U$ )Nr<   r   )r\  r   r  )	operatormulr   r   rG   r   r   r  r   )r  r\  rk  r   r   r  p_out_thunks          rY   __sym_dispatch__'ProxyTorchDispatchMode.__sym_dispatch__  s     8<<$q'3''DGqLAwDGS))d1glAw
 zD#F# c<(("T00tCK 3[9
r[   )	rb  r  r  rN  rO  r  r  r   r  )r  r   )FFT)r   ro  r  r  r  r   rb  r   r  r   r  r  rp  rq  )r  r   )r  zOptional[type[BaseException]]r  zOptional[BaseException]r  zOptional[types.TracebackType]r  zOptional[bool])r\  r@   r   rs  r  r   r  r)   )
r\  r@   rk  rr  r   rs  r   dict[str, object]r  r4  )r   r   r   r   propertyr  r  r6   r  r  r  classmethodr  r  r  r   r  r  s   @rY   rK  rK    sc     #%*-1LL L 	L
 #L '+L 
L L6 
 $&.2KK 0K !	K
 ,K 
K K#/ + 1	
 
  &8?H	B 0 !	
 " 
 r[   c                  x   ^  \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
\S'   S\S'   SrS\S'   SU 4S jjrSrU =r$ )rM   i  r  r   z*MutableMapping[PySymType, _PySymProxyType]r   r  r   r  r   zOptional[OpOverload]r  r  r  Fr   r   c                   > [         TU ]  U5        [        R                  " 5       U l        [        5       U l        0 U l        [        S [        S9U l
        S U l        0 U l        g )Nr  )r  r  weakrefr   r   r;   r   r   r:   r9   r   r  r  )r  rW  r   s     rY   r   _GraphAppendingTracerEx.__init__  sZ    &88:57"$%8&
" "&  "r[   )r   r   r   r   r  r  )rW  zfx.graph.Graphr  r  )	r   r   r   r   r   r   r  r   r  r  s   @rY   rM   rM     s;    FF??8822++**!OT!" "r[   rM   c                     ^  \ rS rSr S         S	U 4S jjjr        S
U 4S jjr        S
U 4S jjr        S
U 4S jjrSU 4S jjrSr	U =r
$ )rF   i.  c                   > [         TU ]  " U40 UD6  X l        [        U R                  5      U l        U=(       d    0 U l        [        U R                  SS9U l        g )Nreal)r  )r  r  	new_graphrM   r   rx   rK  r,  )r  moduler  rx   r   r   s        rY   r  !DecompositionInterpreter.__init__/  sK     	*6*"-dnn=#6#<" *4;;VL	r[   c                   > [         TU ]  XU5      n[        R                  " U R                  R                  U5      U R
                  5      n[        XES U R
                  S9  U$ Nry  )r  r   r.  r)   r  r   r8  r  r  r   r   r  r   r   s         rY   r   $DecompositionInterpreter.placeholder=  sN     g!&733F;T[[I#tDKKH
r[   c                   > [         TU ]  XU5      n[        R                  " U R                  R                  U5      U R
                  5      n[        XES U R
                  S9  U$ r  )r  r  r.  r)   r  r   r8  r  s         rY   r  !DecompositionInterpreter.get_attrI  sN     gvV4008$++F#tDKKH
r[   c                   >^ ^ [         TT ]  XU5      nSS jmSUU 4S jjnT R                  R                  [        R                  " XT5      5        U$ )Nc                .    U R                   R                  $ rV   )r   r   r   s    rY   get_proxy_node7DecompositionInterpreter.output.<locals>.get_proxy_node^  s    77<<r[   c                4   > [        U TR                  U T5      $ rV   )r   r   )r/  r  r  s    rY   unwrap/DecompositionInterpreter.output.<locals>.unwrapa  s    !!T[[!^DDr[   )rd   r   r  r  )r/  r   r  zUnion[Tensor, fx.Node])r  r  r  ra   tree_map)r  r  r   r   r  r  r  r   s   `     @rY   r  DecompositionInterpreter.outputV  sH     gnV62	 	E 	E 	foof:;
r[   c                   > [        U R                  5         U R                     [        TU ]  " U0 UD6sS S S 5        sS S S 5        $ ! , (       d  f       O= fS S S 5        g ! , (       d  f       g = frV   )rz   rx   r,  r  run)r  r   r   r   s      rY   r  DecompositionInterpreter.rung  sF     t//0$))7;// 3<)00))000s!   A!A	A!
A	A!!
A/)rx   r,  r  r   rV   )
r  fx.GraphModuler  fx.Graphrx   'Optional[Mapping[OpOverload, Callable]]r   r4  r  r  )r  r  r   rs  r   r  r  r4  )r   r4  r   r4  r  r4  )r   r   r   r   r  r   r  r  r  r   r  r  s   @rY   rF   rF   .  s    
 HL	MM M E	M
 M 
M M

 !
 "	

 

		 !	 "		
 
	 ! "	
 
"0 0r[   rF   c                R   ^ ^ [         R                  " X45      u  nmSU U4S jjnXC4$ )Nc                F   > [         R                  " U T5      u  pT" U0 UD6$ rV   )ra   r  )	flat_argsfn_args	fn_kwargsr\  r  s      rY   rW  -wrapper_and_args_for_make_fx.<locals>.wrappedu  s(    #229dCW*	**r[   )r  zlist[object]r  rS   )ra   rz  )r\  r   r   r  rW  r  s   `    @rY   wrapper_and_args_for_make_fxr  n  s0    
 ))4.9OIt+ + r[   c               #     #    [         R                  " 5       n [         R                  " S5         S v   [         R                  " U 5        g ! [         R                  " U 5        f = f7fNF)r   is_autocast_cache_enabledset_autocast_cache_enabled)	old_values    rY   disable_autocast_cacher  |  sE     //1I	$$U+4((3((3s   ,A%A
 A%
A""A%c                      \ rS rSrSrg)#_ModuleNotInstalledAsSubmoduleErrori  rk   Nr~   rk   r[   rY   r  r    r   r[   r  c                      \ rS rSrSS jrSrg)
_AttrProxyi  c                    g rV   rk   )r  basepaths      rY   reset_proxy_mapping_AttrProxy.reset_proxy_mapping  s    r[   rk   N)r  r0   r  r  r  r  )r   r   r   r   r  r   rk   r[   rY   r  r    s    r[   r  c                     ^  \ rS rSrSrSU 4S jjrSS jr        SU 4S jjr      SU 4S jjr          SS jr	SS jr
SU 4S	 jjrS
rU =r$ )_ModuleStackTraceri  a  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U ]  5         SU l        Xl        SU l        0 U l        U R                  R                  SS9 HO  u  p#X0R
                  ;   a-  [        R                  SU R
                  U   U5        SU l        MA  X R
                  U'   MQ     [        5       U l
        [        5       U l        [        5       U l        SU l        [        [        5      U l        U R                  R                  SS9 H,  u  p$U R                   [#        U5         R%                  U5        M.     U m " UU4S jS[&        5      mTU l        g )NTF)remove_duplicatez<Shared module found between %s and %s, AttrProxy is enabled.r   c                     >^  \ rS rSrSU4S jjrS	UU U4S jjrS
U4S jjrSUU U4S jjr\SUU4S jj5       r	Sr
U =r$ )._ModuleStackTracer.__init__.<locals>.AttrProxyi  c                  > [        U[        5      (       a  UR                  5       n[        U[        5      (       d   e[	        UR
                  R                  U R
                  UR
                  40 5      U l        UR                  U l        UR
                  R                  U R
                  l        UR
                  R                  U R
                  l	        UTR                  U '   UTR                  U '   g rV   )r   r  get_baser0   r   r   r   __dict__r   r   proxy_pathsproxy_modules)r  r  r  r   s      rY   r  7_ModuleStackTracer.__init__.<locals>.AttrProxy.__init__  s    dJ//==?D!$//// "&NN++^^T^^4"
 !%,0NN,E,E).2nn.I.I+ ,0""4(-1$$T*r[   c                   > [        U [        5      (       d   e[        TU ]  U5      n[        U[        5      (       d  U$ T" UTR                  U    S-   U-   5      $ N.)r   r0   r  __getattr__r  )r  rs  r  	AttrProxyr   r   s      rY   r  :_ModuleStackTracer.__init__.<locals>.AttrProxy.__getattr__  s[    !$//// !7.t4!(F33#O 6+=+=d+Cc+ID+PQQr[   c                "   > TR                   U    $ rV   )r  rg  s    rY   r  7_ModuleStackTracer.__init__.<locals>.AttrProxy.get_base  s    ++D11r[   c                |  > [        U[        5      (       Ga  [        U [        R                  R                  5      (       ag  [        R                  R	                  [        [        U R                  R                  5       5      U   5      5      nT" UTR                  U     SU 35      $ [        U [        R                  R                  5      (       a^  [        R                  R                  [        U R                  R                  5       5      U   5      nT" UTR                  U     SU 35      $ [        TU ]5  U5      $ r   )r   slicer   r  
Sequentialr   rW   _modulesr   r  
ModuleListvaluesr  r  )r  r*  r   r  r   r   s      rY   r  :_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//r[   c                  > SU R                   ;   d   eU R                   S   n[        U[        5      (       d   eUR                  5        VVs0 s H0  u  p#UUb%  T" UTR                  U    S-   [        U5      -   5      OU_M2     snn$ s  snnf )Nr
  r  )r  r   r   r   r  r  )r  
submodulesr1  r   r  r   s       rY   r
  7_ModuleStackTracer.__init__.<locals>.AttrProxy._modules  s    !T]]222!]]:6
!*d3333 '1&6&6&8 '9
  , "%););D)AC)G#c()RS"#
 '9  s   7B)r   r  )r  zUnion[Module, _AttrProxy]r  r  r  r  )rs  r  r  r  )r  r0   )r*  zUnion[int, slice]r  r  )r  zdict[str, AttrProxy])r   r   r   r   r  r  r  r  r  r
  r   r  )r   r  r   s   @rY   r  r    s7    2*	R 	R20 0  r[   r  )r  r  r  
scope_rootenable_attr_proxysubmodule_pathsnamed_modulesr   infor   r  attr_proxy_mapr  counterr   rW   module_id_cacher   rd  r  
proxy_type)r  r  rs  r  modr  r   r   s        @@rY   r  _ModuleStackTracer.__init__  s%   $!&!44e4LGD(((R((+
 *.&*.$$Q' M @Q?REVEXDUDW*40666NID  C)006 O ?	 ?	
 ?	B $r[   c                    XR                   L a  g[        U[        5      (       a  U R                  U   $  [        R
                  " X5      $ ! [         a  n[        UeSnAff = f)z
Use tracked access path during tracing instead of the default BFS behavior.
Still use all the possible module paths to verify the result.
r  N)r  r   r  r  r*   path_of_module	NameErrorr  )r  r  r/  s      rY   r  !_ModuleStackTracer.path_of_module  s]    
 //!c:&&##C((	=((33 	=51<	=s   A 
A!AA!c                  > [        U[        5      (       a0  [        U[        R                  5      (       d  U R                  (       d  [
        TU ]  XU5      $ [        U[        5      (       a  U$ X R                  ;  a  U R                  X!5      U R                  U'   OU R                  U   R                  X!5        U R                  U   $ rV   )r   r0   r.  r(   r  r  r  r  r  r  r  )r  r  r  r  r   s       rY   r  _ModuleStackTracer.getattr  s     8V,,(BNN33))7?43HIIh
++O ...,0OOH,KD))==hM""8,,r[   c                F  > [         TU ]  X5      n/ nU R                  R                  5        H(  u  pVX`R                  ;   d  M  UR                  XV45        M*     SS jnU H=  u  pU" U R                  U5        U R                  U	   n
[        XR                  U5        M?     U$ )Nc                f   UR                  S5      nUS S US   pC[        U [        5      (       d   eU nU H=  n[        XV5      (       d    g[	        XV5      n[        U[
        [        45      (       a  M=    g   [        XT5      (       d  g[        [	        XT5      [
        5      (       d  g[        XT5        g)Nr  FT)splitr   r0   r   r  r  delattr)r   r  atomsr  target_submodr  r  s          rY   _delete_proxy_attr4_ModuleStackTracer.trace.<locals>._delete_proxy_attr7  s     LL%E"'*eBi-c6****C s)) c(!#
F';<<   3.. gc9:FFC'r[   )r   r0   r  r  r  r   )r  r;  r  r  r  rd  r+   )r  r  r@  r   !proxy_module_names_to_be_replacedrs  r  r)  proxy_module_nameproxy_moduleactual_moduler   s              rY   r;  _ModuleStackTracer.trace(  s     gmD0 KM) II335LD+++188$H 6	8 0Q+tyy*;< ..|<M		3DE 0Q
 
r[   c                    SSK Jn  [        X[        45      (       a  U" U0 UD6$  [        R
                  " XX#U5      $ ! [         a*    [        R                  S[        U5      5        U" U0 UD6s $ f = f)z\PythonKeyTracer overrides call_module to avoid the scope handling,
but we actually want it.
r   )OptimizedModulezUnable to find the path of the module %s. 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._dynamor1  r   r(   r*   r  r  r   r   r  )r  r  r  r   r   r1  s         rY   r  _ModuleStackTracer.call_moduleZ  s     	2 a;788D+F++
	,%%dwfEE2 	,IIJ A D+F++	,s   > 1A21A2c                    gr  rk   )r  r  module_qualified_names      rY   is_leaf_module!_ModuleStackTracer.is_leaf_module|  s    r[   c                  > [         TU ]  " U0 UD6nUR                  S;  a  SUR                  ;  a  U R                  UR                  S'   UR                  S   R                  5        HM  u  nu  pV[        U[        5      (       d  M  UUR                  S-   UR                  -   4UR                  S   U'   MO     UR                  S:X  a  U R                  b  SUR                  ;  ax  U R                  R                   SU R                  U R                      3U R                  R                  R                   SU R                  R                   34UR                  S'   U$ )a  
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.
r  nn_module_stackr  r	  torch_fnr^   )r  r  r   r   module_stackr   r   r   r   r   r  r   r  r   )r  r   r   r   r1  fqnmod_clsr   s          rY   r  _ModuleStackTracer.create_node  sG    w"D3F3 7733 		1/3/@/@		+,'+yy1B'C'I'I'K#^cgt,,**S073G3GG9DII/05 (L GG&&&2$))+ ))2231T5I5I$J`J`5a4bc))33<<=Qt?U?U?^?^>_`%DIIj!
 r[   )
r  r  r  r  r  r  r  r  r  r  )r  r(   r  r  )r  r0   r  r  r  )r  Union[Module, Callable]r@  rt  r  r  )
r  r0   r  r   r   rs  r   r  r  r  )r  r0   r5  r  r  r   )r   r4  r   r4  r  r  )r   r   r   r   r  r  r  r  r;  r  r6  r  r   r  r  s   @rY   r  r    s    $`$D= --#)-BR-	-&0+0<W0	0d , ,  , !	 ,
 " , 
 ,D! !r[   r  c                      \ rS rSr S                 SS jjrSS jr              SS jr\      SS j5       rSS jr	\    SS j5       r
SS jrSS	 jrSS
 jrSrg)_MakefxTraceri  c	                   [        U=(       d    0 5      U l        U R                  R                  [        R                  R
                  R                  R                  [        R                  R                  R                  5        X l
        X0l        X@l        XPl        X`l        Xpl        S U l        [#        5       U l        [#        5       U l        S U l        [#        5       U l        [#        5       U l        Xl        g rV   )r   rx   
setdefaultr   r  r  r  r   _decompdecompositionsr  _allow_non_fake_inputsr  record_module_stackrb  r  r   r   r   proxy_function_mode	fx_tracerpython_dispatcher_modetorch_fn_metadata_moder  )	r  rx   r  rF  r  rG  rb  r  r  s	            rY   r  _MakefxTracer.__init__  s     @D%2@
  	  ++IINN$$,,emm.J.J.T.T	
 ".,B#".)< *>!2N) ;?FQmM 	  59?J}#M 	# 'r[   c                    U R                   U R                  U R                  U R                  U R                  U R
                  /$ rV   r   r   rH  rI  rJ  rK  r  s    rY   _checkpoint_modes_MakefxTracer._checkpoint_modes  s>    !!OO$$NN''''
 	
r[   c                L    Xl         X l        X0l        X@l        XPl        X`l        g rV   rN  )r  prev_fake_tensor_modeprev_proxy_modeprev_proxy_function_modeprev_fx_tracerprev_python_dispatcher_modeprev_torch_fn_metadata_modes          rY   _restore_modes_MakefxTracer._restore_modes  s&     !6)#; '&A#&A#r[   c              #  L  #    U R                  5       n SSKJn  [        US5      (       a.  U R                  (       a  UR
                  n[        U5      U l        O*[        5       U l        U R                  U R                  l	        U R                  S:X  ao  SS KnUR                  R                  R                  U5      nUc<  SS KJs  Jn  UR%                  SS9   ['        SU R(                  U" 5       SS	9nS S S 5        Xpl        OU R                  S
:X  a  SS KnUR                  R                  R                  U5      nUc=  U" 5       n	SS KJs  Jn  UR%                  SS9   ['        SU R(                  U	S9nS S S 5        UR,                  c   S5       eXpl        O(U R                  S:X  d  [/        SU R                   35      eU R1                  U R                  5        S v   U R2                  " U6   g ! , (       d  f       GN= f! , (       d  f       N= f! U R2                  " U6   f = f7f)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'r  zUnexpected tracing type: )rO  r6  r[  r   rG  r\  r  rI  rC   r  r  r2  _dynamoutilsr   torch._functorch.config
_functorchr  patchr$   rF  r   r`  AssertionError_construct_modes_with_fx_tracerrX  )
r  r   r   
prev_modesr[  r  r   r   _configr`  s
             rY   _init_modes_from_inputs%_MakefxTracer._init_modes_from_inputs  s     ++-
6	-1q+&&4+C+C[[
!3J!?!0!2-1-=-=*  F*$#(==#6#6#G#G#M #+== PUV+937262M2M&.j*.	,( W )9%""j0$#(==#6#6#G#G#M #+ (
I== PUV+938262M2M&/,( W (11= H= )9%((F2(3D4E4E3FG  00@,G WV  WV& ,sO   H$CH G-3A*H G?3A*H H$-
G<7H ?
H	H H!!H$c                :   [        UU R                  U R                  U R                  U R                  S9U l        U R                  (       a  [        U5      U l        U R                  S:X  d  U R                  (       a  [        5       U l	        [        U5      U l        g )N)r  rb  r  rb  )rK  r  r  rb  r  r   rw  rH  r   rJ  rd  rK  )r  rI  s     rY   rj  -_MakefxTracer._construct_modes_with_fx_tracer%  s}    0**!%!:!:)-)J)J
 'CI'ND$ 
*d.?.?*B*DD'&?	&J#r[   c              #  *  #    U R                  5       n UR                  U l        SS jnUR                  c   eU" UR                  5      U l        U R                  U R                  5        S v   U R                  " U6   g ! U R                  " U6   f = f7f)Nc                    [        U 5      [        :X  a
  [        5       $ [        U 5      [        :X  a  [        U R                  5      $ [	        S[        U 5       S35      e)NzUnexpected tracer type: r  )r   rC   r  r  r   )parent_tracers    rY   _create_sub_fx_tracerD_MakefxTracer._init_modes_from_parent.<locals>._create_sub_fx_tracerC  sV    &/9*,,-(,>>-m.F.FGG&243F2GqI r[   )rs  ro  r  rC   )rO  r   rI  rj  rX  )r  rs  rk  rt  s       rY   _init_modes_from_parent%_MakefxTracer._init_modes_from_parent8  s      ++-
	-$1$B$BD! !**6662=3J3JKDN00@,D,s   BAA? /B?BBc           	     .  ^ ^
 SS K m
[        R                  " U
4S jU5      nSU U
4S jjnSS jnU" U5      nU" X5      n[        R                  " [
        T R                  5      n[        5        nUR                  [        T R                  5      5        T R                  (       a  UR                  T R                  5        UR                  T R                  5        UR                  T R                  5        UR                  T R                  5        UR                  U5        UR                  [        5       5        UR                  [!        T 5      5        T R"                  c   e [%        ['        XbT R"                  T R(                  5      T R"                  [+        U5      S9n	 S S S 5        T R0                  S
:X  a*  T R                  c   eT R                  R2                  W	l        W	$ ! [,         a    [/        SS U 4S jS	9  e f = f! , (       d  f       Ni= f)Nr   c                D   > TR                   R                  R                  $ rV   )r.  _symbolic_tracePH)r^   r   s    rY   rZ   ,_MakefxTracer._trace_inner.<locals>.<lambda>\  s    (@(@(C(Cr[   c                t   >^ SmSUUU4S jjnS UUS.n[         R                  " UTR                     U 5      $ )Nr   c                  > SSK Jn  TR                  c   eU" ST 35      n[        U [        5      (       a  TS-  mTR                  R                  XS9$ [        U 5      [        L au  TR                  S:X  ae  TR                  R                  c   S5       eTR                  R                  R                  TR                  R                  R                  XS S9U US	9$ [        U TR                  5      (       a0  TR                  R                  R                  TR                  U 5      $ [        U [         5      (       a   S
U  S35       eU $ )Nr   )ConstantSourceinputr<   )sourcerb  rc  )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    )rd   r  r  	arg_countr  r   s      rY   inner_wrap_fakeG_MakefxTracer._trace_inner.<locals>._wrap_fake.<locals>.inner_wrap_fakea  sX    @,,888'%	{(;<a((NI00<<Q<NN!W^(9(9Z(G00::F LF  00::LL--77EE F  % M    5#5#566 >>==OO--q  &a)9:: #A3&TU: r[   c                    U $ rV   rk   r   s    rY   rZ   @_MakefxTracer._trace_inner.<locals>._wrap_fake.<locals>.<lambda>  s    !r[   r  r]  rb  )rd   r4  r  r4  )ra   r  r  )r   r  wrap_fn_mapr  r  r   s      @rY   
_wrap_fake._MakefxTracer._trace_inner.<locals>._wrap_fake^  sC    I! !H $'+K
 ??;t/@/@#A4HHr[   c                    [        [        R                  " U 5      S5      (       a@  [        R                  " U 5      R                  R                  [        R
                  -  (       a  [        U [        U5      5      $ U $ )N__code__)r   inspectr  r  co_flags
CO_VARARGSrv   r  )r   phss     rY   
_wrap_func._MakefxTracer._trace_inner.<locals>._wrap_func  sS    GNN1-z::>>!$--669K9KK &aS22Hr[   )r   r@  artifactc                     SSS.$ )Nmake_fx_fail_partialstring)rs  encodingrk   rk   r[   rY   rZ   r|    s     6$,)r[   c                 d   > T R                   R                  R                  SSSSS9R                  $ )Nr  T)root_moduleverboseinclude_strideinclude_device)rI  rW  python_codesrcr  s   rY   rZ   r|    s8    t~~';';'G'G$* $'+'+	 (H (
 c(r[   )metadata_fn
payload_fnrb  )r   rP   r  rP   )r   Callable[_P, R]r  zSequence[PHBase]r  r  )r2  ra   r  r   r   rK  r   r   enter_contextrz   rx   r   rJ  rH  rK  r  _set_make_fx_tracerrI  rD   r[  r  r]   	Exceptionr!   r  r`  )r  r   r   r  r  r  r\  r   stackrE  r   s   `         @rY   _trace_inner_MakefxTracer._trace_innerT  s    	ooCTJ+	I +	IZ	 $!! .4[["DOO.

 [E	$*B*B CD$$##D$9$9: ; ;< 8 89 ; ;<
+ 6 89 3D 9:>>---"T9J9JK>>"'* F 
*((444//99AK)   !  % [s   /C5H%=G''HH
Hc                    U R                  X5         U R                  " U/UQ76 sS S S 5        $ ! , (       d  f       g = frV   )rm  r  )r  r   r   s      rY   r;  _MakefxTracer.trace  s/    ))!2$$Q.. 322s   /
=c           	        [        U R                  SU R                  U R                  U R                  U R
                  U R                  5      nUR                  U 5         UR                  " U/UQ76 sS S S 5        $ ! , (       d  f       g = f)Nr  )	rA  rx   rF  r  rG  rb  r  rv  r  )r  r   r   
sub_tracers       rY   trace_subgraph_MakefxTracer.trace_subgraph  st    "$$''$$%%--

 //5**14t4 655s   A<<
B
)rb  rF  r  rx   r   rI  r  rH  r   rJ  rG  r  rK  r  NF)rx   r  r  r  rF  r   r  r   rG  r   rb  r   r  r   r  r   r  r  )r  z	list[Any])rR  zOptional[FakeTensorMode]rS  z*Union[nullcontext, ProxyTorchDispatchMode]rT  z0Union[nullcontext, PreDispatchTorchFunctionMode]rU  zOptional[PythonKeyTracer]rV  zUnion[nullcontext, Any]rW  z-Union[nullcontext, TorchFunctionMetadataMode]r  r  )r   r   r   rs  r  Generator[None, None, None])rI  ro  r  r  )rs  rA  r  r  )r   r   r   r4  r  r(   )r   r   r   r4  r  r  )r   r   r   r   r  rO  rX  r
   rm  rj  rv  r  r;  r  r   rk   r[   rY   rA  rA    s&    "('D(' (' !%	('
 (' "(' #(' '+(' (' 
('T
B7B DB #S	B
 2B &=B &SB 
B  :-:-!3:-	$:- :-xK& -*-	$- -6rh/5r[   rA  zOptional[_MakefxTracer]_CURRENT_MAKE_FX_TRACERc              #  8   #    [         n U q S v   Uq g ! Uq f = f7frV   )r  )r   prev_tracers     rY   r  r    s&      *K."("-+s    )r  rG  rb  r  r  c                  ^ ^ US;   d   eSSK Jn	  [        UUUUUUUU=(       d    U	R                  R                  S9m[
        R                  " T 5      SU U4S jj5       n
U
$ )a!  
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.

If stack_trace is True, the stack_trace will be preserved on node.meta["stack_trace"]
r  r   r  )r  c                 *   > TR                   " T/U Q76 $ rV   )r;  )r   r   make_fx_tracers    rY   rW  make_fx.<locals>.wrapped	  s    ##A---r[   )r   r4  r  r(   )r  r  rA  r;  enabledr   rY  )r   rx   r  rF  r  rG  rb  r  r  r  rW  r  s   `          @rY   rE   rE     sl    ( 7777&"$76<<#7#7	N __Q. . Nr[   c                 R    [         R                  R                  R                  5       $ rV   )r   re  _python_dispatch _get_current_dispatch_mode_stackrk   r[   rY   get_torch_dispatch_modesr  	  s    ;;''HHJJr[   c                     [        5       $ rV   )rI   rk   r[   rY   rH   rH   	  s    r[   c                 B   [         R                  R                  [         R                  R                  R
                  5      n [         R                  R                  [         R                  R                  R
                  5      nU b  Ub   SU  SU 35       eU =(       d    U$ )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   rP  _get_dispatch_mode_pre_dispatchr"  r  r  _get_dispatch_mode)pre_dispatch_moder,  s     rY   rI   rI   	  s     

BB&&,, 88&&uxx'E'E'K'KLD$ 
./wtf=4 $$r[   c                    [        5       nU(       d   e[        5          / nUR                  XX5      sSSS5        $ ! , (       d  f       g= f)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)rI   r  r  )r\  r   r   r,  rk  s        rY   rJ   rJ   -	  s<     DK4 
%	&$$T$? 
'	&	&s	   <
A
c                 \    [        [        R                  R                  R                  5      $ rV   )r2   r   r"  r  r  rk   r[   rY   r  r  A	  s    uxx==CCDDr[   c                .  ^ SSK Jn  T[        ;   ai  UR                  SSU4S j5      (       a  [        $ U    U =R
                  S-  sl        [        T   " U0 UD6nU =R
                  S-  sl        UsS S S 5        $ [        $ ! , (       d  f       [        $ = f)Nr   )CompilerBisectoraot_eager_decomp_partitiondecompositionc                    > [        T 5      $ rV   )repr)r   s   rY   rZ   %maybe_handle_decomp.<locals>.<lambda>P	  s	    48r[   r<   )!torch._inductor.compiler_bisectorr  rO   disable_subsystemr}  rN  )r   r   r   r   r  r  s    `    rY   r~  r~  F	  s     C	((--(/;K
 
 "!$$)$-b14B6BC$$)$	 Z  Z s   ;B
Bc                    [        XU5      u  pV[        5          [        XTUS9" U5      nSSS5        U$ ! , (       d  f       W$ = f)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.
)rx   r  N)r  r  rE   )r\  r   r   r  rx   rW  all_argsgms           rY   get_isolated_graphmoduler  ]	  sL     5THG	$	&<

 
' I	 
'	& Is	   4
Ac                d   SSK Jn  [        R                  R	                  [        R                  R
                  R                  5      nU(       ab  UR                  (       aP  U" UR                  U 5      =n(       a5  [        U[        5      (       d   U5       eXAR                  R                  S'   gggg)zOA helper function for setting up unbacked_bindings on the destination FX graph.r<   )compute_unbacked_bindingsunbacked_bindingsN)r6  r  r   r"  r  r  FAKEr`  r   r)   r   r   )r  	out_proxyr  r   symbol_to_paths        rY   r5  r5  s	  s    : ++EHH,J,J,O,OPIY((6y7J7JCPP>Pi//::/7ENN 34 Q )yr[   )rp   r  rt   r   r  r  )rx   r  r  z4Generator[Mapping[OpOverload, Callable], None, None])r   r   r  r   )r   r   r   ro  r   r   r  r  )r   r  r   ro  r   r)   r  r  )r   r   r   ro  r   r   r  r  )r   z.Union[PySymType, _AnyScriptObjectType, Tensor]r   ro  r   r4  r  r  )r   r   r   ro  r  r   )r   r   r   ro  r  r   )r   r   r   ro  r   rQ   r  zUnion[_ProxyTensor, U])
r   r   r   ro  r   rQ   r   zCallable[[_ProxyTensor], R]r  Union[R, U])r   r  r   ro  r  r)   )r   r  r   ro  r   rQ   r  zUnion[Proxy, U])
r   r  r   ro  r   rQ   r   zCallable[[Proxy], R]r  r  )r   r   r   ro  r  r   )r   r   r   ro  r   rP   r  zUnion[T, _PySymProxyType])
r   r   r   ro  r   rQ   r   zCallable[[_PySymProxyType], R]r  r  )
r   .Union[Tensor, _AnyScriptObjectType, PySymType]r   ro  r   r4  r   r   r  r4  r  )r   r   r   r   r  r:  )r   r   r   r   r  r   )r   ro  r   r   r  r  )r  r  )r   r)   r   r   r  r)   )
r   ro  r   r  r   r  r   r  r  zThunk[R])
r  r   r   r)   r  r:  r   ro  r  r  )
r6  rP   r7  r!  r  r-  r   ro  r  rP   )r   ro  r  z5Callable[[PySymType], Union[bool, int, float, Proxy]])r   ro  rE  r   r  zUnion[_ProxyTensor, Tensor])r   ro  rE  r  r  r  )r   ro  rE  r   r  z!Union[_PySymProxyType, PySymType])r   ro  rE  r  r  r4  )r\  r4  r   rK  r  r  )r   rK  r\  r@   r  r   r   rs  r   r  r  r4  rV   )r  r   r$  z:Optional[tuple[tuple[Argument, ...], dict[str, Argument]]]r  r   )r-  ztype[TorchFunctionMode]r  zCCallable[[], _GeneratorContextManager[Optional[TorchFunctionMode]]])r  r?  r   r*   r@  zOptional[tuple[Any, ...]]r  r(   )
r   zCallable[[Unpack[_Ts]], R]rV  ztuple[Unpack[_Ts]]r   ro  r  r   r  r  )r\  r@   r  r  )r\  zCallable[..., R]r   rs  r   r  r  z0tuple[Callable[[list[object]], R], list[object]])r   rA  r  r  )Nr  F)r   r   rx   r  r  r  rF  r   r  r   rG  r   rb  r   r  r   r  r   r  zCallable[..., GraphModule])r  zlist[TorchDispatchMode])r  z Optional[ProxyTorchDispatchMode])r\  r  r   r  r   r  r  rS   )r  z-Generator[ProxyTorchDispatchMode, None, None])
r   rK  r   r@   r   rs  r   r  r  r4  )r  N)r\  r   r   rs  r   r  r  r  rx   r  r  r(   )r  r4  r  r!  r  r  )
__future__r   r   r  loggingr  r  r   r   r  collectionsr   r   collections.abcr   r   r   
contextlibr	   r
   r   r   dataclassesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   
torch._opstorch.fxr.  torch.fx.tracebackr_  torch.utils._pytreere  _pytreera   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.nnr0   r)  r1   torch.utils._python_dispatchr2   r3   r4   r5   torch.utils._statsr6   torch.utils._thunkr7   torch.utils._tracebackr8   torch.utils.weakr9   r:   r;   _backward_stater=   sym_noder>   rk  r?   r   r@   torch.fx._symbolic_tracerA   torch.typesrB   __all__ro  r  r   r  r  r  r  	getLoggerr   r   _logginggetArtifactLoggerr|  rO   r   rv  rP   rQ   rR   rS   rT   r   null_ctx_typeregister_pytree_nodeSizer]   !_pytree_subclasses_that_lose_inforv   rz   r4  
proxy_slotr|   
no_defaultrG   r   r   r   r   r   r   r   r   rW   r   r  r   r   r   r   r   r   rL   rK   r   r   r   r!  r"  r8  r   rB  rF  r  r  ra  r^  r  r  rC   r  r0  _disable_dynamorD   r[  r\  rb  rd  )_temp_remove_metadata_torch_function_moderw  -_temp_remove_pre_dispatch_torch_function_moderK  r   GraphAppendingTracerrM   InterpreterrF   r  r  r  r  r  r  rA  r  r  rE   r  rH   rI   rJ   r  r~  r  r5  rk   r[   rY   <module>r     s`   #         0 8 8 W W !	 	 	 Q P %    ) ) $ $ ) ) ; ? + 4  7 / / . 
 @  -  % $ 4 W W *  .%/' AB&&(89 U//1AAB yy~~yy~~!nn66xARS =? : ? CLCLt_CL5[!   	JJ &	  &+ZZ$7 !B 	>@	>9	> 	> X
	 	 \
 /x M
 
 W 
 W 
	'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=	=4[&[
[ [ 	[
 [ [|' '>Uf Ut OS))K) 
)X$$$H$N  04)N
!)N)N -)N 	)N )NX!  	
 F #' &  % 1 %" -S- )$%#4 $%N 1W 1 -
J. JZ"bhh;; "4=0r~~ =0@
"4>O5 4 4	) 	
 
P Pfu5 u5p	 48 0 7 . . DH#(	'  %!&)-''@' ' !	' ' ' ' #'' '  'TK% @
@
@ @ 	@( E E&  	
 6 CG

  	
 A ,Fr[   