
    sh?T                      % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SK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#  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%J/r/J0r0J1r1  S SK2J3r3  S SK4J5r5  S SK6J7r7  S SK8J9r9  S SK:J;r;J<r<J=r=J>r>  S SK?J@r@  S SK'JArAJBrBJCrC  S SKDJErE  S SKFJGrGJHrHJIrI  S SKJJKrK  S SKLJMrM  S SKNJOrO  S SKPJQrQJRrRJSrSJTrT  S SKUJVrV  S SKWJXrX  S SKYJZrZ  S SK[J\r\J]r]J^r^  SSK_J`r`  SSKaJbrb  \(       a   S SKcrcS SKJdrd  S SKereS S K&Jfrf  S S!KgJhrh  S S"KiJjrj  / S#Qrk\ S$   rl\%R                  \54rn\ \%R                  \54   ro\%R                  R                  rq\%R                  R                  rr\R                  " \t5      ru\%R                  R                  \tS%5      rx0 qyS&\zS''   Sr{\" S(5      r|\" S)5      r}\"" S*5      r~\" S+5      r\" \5      r\.GR                  " \%GR                  S, S- S. S/S09  SS1 jr\    SS2 j5       r\" 5       r " S3 S45      r\" 5       rS S5KiJrJr   " S6 S7\5      rSS8 jr\SS: j5       r\        SS; j5       r\        SS< j5       r        SS= jrSS> jr\X\B   r\      SS? j5       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\SH 4         SSI jjrSSJ jr\\ \\o\`\SK   \SL   \\SK4   \1\\\4
      rSSM jr\SNSO.     SSP jj5       r\SSQ j5       r\SSR j5       rSSS jr          SST jr          SSU jr\ \B\SV   \\SV4   4   r\ \1\SW   \\SW4   4   r          SSX jr\ " SY S95      5       r    SSZ jr\SS[ j5       r\      SS\ j5       r\      SS] j5       r      SS^ jr\1\%GRP                  GRR                  \;4r      SS` jr            SSa jr " Sb Sc5      r " Sd Se\C5      r    SSf jr\%GR`                   S       SSg jj5       r          SSh jrSqSi\zSj'   \SSk j5       r " Sl Sm\O5      r\" \5      r " Sn So\O5      r\" \5      r " Sp S_\T5      r " Sq Sr\(GRt                  GRv                  5      r " Ss St\(GRz                  5      r        SSu jr\SSv j5       r " Sw Sx\5      r " Sy Sz5      r " S{ S|\5      r " S} S~5      rSqS\zS'   \SS j5       r   SSSSSNS.                 SS jjjrSS jrSS jrSS jrSS 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)WeakKeyDictionary)SymBoolSymIntTensor)enable_python_dispatcher)FakeScriptObject)trace_structured)fast_detach)
FakeTensorFakeTensorModeis_fakeunset_fake_temporarily)is_sparse_any)GraphModuleProxyTracer)_assign_attr)1_side_effectful_need_to_be_preserved_pre_dispatchArgumentTarget)_extract_tensor_metadata)Module)TorchFunctionMode)_disable_infra_mode
_push_mode_unset_infra_modeTorchDispatchMode)count)Thunk)CapturedTraceback)_WeakHashRefWeakIdKeyDictionaryWeakTensorKeyDictionary   )BackwardState)SymNode)MutableMapping)
OpOverload)PHBase)IntLikeType)
PythonKeyTracerdispatch_tracemake_fxDecompositionInterpreterpy_sym_typesget_innermost_proxy_modeget_proxy_modehandle_sym_dispatchmaybe_enable_thunkifymaybe_disable_thunkify)rA   _GraphAppendingTracerExnot_implementedzMapping[OpOverload, Callable]CURRENT_DECOMPOSITION_TABLETU_PRc                    [        U 5      S 4$ N)list)xss    v/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/fx/experimental/proxy_tensor.py<lambda>rW   ~   s    R$    c                    [        U 5      $ rS   )tuple)rU   _s     rV   rW   rW      s    %)rX   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 rS   )	enumeratepytreeSequenceKey)rU   ixs      rV   rW   rW      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 ).0r`   s     rV   	<genexpr>!fake_signature.<locals>.<genexpr>   s     8<a#aS	<s   zlambda z: fn()fn)joinrangeeval)rm   nargsargnamess      rV   fake_signaturers      s:    xx85<88H'(5
!4tRjAArX   c              #  R   #    [         nU =(       d    0 q  [         v   Uq g ! Uq f = f7frS   )rM   )decomposition_tableold_decomposition_tables     rV   	decomposerw      s0     
 :"5";>))&=#&=#s   '  '$'c                      \ rS rSrSrg)
_NoDefault   rh   N__name__
__module____qualname____firstlineno____static_attributes__rh   rX   rV   ry   ry          rX   ry   )rE   	PySymTypec                       \ rS rSr% S\S'   Srg)_HasMeta   zdict[str, PySymType]metarh   Nr|   r}   r~   r   __annotations__r   rh   rX   rV   r   r      s    
rX   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   
isinstancerE   )nodes    rV   is_sym_noder      s?    4  W"WW DIIL*TYYu-=|"LLrX   _ProxyTensorc                    g rS   rh   objtracerproxys      rV   set_proxy_slotr          rX   c                    g rS   rh   r   s      rV   r   r           rX   c                    g rS   rh   r   s      rV   r   r      r   rX   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_trackerrE   typesymnode_trackertypingcast_PySymProxyTypesympyr   exprSymbolsympy_expr_tracker)r   r   r   r   s       rV   r   r      s    
 II)33?#v %....%*c"	C*	,	,%'''',1$$S) #|,,7d3i7,,,,*0++ou*MF""3' #((--66;@))#((--8 7# -rX   c                    [        U [        [        45      (       d   [        U 5      5       e[	        [        XSS 5      5      $ )NFc                    gNTrh   )r[   s    rV   rW    has_proxy_slot.<locals>.<lambda>   s    TrX   )r   r   r<   r   boolget_proxy_slotr   r   s     rV   has_proxy_slotr      s7    cFG,--8tCy8-sE>BCCrX   c                    g rS   rh   r   s     rV   r   r          
 rX   c                    g rS   rh   r   r   defaults      rV   r   r           rX   c                    g rS   rh   r   r   r   	transforms       rV   r   r   	       rX   c                    g rS   rh   r   s     rV   r   r     r   rX   c                    g rS   rh   r   s      rV   r   r     r   rX   c                    g rS   rh   r   s       rV   r   r   $  r   rX   c                    g rS   rh   r   s     rV   r   r   .  r   rX   c                    g rS   rh   r   s      rV   r   r   6  r   rX   c                    g rS   rh   r   s       rV   r   r   ?  r   rX   c                    U $ rS   rh   ra   s    rV   rW   rW   P  s    ArX   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   rE   r   r   r   r   r   ry   RuntimeErrorr   )r   r   r   r   trackervalueress          rV   r   r   L  s     #v''	C)	*	*..#|,,7d3i7,((
c<((SXX]]f>W>W-W--chhmm<E':.."e2bgY&EfXN  N
E
CJrX   c                x    [        U [        5      (       a  [        U R                  U 5      $ U R	                  5       $ rS   )r   r!   r    	fake_modedetach)r   s    rV   snapshot_faker   k  s.     #z""3==#..zz|rX   _ExtractValType)r   .c                   [        U 5      (       a  [        U 5      $ [        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  p#U[        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)Nr   )detect_fake_modeT)allow_fallback_kernels)devicedtype)r#   r   r   rE   r   r;   rT   rZ   	__class__extract_valdictitemsr   	is_sparsetorch._guardsr   r"   torchempty_stridedshapestrider   r   intfloatr   typing_extensionsassert_never)r   ra   kvr   fake_tensor_modes         rV   r   r     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<G1A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      rV   _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   rG   r   r   
proxy_modes    rV   rJ   rJ     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    rV   rI   rI     s;       !Jj//0 10 	 10s   #A	8A	
AA	c                   [        U5      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)Nr   tensor_meta)
r   r   r   r   r   r#   r-   r   r   r   )r   r   s     rV   set_metar     s    (-EJJOOE	%,,	'3<<-Ec-JEJJOOM*V$$S]]-Ec-JEJJOOM* 
( L 
(	' Ls   A<B>>
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 $ rS   rh   )rs   rV   rW   thunkify.<locals>.<lambda>   s    QrX   )r   r5   	functoolspartial)r   fargskwargsr   s       @rV   thunkifyr     sH     Y&&q:4:6:;;tvYrX   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rS   )callabler   r   r   r   r   )outer_sproxy_callabler   r   r   s       rV   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   ra   r`   r   r   s     rV   rW   track_tensor.<locals>.<lambda>  s>    ###UYY^^%<%<%@%@5!*b 	rX   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     rV   rW   r  *  s@    X''')B)B)F)FPQ
TV 	rX   c                   > [        TR                  S[        R                  R                  R
                  R                  T40 5      U 5      $ r  )r   r  r   r  r  	sym_numelr   ra   r   r   s    rV   rW   r  5  s<    (!9!9!A!AE8R 	
rX   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    rV   rW   r  ?  s?    h###IINN55==H	 rX   )
r   r@   r   z+Callable[Concatenate[PySymType, _P], Proxy]r   _P.argsr   	_P.kwargsreturnNone)r]   r   r%   r   numelstorage_offsetr   r   )tensorr   constantr   r  r`   ss    ` `   rV   track_tensorr    s    C  	
 
( &,,' 		
 (   fmmo.DA 	 / 	
   !!#	
 66<x#@ArX   _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 $ rS   rh   r   s   rV   rW   <track_tensor_tree.<locals>.wrap_with_proxy.<locals>.<lambda>v  s    urX   c                L    U c  g [        U [        [        45      (       d   eX   $ rS   )r   rT   rZ   )cidxs     rV   get_constant@track_tensor_tree.<locals>.wrap_with_proxy.<locals>.get_constant  s*     9%a$77776MrX   )r%  Optional[_NestedTensors]r&  r   r  r)  )r   r   r'   r  r   rE   r   r   r   rZ   rT   fxr]   r   r   r;   r   )
er   r  r'  r&  eekeyr   r   wrap_with_proxys
    `      rV   r.  *track_tensor_tree.<locals>.wrap_with_proxyj  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 rX   )r+  objectr   r  r  r)  r  r  )_set_unbacked_bindings)	inner_res	proxy_resr  r   r.  s      `@rV   track_tensor_treer4  T  sJ    ( 90::':3K:	: :x I(3rX   c                  *    \ rS rSr% S\S'   S\S'   Srg)r   i  r'   r   Optional[Tensor]r  rh   Nr   rh   rX   rV   r   r     s    LrX   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       $ rS   )r   r  r   	is_numberr   r   r   r   r   r   rE   r   force)r+  nr   s     rV   innerfetch_sym_proxy.<locals>.inner  s    FF::!::66;;  !W%%AFFKK((Av&&166;;''%%a....!!V,2244rX   )r+  r   r  zUnion[int, bool, float, Proxy]rh   )r   r<  s   ` rV   fetch_sym_proxyr>    s    5 LrX   c                    g rS   rh   r   ts     rV   fetch_object_proxyrB    r   rX   c                    g rS   rh   r@  s     rV   rB  rB    r   rX   c                    g rS   rh   r@  s     rV   rB  rB    r   rX   c                    [        XU5      $ rS   r   r@  s     rV   rB  rB    s     !Q''rX   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_noderA  s       rV   _maybe_record_pointwise_barrierrZ    s     z'I'I tUZZ223399dii/T(:#4#4#:#:#@#@ABCI5!Aa&&!'': + 	8<INN45rX   c           	       ^ ^^ / 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 a"  T    US   S:g  R#                  5       sS S S 5        $ T R$                  nU V	s/ s H+  n	['        U	[(        [*        45      (       a  [-        X5      OU	PM-     n
n	[/        S U
 5       5      (       + =(       a    [/        S U 5       5      (       + n[        R0                  R2                  UR4                  ;   a  U(       ag  U
 Vs/ s H&  n['        U[6        5      (       a  UR8                  OUPM(     nn[         R:                  " X5      u  p[=        5          U" U0 UD6sS S S 5        $ T R>                  (       a2  [         R@                  " [(        S X445      (       a  [C        SU S	35      eU
 Vs/ s H&  n['        U[6        5      (       a  URD                  OUPM(     nnU Vs/ s H5  n['        U[F        5      (       a  [I        T R$                  5      " U5      OUPM7     nn[         R:                  " UU5      u  nnU[        R                  R                  RJ                  R                  L a.  [        R                  R                  RL                  R                  nT R$                  RO                  S
UUUT R$                  RP                  RS                  URT                  RV                  5      S9n[Y        T R$                  5         U" U0 UD6nS S S 5        [/        S U
 5       5      nS nSS jnU[        R                  R                  RL                  R                  L ap  WR[                  5       [\        ::  aX  [=        5          ['        US   [^        [(        45      (       d   [a        US   5      5       eUS   Rc                  5       nS S S 5        O[        R0                  Rd                  UR4                  ;  a  U(       a  U(       a  [         R@                  " [(        UW5      (       ag  [=        5          U
 Vs/ s H&  n['        U[6        5      (       a  UR8                  OUPM(     nn[         R:                  " X5      u  pU" U0 UD6nS S S 5        OS n[g        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$ rS   )	r   HANDLED_TYPESr   r   _allow_fake_constantr   _subclassesr!   append)ra   r   r   unrecognized_typess     rV   can_handle_tensor%proxy_call.<locals>.can_handle_tensor  sh    G}$Lq*:K:K(L**?T!W!2!2!=!= ??A%%d1g.rX   c              3  b   >#    U  H$  n[        U[        5      (       d  M  T" U5      v   M&     g 7frS   )r   r   )ri   ra   rb  s     rV   rj   proxy_call.<locals>.<genexpr>  s(     W-=AvAV# ##-=s   //zEProxyTensorMode tensors without proxy had unrecognized subclasses: %sr   c              3  l   #    U  H*  n[        U[        5      (       d  M  UR                  S L v   M,     g 7frS   r   r   r  ri   rA  s     rV   rj   re  9  s,      
'!\* AJJ$'   44c              3  B   #    U  H  n[        U[        5      v   M     g 7frS   )r   rE   )ri   ra   s     rV   rj   re  @  s     J9IAJq,//9Is   c                "    [        U 5      (       + $ rS   )r#   rA  s    rV   rW   proxy_call.<locals>.<lambda>S  s
    '!*nrX   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rS   rg  rh  s     rV   rj   re    s,      #Aa& 	

$#ri  c                0    U R                  5       [        :*  $ rS   )r  CONSTANT_NUMEL_LIMITrl  s    rV   tensor_numel_in_limit)proxy_call.<locals>.tensor_numel_in_limit  s    wwy000rX   r  r   )ra   r   r  r   )rA  r   r  r   )4r^   tree_flattenallnot_implemented_logr   NotImplementedmaybe_handle_decomprZ  r   r  r  sizer   r   r  rw   
is_nonzeroitemr   r   r   r   rB  anyrM  data_dependent_outputrO  r   r  tree_unflattenr$   _error_on_data_dependent_opstree_all_onlyr   r   rE   r>  
lift_freshlift_fresh_copyr  rS  _target_to_stroverloadpacketr|   r   r  rq  r'   r   clonenondeterministic_seededr4  )r   rX  pre_dispatchr   r   flat_args_kwargsspecr   r   ra   f_flat_args_kwargsall_constantrA  const_flat_args_kwargs
const_argsconst_kwargsr+  proxy_flat_args_kwargs
proxy_argsproxy_kwargs	proxy_outoutany_constantr  rr  rb  ra  s   `                        @@rV   
proxy_callr    s    &(#00$@  W-=WWW!!S	
 JF;A'j9 D		##		%%		%%--) 
 //A& Z& 
 uyy~~((000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Jc Z Z4& *)d 
-	,T &%& &%ss   W);W;+2X-XX1-X)$<X.	X3AY0Y5-Y""Y)
W8;
X

X&3
Y
YY
Y)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 rS   sym_node_dictselfs    rV   __init___SymNodeDict.__init__  s
    ?ArX   c                4    X R                   UR                  '   g rS   r  r   )r  r-  r   s      rV   __setitem___SymNodeDict.__setitem__  s    ',388$rX   c                4    U R                   UR                     $ rS   r  r  r-  s     rV   __getitem___SymNodeDict.__getitem__  s    !!#((++rX   c                4    UR                   U R                  ;   $ rS   )r   r  r  s     rV   __contains___SymNodeDict.__contains__  s    xx4----rX   Nc                N    U R                   R                  UR                  U5      $ rS   )r  rU  r   )r  r-  r   s      rV   rU  _SymNodeDict.get  s!    
 !!%%chh88rX   c                    [         erS   )NotImplementedErrorr  s    rV   __iter___SymNodeDict.__iter__  s    !!rX   c                ,    [        U R                  5      $ rS   )lenr  r  s    rV   __len___SymNodeDict.__len__  s    4%%&&rX   r  r  r  )r-  r   r   r   r  r  )r-  r   r  r   )r-  r   r  r   rS   )r-  r   r   zOptional[_PySymProxyType]r  r   )r  r   )r  r   )r|   r}   r~   r   __doc__r  r  r  r  rU  r  r  r   rh   rX   rV   r  r    sJ    B-,. DH99'@9	9"'rX   r  c                  6  ^  \ rS rSr% S\S'   S\S'   S\S'   S\S	'   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$ )#rA   i  +MutableMapping[_AnyScriptObjectType, Proxy]r   r  r   dict[sympy.Symbol, object]r   $MutableMapping[Tensor, _ProxyTensor]r   dict[OpOverload, int]torch_fn_countsFr   r   c                   > [         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 )Nrh   )autowrap_modulesr   ref_typeF)superr  r9   r   r  r   r8   r7   r   r   r   torch_fn_metadatar  r   )r  r   s    rV   r  PythonKeyTracer.__init__  sb    "-57+~%8&
" #'& "&  "$rX   c                    U" U0 UD6$ rS   rh   )r  mforwardr   r   s        rV   call_modulePythonKeyTracer.call_module  s     '''rX   c                    U$ rS   rh   )r  attrattr_valparameter_proxy_caches       rV   getattrPythonKeyTracer.getattr  s	     rX   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_attrrh   _param_constant)r   r   nn	Parameterrootnamed_parameterscreate_nodeget_fresh_qualnamesetattrrE   r   r  r  
create_arg)r  ar;  pqualnamer   s        rV   r  PythonKeyTracer.create_arg  s    a++,,		2246++J2rBB 5 ../@AHDIIx+##J"bAA<((66??...66??"w!!$$rX   c                    g rS   rh   r  r+  s     rV   unwrap_proxyPythonKeyTracer.unwrap_proxy.      rX   c                    g rS   rh   r  s     rV   r  r  2  r  rX   c                    g rS   rh   r  s     rV   r  r  6  s     	rX   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                   $ rS   r"  r   s    rV   rW   .PythonKeyTracer.unwrap_proxy.<locals>.<lambda>>  s    rX   c                "    U R                  5       $ rS   )r:  )r+  s    rV   rW   r  @  s
    	rX   )r   r   r   rE   r   r  s     rV   r  r  <  s\    a  !!1.?@@<((!!1.ABB+,,!!1--HrX   c                \  > [         TU ]  XX4XV5      nSS jn[        U[        R                  R
                  R                  [        R                  R
                  R                  45      (       a=  [        R                  R                  R                  X44U5      u  pX4UR                  S'   U$ )Nc                .   [        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     rV   map_fn+PythonKeyTracer.create_node.<locals>.map_fnQ  sg    a//53F&&-C #u||,,ZZ5P5Pqvve}--rX   arg_kwarg_vals)r   r   r  zOptional[_ExtractValType])r  r  r   r   _higher_order_opstriton_kernel_wrapTritonKernelWrapperFunctionalTritonKernelWrapperMutationr*  r   map_aggregater   )r  kindtargetr   r   rn  	type_exprr   r  arg_inp	kwarg_inpr   s              rV   r  PythonKeyTracer.create_nodeF  s     w"4tO	. ''::XX''::VV
 
 "'!<!<d^V!TG+2*>DII&'rX   )r   r   r   r   r   r  r  r  )
r  r.   r  zCallable[..., Any]r   ztuple[Any, ...]r   zdict[str, Any]r  r   r  strr  r0  r  zdict[str, Proxy]r  r0  )r  r0  r  fx.node.Node)r+  r   r  zUnion[Proxy, Tensor])r+  r   r  zUnion[Proxy, PySymType])r+  _AnyScriptObjectTyper  "Union[Proxy, _AnyScriptObjectType])r+  rN   r  r0  )NN)r  r  r  r,   r   ztuple[Argument, ...]r   zdict[str, Argument]rn  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   __classcell__r   s   @rV   rA   rA     s6   FF!!2288**!OT!%&(( $( 	(
 ( 
(#)BR	
%     %	+ 
  ##'     #	 
 $    !  
   rX   rA   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_moder1   r:   )torch.overridesr  r  r1   r   r`  rR  r  )r  r  r1   temp_elementsremoved_modemoder4   mode_tys          rV   context_manager_fnB_make_temp_remove_mode_context_manager.<locals>.context_manager_fnl  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   ` rV   &_make_temp_remove_mode_context_managerr  i  s      % %@ rX   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   rU  rE   )ri   r  s     rV   rj   6dispatch_trace.<locals>.impure_pred.<locals>.<genexpr>  s>      Aa) <
166::e,l;;s
   #A0A)	symbolic_shapesr  	is_impurer   r   rU  rE   rv  r   )r;  r  s     rV   impure_pred#dispatch_trace.<locals>.impure_pred  sk    5 ;;== A
 qvvzz%(,77      rX   r   )dedupe_symints)r;  zfx.Noder  r   )traceeliminate_dead_code,torch._inductor.fx_passes.dedupe_symint_usesr  r   r.   r   r|   r*  _lazy_graph_module_make_graph_moduler  )r  r   concrete_argsrS  r  r  rn  s          rV   rB   rB     sp     LL-E8 
k*K5&0v&>&>4>>""DMMD  33FKKMMrX   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)Nrt  c                "   > [        U TU S 5      $ )Nc                    U R                   $ rS   r"  r   s    rV   rW   Jwrap_key.<locals>.wrapped.<locals>.get_tensor_proxy_slot.<locals>.<lambda>  s    !''rX   rF  rA  r   s    rV   get_tensor_proxy_slot8wrap_key.<locals>.wrapped.<locals>.get_tensor_proxy_slot  s    !!VQ0ABBrX   c                "   > [        U TU S 5      $ )Nc                    U $ rS   rh   r   s    rV   rW   =wrap_key.<locals>.wrapped.<locals>.<lambda>.<locals>.<lambda>  s    qrX   rF  r"  s    rV   rW   +wrap_key.<locals>.wrapped.<locals>.<lambda>  s    q&![(QrX   c                8   > [        U T5      R                  5       $ rS   )r   r:  r"  s    rV   get_sym_proxy_slot5wrap_key.<locals>.wrapped.<locals>.get_sym_proxy_slot  s    !!V,2244rX   )rA  r   r  zUnion[Tensor, Proxy])rA  r   r  r'   )r^   ru  r  disable_proxy_modes_tracingr   rG  r4  tree_map_onlyr   r   rE   )proxies_unusedflat_proxies_proxies_specr  r#  r  r*  r   flat_tensorstensorsr   s           rV   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%)r.  r  r/  r  r  rQ   )r^   ru  r   wraps)r   r3  r   r  _tensors_specr4  r2  s   ```   @rV   wrap_keyr8    sA     #)"5"5g">L-__Q  , NrX   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)r9  fx_tracebackhas_preserved_node_metacurrent_meta)rX  s    rV   set_original_aten_opr?    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)	TorchFunctionMetadataModei  c                    Xl         g rS   r   r  r   s     rV   r  "TorchFunctionMetadataMode.__init__  s    rX   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  rU  r  rX  typesr   r   s        rV   __torch_function__,TorchFunctionMetadataMode.__torch_function__  sY     2(,%,0KK,G,G,K,KDRS,TWX,X##D)T$V$$rX   rC  r   _ProxyTracerr  r  rh   N
rX  r>   rH   tuple[torch._C._TensorMeta, ...]r   tuple[object, ...]r   Optional[dict[str, object]]r  r0  r|   r}   r~   r   r  rI  r   rh   rX   rV   rA  rA    sI     $&.2
%
% 0
% !	
%
 ,
% 

% 
%rX   rA  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 rS   )r   enter_autocast_nodesrD  s     rV   r  %PreDispatchTorchFunctionMode.__init__	  s     :<!rX   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_autocastrV  popr   r  _enter_autocastr`  _C_set_grad_enabledr   )r  rX  rH  r   r   
enter_noder   s          rV   rI  /PreDispatchTorchFunctionMode.__torch_function__  s     2DD
 uyy..===!66::<
"};;**?DKDuyy..>>>))006**		''77		''66 
 $(		% K T$V$$rX   )rV  r   rK  rM  )
rX  zUnion[OpOverload, Callable]rH  rO  r   rP  r   rQ  r  r0  rR  rh   rX   rV   rT  rT    sI    < $&.2%)% 0% !	%
 ,% 
% %rX   rT  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$ )rG  i4  c                    gr   rh   r  s    rV   enable_tracing%ProxyTorchDispatchMode.enable_tracing6      rX   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  r^  r  _TorchDispatchModeKeyPROXY	_mode_keyenter_stackrJ  torch._inductorrh  rK  )	r  r   rk  r  r^  r  dkrh  r   s	           rV   r  ProxyTorchDispatchMode.__init__:  s     2>UXX!!--4(($8!,H) 77== DF*'-'E'E$rX   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rS   )r?  primr   r   r  r  rG  s        rV   __torch_dispatch__)ProxyTorchDispatchMode.__torch_dispatch__U  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       $ rS   )	r2   r   r^  rl  rm  ro  r`  r  	__enter__)r  maybe_prev_proxy_moder   s     rV   rx   ProxyTorchDispatchMode.__enter__e  sA     1%((2P2P2V2V W 56w ""rX   c                x   > [         TU ]  XU5      nU R                  R                  5       nUb  [	        U5        U$ rS   )r  __exit__ro  r\  r1   )r  exc_type	exc_value	tracebackbmb_previous_proxy_moder   s         rV   r|  ProxyTorchDispatchMode.__exit__k  sA     GX)< "&!1!1!5!5!7!--.rX   c                    gr   rh   )clss    rV   is_infra_mode$ProxyTorchDispatchMode.is_infra_modez  rf  rX   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rS   r   rE   r   r   r:  r   ri   r  r  s     rV   rj   8ProxyTorchDispatchMode._compute_proxy.<locals>.<genexpr>  sM       % "!\22 #1dkk288:?? %   AAc              3     >#    U  HJ  n[        U[        5      (       a.  [        UTR                  5      R	                  5       R
                  OUv   ML     g 7frS   r  r  s     rV   rj   r    sM       A a.. q$++.446;; r  r  )	r  r   rT   rZ   r   r  r*  r'   r   )r  rX  r   r  n_argsn_outp_outs   `      rV   _compute_proxy%ProxyTorchDispatchMode._compute_proxy~  s    
 t9>ja4-@@  "!W	 F   	 F ''rJ,rX   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   )rX  r   r  )	operatormulr   r   rE   r   r   r  r   )r  rX  rH  r   r   r  p_out_thunks          rV   __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
rX   )	r^  r  rn  rJ  rK  ro  r  r   rk  )r  r   )FFT)r   rL  rk  r  r  r   r^  r   r  r   r  r  rM  rN  )r  r   )r}  zOptional[type[BaseException]]r~  zOptional[BaseException]r  zOptional[types.TracebackType]r  zOptional[bool])rX  r>   r   rP  r  r   r  r'   )
rX  r>   rH  rO  r   rP  r   dict[str, object]r  r0  )r|   r}   r~   r   propertyrd  r  r4   ru  rx  r|  classmethodr  r  r  r   r  r   s   @rV   rG  rG  4  sb     #%*-1FF F 	F
 #F '+F 
F F6 
 $&.2KK 0K !	K
 ,K 
K K#/ + 1	
 
  &8?H	: 0 !	
 " 
 rX   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$ )rK   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   r9   r   r   r8   r7   r   r  r  )r  rS  r   s     rV   r   _GraphAppendingTracerEx.__init__  sZ    &88:57"$%8&
" "&  "rX   )r   r   r   r   r  r  )rS  zfx.graph.Graphr  r  )	r|   r}   r~   r   r   r   r  r   r  r   s   @rV   rK   rK     s;    FF??8822++**!OT!" "rX   rK   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
$ )rD   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)rk  )r  r  	new_graphrK   r   ru   rG  r  )r  moduler  ru   r   r   s        rV   r  !DecompositionInterpreter.__init__  sK     	*6*"-dnn=#6#<" *4;;VL	rX   c                   > [         TU ]  XU5      n[        R                  " U R                  R                  U5      U R
                  5      n[        XES U R
                  S9  U$ Nrt  )r  placeholderr*  r'   r  r   r4  r  r  r   r   r  r   r   s         rV   r  $DecompositionInterpreter.placeholder  sN     g!&733F;T[[I#tDKKH
rX   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   r4  r  s         rV   r  !DecompositionInterpreter.get_attr  sN     gvV4008$++F#tDKKH
rX   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                  $ rS   )r   r   r   s    rV   get_proxy_node7DecompositionInterpreter.output.<locals>.get_proxy_node  s    77<<rX   c                4   > [        U TR                  U T5      $ rS   )r   r   )r+  r  r  s    rV   unwrap/DecompositionInterpreter.output.<locals>.unwrap  s    !!T[[!^DDrX   )ra   r   r  r  )r+  r   r  zUnion[Tensor, fx.Node])r  outputr  r^   tree_map)r  r  r   r   r  r  r  r   s   `     @rV   r  DecompositionInterpreter.output  sH     gnV62	 	E 	E 	foof:;
rX   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rS   )rw   ru   r  r  run)r  r   r   r   s      rV   r  DecompositionInterpreter.run  sF     t//0$))7;// 3<)00))000s!   A!A	A!
A	A!!
A/)ru   r  r  r   rS   )
r  fx.GraphModuler  fx.Graphru   'Optional[Mapping[OpOverload, Callable]]r   r0  r  r  )r  r  r   rP  r   r  r  r0  )r   r0  r   r0  r  r0  )r|   r}   r~   r   r  r  r  r  r  r   r  r   s   @rV   rD   rD     s    
 HL	MM M E	M
 M 
M M!3=N	!3=N	!3=N	0 0rX   rD   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$ rS   )r^   r  )	flat_argsfn_args	fn_kwargsrX  r  s      rV   r4  -wrapper_and_args_for_make_fx.<locals>.wrapped  s(    #229dCW*	**rX   )r  zlist[object]r  rQ   )r^   ru  )rX  r   r   r  r4  r  s   `    @rV   wrapper_and_args_for_make_fxr    s0    
 ))4.9OIt+ + rX   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    rV   disable_autocast_cacher    sE     //1I	$$U+4((3((3s   ,A%A
 A%
A""A%c                      \ rS rSrSrg)#_ModuleNotInstalledAsSubmoduleErrori&  rh   Nr{   rh   rX   rV   r  r  &  r   rX   r  c                      \ rS rSrSS jrSrg)
_AttrProxyi+  c                    g rS   rh   )r  basepaths      rV   reset_proxy_mapping_AttrProxy.reset_proxy_mapping,  s    rX   rh   N)r  r.   r  r  r  r  )r|   r}   r~   r   r  r   rh   rX   rV   r  r  +  s    rX   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$ )_ModuleStackTraceri0  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         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 )NF)remove_duplicatez<Shared module found between %s and %s, AttrProxy is enabled.Tr   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>.AttrProxyia  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 rS   )r   r  get_baser.   r   r   r|   __dict__r}   r~   proxy_pathsproxy_modules)r  r  r  r   s      rV   r  7_ModuleStackTracer.__init__.<locals>.AttrProxy.__init__b  s    dJ//==?D!$//// "&NN++^^T^^4"
 !%,0NN,E,E).2nn.I.I+ ,0""4(-1$$T*rX   c                   > [        U [        5      (       d   e[        TU ]  U5      n[        U[        5      (       d  U$ T" UTR                  U    S-   U-   5      $ N.)r   r.   r  __getattr__r  )r  rn  r  	AttrProxyr   r   s      rV   r  :_ModuleStackTracer.__init__.<locals>.AttrProxy.__getattr__w  s[    !$//// !7.t4!(F33#O 6+=+=d+Cc+ID+PQQrX   c                "   > TR                   U    $ rS   )r  rD  s    rV   r  7_ModuleStackTracer.__init__.<locals>.AttrProxy.get_base  s    ++D11rX   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   rT   _modulesr   r  
ModuleListvaluesr  r  )r  r&  r   r  r   r   s      rV   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//rX   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  
submodulesr-  r   r  r   s       rV   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  )rn  r  r  r  )r  r.   )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   @rV   r  r  a  s7    2*	R 	R20 0  rX   r  )r  r  
scope_rootenable_attr_proxysubmodule_pathsnamed_modulesr   infor   r  attr_proxy_mapr  counterr   rT   module_id_cacher   r`  r  
proxy_type)r  r  rn  r  modr  r   r   s        @@rV   r  _ModuleStackTracer.__init__C  s   $!&!44e4LGD(((R((+
 *.&*.$$Q' M @Q?REVEXDUDW*40666NID  C)006 O ?	 ?	
 ?	B $rX   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.
 N)r  r   r  r  r(   path_of_module	NameErrorr  )r  r  r+  s      rV   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   $ rS   )r   r.   r*  r&   r  r  r  r  r  r  r  )r  r  r  r  r   s       rV   r  _ModuleStackTracer.getattr  s     8V,,(BNN33))7?43HIIh
++O ...,0OOH,KD))==hM""8,,rX   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   r.   r   r  r  delattr)r   r  atomsr  target_submodr  r|  s          rV   _delete_proxy_attr4_ModuleStackTracer.trace.<locals>._delete_proxy_attr  s     LL%E"'*eBi-c6****C s)) c(!#
F';<<   3.. gc9:FFC'rX   )r   r.   r  r  r  r   )r  r  r  r  r  r`  r)   )r  r  r  r   !proxy_module_names_to_be_replacedrn  r  r
  proxy_module_nameproxy_moduleactual_moduler   s              rV   r  _ModuleStackTracer.trace  s     gmD0 KM) II335LD+++188$H 6	8 0Q+tyy*;< ..|<M		3DE 0Q
 
rX   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 S3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   )OptimizedModulez&Unable to find the path of the module z. This might be because the module was not properly registered as a submodule, which is not good practice. We will trace through the module without recording stack information.)	torch._dynamor  r   r&   r(   r  r  warningswarn)r  r  r  r   r   r  s         rV   r  _ModuleStackTracer.call_module  s     	2 a;788D+F++		,%%dwfEE2 	,MM8 <J J D+F++	,s   > ,A-,A-c                    gr  rh   )r  r  module_qualified_names      rV   is_leaf_module!_ModuleStackTracer.is_leaf_module  s    rX   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'   SUR                  ;  Ga5  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 HI  nUR$                  R'                  S
5      (       a  M%  UR$                  R'                  S5      (       a  MG  UPMK     n	nU	(       aY  [(        R*                  R-                  U	5      n	SR/                  U	R1                  5       5      R3                  5       UR                  S'   U$ s  snf s  snf )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  r  nn_module_stackr  r  torch_fnr[   stack_tracer  ztorch/__init__.pyzfx/_symbolic_trace.pyzexport/_trace.pyr  )r  r  opr   module_stackr   r   r   r}   r~   r  r|   r  r   r6   extractsummaryrn  filenameendswithr  StackSummary	from_listrn   formatstrip)r  r   r   r   r-  fqnmod_clsuser_frame_summaryframer  r   s             rV   r  _ModuleStackTracer.create_node  sX    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! 		)dgg=V.V!2!:!:!<!D!D!F!
 "4!3

i/ >>223FG	 !3   "-!,//0GH  !>>223EF	 !,    "+"8"8"B"B;"OK/1ww{7I7I7K/L/R/R/TDIIm,1s   .4J&&J&2$J+J+<J+)	r  r  r  r  r  r  r  r  r  )r  r&   r  r  )r  r.   r  r  r  )r  Union[Module, Callable]r  rQ  r  r  )
r  r.   r  r   r   rP  r   r  r  r  )r  r.   r  r  r  r   )r   r0  r   r0  r  r  )r|   r}   r~   r   r  r  r  r  r  r  r  r  r   r  r   s   @rV   r  r  0  s    $_$B= --#)-BR-	-&0+0<W0	0d,, , !	,
 ", 
,B? ?rX   r  c                      \ rS rSr                SS 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        g rS   )r   ru   
setdefaultr   r  r  r  r   _decompdecompositionsrk  _allow_non_fake_inputsr  record_module_stackr^  r  r   r   r   proxy_function_mode	fx_tracerpython_dispatcher_modetorch_fn_metadata_mode)r  ru   rk  r5  r  r6  r^  r  s           rV   r  _MakefxTracer.__init__`  s     @D%2@
  	  ++IINN$$,,emm.J.J.T.T	
 ".,B#".)< *>!2N) ;?FQm M 	  59?J}# M 	#rX   c                    U R                   U R                  U R                  U R                  U R                  U R
                  /$ rS   r   r   r7  r8  r9  r:  r  s    rV   _checkpoint_modes_MakefxTracer._checkpoint_modes  s>    !!OO$$NN''''
 	
rX   c                L    Xl         X l        X0l        X@l        XPl        X`l        g rS   r=  )r  prev_fake_tensor_modeprev_proxy_modeprev_proxy_function_modeprev_fx_tracerprev_python_dispatcher_modeprev_torch_fn_metadata_modes          rV   _restore_modes_MakefxTracer._restore_modes  s&     !6)#; '&A#&A#rX   c              #    #    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                  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 R/                  U R                  5        S v   U R0                  " U6   g ! , (       d  f       GN= f! , (       d  f       N= f! U R0                  " 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   rN  rO  2shape_env should be set if tracing with 'symbolic'r  zUnexpected tracing type: )r>  r  rJ  r   r6  rK  r  r8  rA   rk  r  _dynamoutilsr   torch._functorch.config
_functorchrh  patchr"   r5  r   rO  AssertionError_construct_modes_with_fx_tracerrG  )
r  r   r   
prev_modesrJ  r  r   r   _configrO  s
             rV   _init_modes_from_inputs%_MakefxTracer._init_modes_from_inputs  s     ++-
4	-1q+&&4+C+C[[
!3J!?!0!2  F*$#(==#6#6#G#G#M #+== PUV+937262M2M&.j*.	,( W )9%""j0$#(==#6#6#G#G#M #+ (
I== PUV+938262M2M&/,( W %..:HGH:(8%((F2(3D4E4E3FG  00@,G WV  WV& ,sO   H	B(G5 <GA*G5 G$A*G5 H	
G!G5 $
G2.G5 5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  r^  r  rQ  )rG  rk  r  r^  r  r   rT  r7  r   r9  rA  r:  )r  r8  s     rV   rY  -_MakefxTracer._construct_modes_with_fx_tracer  s}    0**!%!:!:)-)J)J
 'CI'ND$ 
*d.?.?*B*DD'&?	&J#rX   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   rA   r  r  r   )parent_tracers    rV   _create_sub_fx_tracerD_MakefxTracer._init_modes_from_parent.<locals>._create_sub_fx_tracer  sV    &/9*,,-(,>>-m.F.FGG&243F2GqI rX   )rb  rL  r  rA   )r>  r   r8  rY  rG  )r  rb  rZ  rc  s       rV   _init_modes_from_parent%_MakefxTracer._init_modes_from_parent  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                  $ rS   )r*  _symbolic_tracePH)r[   r   s    rV   rW   ,_MakefxTracer._trace_inner.<locals>.<lambda>  s    (@(@(C(CrX   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:   )sourcerQ  rR  )positive)hintrp  zScriptObject z. has been fakified. Cannot wrap_fake it again.)torch._dynamo.sourcern  r   r   r   from_tensorr   r   rk  rO  create_symintnodecreate_symbolScriptObject_libraryfake_class_registrymaybe_to_fake_objr   )ra   rn  rp  	arg_countr  r   s      rV   inner_wrap_fakeG_MakefxTracer._trace_inner.<locals>._wrap_fake.<locals>.inner_wrap_fake  sa    @,,888'%	{(;<a((NI00<<Q<NN!W^(9(9Z(G--77CLKLC00::LL--77EE F  % M    5#5#566 >>==OO--q  &'  U"1#%STU  rX   c                    U $ rS   rh   r   s    rV   rW   @_MakefxTracer._trace_inner.<locals>._wrap_fake.<locals>.<lambda>=  s    !rX   r  rL  rQ  )ra   r0  r  r0  )r^   r  rk  )r   r|  wrap_fn_mapr{  r  r   s      @rV   
_wrap_fake._MakefxTracer._trace_inner.<locals>._wrap_fake  sC    I! !H $'+K
 ??;t/@/@#A4HHrX   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_VARARGSrs   r  )r   phss     rV   
_wrap_func._MakefxTracer._trace_inner.<locals>._wrap_funcC  sS    GNN1-z::>>!$--669K9KK &aS22HrX   )r   r  artifactc                     SSS.$ )Nmake_fx_fail_partialstring)rn  encodingrh   rh   rX   rV   rW   rk  m  s     6$,)rX   c                 d   > T R                   R                  R                  SSSSS9R                  $ )Nr  T)root_moduleverboseinclude_strideinclude_device)r8  rS  python_codesrcr  s   rV   rW   rk  q  s8    t~~';';'G'G$* $'+'+	 (H (
 c(rX   )metadata_fn
payload_fnrQ  )r   rN   r  rN   )r   Callable[_P, R]r  zSequence[PHBase]r  r  )r  r^   r  r   r   rG  r   r   enter_contextrw   ru   r   r9  r7  r:  r  _set_make_fx_tracerr8  rB   r8  r  rZ   	Exceptionr   rk  rO  )r  r   r   r  r  r  rX  r   stackrA  r   s   `         @rV   _trace_inner_MakefxTracer._trace_inner  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rS   )r\  r  )r  r   r   s      rV   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  )	r0  ru   r5  r  r6  r^  r  re  r  )r  r   r   
sub_tracers       rV   trace_subgraph_MakefxTracer.trace_subgraph  st    "$$''$$%%--

 //5**14t4 655s   A<<
B
)r^  r5  r  ru   r   r8  r  r7  r   r9  r6  r:  rk  N)ru   r  rk  r  r5  r   r  r   r6  r   r^  r   r  r   r  r  )r  z	list[Any])rA  zOptional[FakeTensorMode]rB  z*Union[nullcontext, ProxyTorchDispatchMode]rC  z0Union[nullcontext, PreDispatchTorchFunctionMode]rD  zOptional[PythonKeyTracer]rE  zUnion[nullcontext, Any]rF  z-Union[nullcontext, TorchFunctionMetadataMode]r  r  )r   r   r   rP  r  Generator[None, None, None])r8  rL  r  r  )rb  r0  r  r  )r   r   r   r0  r  r&   )r   r   r   r0  r  r  )r|   r}   r~   r   r  r>  rG  r
   r\  rY  re  r  r  r  r   rh   rX   rV   r0  r0  _  s   &D& & !%	&
 & "& #& '+& 
&P
B7B DB #S	B
 2B &=B &SB 
B  8-8-!38-	$8- 8-tK& -*-	$- -6rh/5rX   r0  zOptional[_MakefxTracer]_CURRENT_MAKE_FX_TRACERc              #  8   #    [         n U q S v   Uq g ! Uq f = f7frS   )r  )r   prev_tracers     rV   r  r    s&      *K."("-+s    F)r  r6  r^  r  c          	        ^ ^	 US;   d   e[        UUUUUUU5      m	[        R                  " T 5      SU U	4S jj5       nU$ )z
Given a function f, return a new function which when executed with valid
arguments to f, returns an FX GraphModule representing the set of operations that
were executed during the course of execution.
r  c                 *   > TR                   " T/U Q76 $ rS   )r  )r   r   make_fx_tracers    rV   r4  make_fx.<locals>.wrapped  s    ##A---rX   )r   r0  r  r&   )r0  r   r6  )
r   ru   rk  r5  r  r6  r^  r  r4  r  s
   `        @rV   rC   rC     sW    " 7777"$N __Q. . NrX   c                 R    [         R                  R                  R                  5       $ rS   )r   rT  _python_dispatch _get_current_dispatch_mode_stackrh   rX   rV   get_torch_dispatch_modesr    s    ;;''HHJJrX   c                     [        5       $ rS   )rG   rh   rX   rV   rF   rF     s    rX   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   rL  _get_dispatch_mode_pre_dispatchr^  rl  rm  _get_dispatch_mode)pre_dispatch_moder  s     rV   rG   rG     s     

BB&&,, 88&&uxx'E'E'K'KLD!T\=	-.gdV<=1$$rX   c                    [        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)rG   r,  r  )rX  r   r   r  rH  s        rV   rH   rH     s<     DK4 
%	&$$T$? 
'	&	&s	   <
A
c                 \    [        [        R                  R                  R                  5      $ rS   )r0   r   r^  rl  rm  rh   rX   rV   r,  r,    s    uxx==CCDDrX   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      $ rS   )repr)r  s   rV   rW   %maybe_handle_decomp.<locals>.<lambda>  s	    48rX   r:   )!torch._inductor.compiler_bisectorr  rM   disable_subsystemrx  rJ  )r   r  r   r   r  r  s    `    rV   ry  ry    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.
)ru   rk  N)r  r,  rC   )rX  r   r   rk  ru   r4  all_argsgms           rV   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)r  r  r   r^  r  rl  FAKErO  r   r'   r   r   )r  	out_proxyr  r   symbol_to_paths        rV   r1  r1  !	  s    : ++EHH,J,J,O,OPIY((6y7J7JCPP>Pi//::/7ENN 34 Q )yrX   )rm   r  rq   r   r  r  )ru   r  r  z4Generator[Mapping[OpOverload, Callable], None, None])r   r   r  r   )r   r   r   rL  r   r   r  r  )r   r  r   rL  r   r'   r  r  )r   r   r   rL  r   r   r  r  )r   z.Union[PySymType, _AnyScriptObjectType, Tensor]r   rL  r   r0  r  r  )r   r   r   rL  r  r   )r   r   r   rL  r  r   )r   r   r   rL  r   rO   r  zUnion[_ProxyTensor, U])
r   r   r   rL  r   rO   r   zCallable[[_ProxyTensor], R]r  Union[R, U])r   r  r   rL  r  r'   )r   r  r   rL  r   rO   r  zUnion[Proxy, U])
r   r  r   rL  r   rO   r   zCallable[[Proxy], R]r  r  )r   r   r   rL  r  r   )r   r   r   rL  r   rN   r  zUnion[T, _PySymProxyType])
r   r   r   rL  r   rO   r   zCallable[[_PySymProxyType], R]r  r  )
r   .Union[Tensor, _AnyScriptObjectType, PySymType]r   rL  r   r0  r   r   r  r0  )r   r   r  r6  )r   r   r  r   )r   rL  r   r   r  r  )r  r  )r   r'   r   r   r  r'   )
r   rL  r   r  r   r  r   r  r  zThunk[R])
r  r   r   r'   r  r6  r   rL  r  r  )
r2  rN   r3  r  r  r)  r   rL  r  rN   )r   rL  r  z5Callable[[PySymType], Union[bool, int, float, Proxy]])r   rL  rA  r   r  zUnion[_ProxyTensor, Tensor])r   rL  rA  r  r  r  )r   rL  rA  r   r  z!Union[_PySymProxyType, PySymType])r   rL  rA  r  r  r0  )rX  r0  r   rG  r  r  )r   rG  rX  r>   r  r   r   rP  r   r  r  r0  )r	  ztype[TorchFunctionMode]r  zCCallable[[], _GeneratorContextManager[Optional[TorchFunctionMode]]]rS   )r  r.  r   r(   r  zOptional[tuple[Any, ...]]r  r&   )
r   r  r3  r  r   rL  r  r   r  r  )rX  r>   r  r  )rX  zCallable[..., R]r   rP  r   r  r  z0tuple[Callable[[list[object]], R], list[object]])r   r0  r  r  )Nr  F)r   r   ru   r  rk  r  r5  r   r  r   r6  r   r^  r   r  r   r  zCallable[..., GraphModule])r  zlist[TorchDispatchMode])r  z Optional[ProxyTorchDispatchMode])rX  r  r   r  r   r  r  rQ   )r  z-Generator[ProxyTorchDispatchMode, None, None])
r   rG  r  r>   r   rP  r   r  r  r0  )r  N)rX  r   r   rP  r   r  rk  r  ru   r  r  r&   )r  r0  r  r  r  r  )
__future__r   r   r  loggingr  r  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   
torch._opstorch.fxr*  torch.fx.tracebackr<  torch.utils._pytreerT  _pytreer^   r   r   r   torch._dispatch.pythonr   "torch._library.fake_class_registryr   torch._loggingr   torch._subclasses.fake_implsr    torch._subclasses.fake_tensorr!   r"   r#   r$   torch._subclasses.meta_utilsr%   r&   r'   r(   torch.fx.graph_moduler)   torch.fx.noder*   r+   r,   torch.fx.passes.shape_propr-   torch.nnr.   r  r/   torch.utils._python_dispatchr0   r1   r2   r3   torch.utils._statsr4   torch.utils._thunkr5   torch.utils._tracebackr6   torch.utils.weakr7   r8   r9   _backward_stater;   sym_noder<   rH  r=   r   r>   torch.fx._symbolic_tracer?   torch.typesr@   __all__rL  rw  r   r  r  r  rt  	getLoggerr|   r   _logginggetArtifactLoggerrw  rM   r   rq  rN   rO   rP   rQ   r   null_ctx_typeregister_pytree_nodeSizers   rw   r0  
proxy_slotry   
no_defaultrE   r   r   r   r   r   r   r   r   rT   rZ   r   r  r   r   r   r   r   r   rJ   rI   r   r   r  r  r  r4  r   r>  rB  r  r  r]  rZ  r  r  rA   r  _disable_dynamorB   r8  r9  r?  rA  )_temp_remove_metadata_torch_function_moderT  -_temp_remove_pre_dispatch_torch_function_moderG  r   GraphAppendingTracerrK   InterpreterrD   r  r  r  r  r  r  r0  r  r  rC   r  rF   rG   rH   r,  ry  r  r1  rh   rX   rV   <module>r     s
   #          0 8 8 W W !	 	 	 ; : %    ) ) $ $ ) ) ; ? + 4  7 / / . 
 @  -  % $ 4 W W *  .%/' AB&&(89 U//1AAB yy~~yy~~!nn66xARS =? : ? CLCLt_CL[!   	JJ &	B 	>@	>9	> 	> X
	 	 \
 /x M
 
 
 
	'3<A	 
 
	(1@	 
)A	7)A)A )A 
	)AXD
 , 
	  
 
	  	 
 
	  +	
  
 
	  
 
	  	 
 
	  $	
  
 
	  
 
	  	 
 
	  .	
  
 !%		7  	
 > 	$%S##$		 %(P ,0%%%)% % %$    0	  , 5< HQ  FBFB FB/?FBIUFB	FBR 	8O$gfo.E&FF 
H%&8H0H(II
TTT '	T
 T Tn   
:* 
 
 
1' 
 
&& 
((K(( ++Z8=
=4=	=4W&W
W W 	W
 W Wt' '>qf qh$$$H$N  04)N
!)N)N -)N 	)N )NX!(2>NR@ #' &  % 1 %" -S- )$%#4 $%N 1W 1 -
F. FR"bhh;; "440r~~ 40n
"4>O5 4 4	) 	
 
l l^	q5 q5h	 48 0 7 . . DH#(	!  %!&)-!!@! ! !	! ! ! ! #'!  !HK% @  E E&  	
 6 CG

  	
 A ,FrX   