
    rhc                      U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZmZ d dlmZmZmZ d dlmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZ d dlm Z m!Z!m"Z"m#Z#m$Z$ d d	l	m%Z% d dl&Z&d dl'Z&d dl(m)Z) d dl*m)c mZ+ d dl,m-c m.Z/ d d
l&m0Z0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z<m=Z=m>Z>m?Z? d dl@mAZA d dl(mBZBmCZCmDZD d dlEmFZF d dlGmHZHmIZImJZJ d dlKmLZL d dlMmNZN d dlOmPZP d dlQmRZRmSZSmTZTmUZU d dlVmWZW d dlXmYZY d dlZm[Z[ d dl\m]Z]m^Z^m_Z_ ddl`maZa ddlbmcZc er d dldZdd dlmeZe d dlfZfd d l'mgZg d d!lhmiZi d d"ljmkZk g d#Zled$   Zme&j                  e6fZoee&j                  e6f   Zpe&j                  j                  Zre&j                  j                  Zs ej                  eu      Zve&j                  j                  eud%      Zyi azd&e{d'<   dZ| ed(      Z} ed)      Z~ e!d*      Z ed+      Z e#d,      Z ee      Z e/j                  e&j
                  d- d. d/ d01       e&j
                  eiZdd2Ze	 	 	 	 dd3       Z e       Z G d4 d5      Z e       Zd d6ljmZmZ  G d7 d8e      Zdd9Zedd;       Ze	 	 	 	 	 	 	 	 dd<       Ze	 	 	 	 	 	 	 	 dd=       Z	 	 	 	 	 	 	 	 dd>Zdd?ZeYeC   Ze	 	 	 	 	 	 dd@       Ze	 	 	 	 	 	 	 	 ddA       Ze	 	 	 	 	 	 	 	 	 	 ddB       Ze	 	 	 	 	 	 ddC       Ze	 	 	 	 	 	 	 	 ddD       Ze	 	 	 	 	 	 	 	 	 	 ddE       Ze	 	 	 	 	 	 ddF       Ze	 	 	 	 	 	 	 	 ddG       Ze	 	 	 	 	 	 	 	 	 	 ddH       ZedI f	 	 	 	 	 	 	 	 	 ddJZdddLZeeeepeaedM   edN   eedMf   e2eeef
      ZdddOZedPdQ	 	 	 	 	 ddR       ZeddS       ZeddT       ZddUZ	 	 	 	 	 	 	 	 	 	 ddVZ	 	 	 	 	 	 	 	 	 	 ddWZeeCedX   eedXf   f   Zee2edY   eedYf   f   Z	 	 	 	 	 	 	 	 	 	 ddZZe G d[ d:             Z	 	 	 	 dd\Ze	 	 	 	 	 	 dd]       Ze	 	 	 	 	 	 dd^       Ze	 	 	 	 	 	 dd_       Z	 	 	 	 	 	 dd`Ze2e&jV                  jX                  e<fZ	 	 	 	 	 	 ddbZ	 	 	 	 	 	 	 	 	 	 	 	 ddcZ G dd de      Z G df dgeD      Z	 d	 	 	 	 	 ddhZ	 	 	 	 ddiZe&jh                  	 d	 	 	 	 	 	 	 ddj       Z	 	 	 	 	 	 	 	 	 	 ddkZdadle{dm<   eddn       Z G do dpeP      Z ee      Z G dq dreP      Z ee      Z G ds daeU      Z G dt due)j|                  j~                        Z G dv dwe)j                        Z	 	 	 	 	 	 	 	 ddxZeddy       Z G dz d{eū      Z G d| d}      Z G d~ de      Z G d d      Zdade{d<   edd       Z	 	 	 ddKdKdKdPdKd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZddZ	 	 	 	 	 	 	 	 ddZedd       Z	 	 	 	 	 	 	 	 	 	 ddZ	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZddZy)    )annotationsN)defaultdictOrderedDict)	GeneratorMappingSequence)_GeneratorContextManagercontextmanager	ExitStacknullcontext)	dataclass)AnyCallableOptionaloverloadProtocolTYPE_CHECKINGTypeVarUnion)Concatenate	ParamSpecSelf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                    t        |       d fS N)list)xss    u/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/torch/fx/experimental/proxy_tensor.py<lambda>rZ   ~   s    R$     c                    t        |       S rV   )tuple)rX   _s     rY   rZ   rZ      s
    %) r[   c                x    t        |       D cg c]  \  }}t        j                  |      |f c}}d fS c c}}w rV   )	enumeratepytreeSequenceKey)rX   ixs      rY   rZ   rZ      s5    09">1&

Q
	#>% >s   !6z
torch.Size)flatten_with_keys_fnserialized_type_namec                n    dj                  d t        |      D              }t        d| d| dd| i      S )z*FX gets confused by varargs, de-confuse it,c              3  &   K   | ]	  }d |   yw)argN ).0rc   s     rY   	<genexpr>z!fake_signature.<locals>.<genexpr>   s     8a#aS	8s   zlambda z: fn()fn)joinrangeeval)ro   nargsargnamess      rY   fake_signatureru      s:    xx85<88H'(5
!4tRjAAr[   c              #  H   K   t         }| xs i a 	 t          |a y # |a w xY wwrV   )rO   )decomposition_tableold_decomposition_tables     rY   	decomposery      s1     
 :"5";>))&=#&=#s   " ""c                      e Zd Zy)
_NoDefaultN__name__
__module____qualname__rk   r[   rY   r{   r{          r[   r{   )rG   	PySymTypec                      e Zd ZU ded<   y)_HasMetazdict[str, PySymType]metaNr}   r~   r   __annotations__rk   r[   rY   r   r      s    
r[   r   c                    t        | d      sJ d       d| j                  v xr t        | j                  d   t              S )Nr   z3All nodes traced with proxy_tensor should have metaval)hasattrr   
isinstancerG   )nodes    rY   is_sym_noder      s<    4 W"WW DIIL*TYYu-=|"LLr[   _ProxyTensorc                     y rV   rk   objtracerproxys      rY   set_proxy_slotr      s    TWr[   c                     y rV   rk   r   s      rY   r   r           r[   c                     y rV   rk   r   s      rY   r   r      r   r[   c                ^   t         j                  d| t        |       |       t        | t              r"t        |t
              sJ ||j                  | <   y t        | t              r"t        |t              sJ ||j                  | <   y t        | t              sJ t        |              | |j                  vrzt        j                  t        |      |j                  | <   dd l}t        | j"                  j$                  |j&                        r$||j(                  | j"                  j$                  <   y y y )Nzset_proxy_slot %s (%s) %sr   )logdebugidr   r   r   tensor_tracker_AnyScriptObjectr)   script_object_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,f,,,*0++ou*MF""3' #((--6;@))#((--8 7# -r[   c                ~    t        | t        t        f      sJ t        |              t	        t        | |dd             S )NFc                     yNTrk   )r^   s    rY   rZ   z has_proxy_slot.<locals>.<lambda>       r[   )r   r   r>   r   boolget_proxy_slotr   r   s     rY   has_proxy_slotr      s6    cFG,-8tCy8-sFE>BCCr[   c                     y rV   rk   r   s     rY   r   r      s     r[   c                     y rV   rk   r   r   defaults      rY   r   r     s    
 !r[   c                     y rV   rk   r   r   r   	transforms       rY   r   r          r[   c                     y rV   rk   r   s     rY   r   r     s     r[   c                     y rV   rk   r   s      rY   r   r     s    
 r[   c                     y rV   rk   r   s       rY   r   r   #  r   r[   c                     y rV   rk   r   s     rY   r   r   ,  s     r[   c                     y rV   rk   r   s      rY   r   r   3  s    
 !$r[   c                     y rV   rk   r   s       rY   r   r   ;  r   r[   c                    | S rV   rk   rd   s    rY   rZ   rZ   K  s    A r[   c                   t        | t              r|j                  }nIt        | t              r|j                  }n,t        | t
              sJ t        |              |j                  }| |vrt        | t
              rF| j                  j                  |j                  v r$|j                  | j                  j                     }n3t        |t              rt        |  dt        |        d|       |S ||    } ||      }|S )Nz (z)is not tracked with proxy for )r   r   r   r   r   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                p    t        | t              rt        | j                  | |      S | j	                         S rV   )r   r#   r"   	fake_modedetach)r   include_reals     rY   snapshot_faker   f  s-     #z"3==#|<<zz|r[   _ExtractValType)r   .c                B   t        |       rt        | |      S t        | t              r| S t        | t              r| S t        | t
              r| S t        | t        t        f      r(| j                  | D cg c]  }t        |       c}      S t        | t              r-| j                         D ci c]  \  }}|t        |       c}}S t        | t              rz| j                  smddlm}  ||       }|st!        d      }|5  t#        j$                  | j&                  | j)                         | j*                  | j,                        cd d d        S y t        | t.        t0        t2        f      r| S | y t5        j6                  |        y c c}w c c}}w # 1 sw Y   *xY w)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     sL   s|S|<<	C	&
	C)	*
	C	'
	C$	'}}c:k!n:;;	C	.1iik:da;q>!::	C	 }} 7/4##1#N ! **IIszz|CJJcii 
 	C#ud+	,
	""3'7 ;: s   4F
0FAFFTenablec             #  b   K   | j                   }|| _         	 d || _         y# || _         w xY ww)a{  
    Enable thunkification inside the context manager.  Thunkification prevents
    SymNode computation from directly being traced into an FX graph; instead,
    the compute is only added to the graph if it is actually used.  This helps
    us track SymNode compute when it is computed (since we need /something/
    to put in the tracker) even if it is unlikely to be used.
    N)enable_thunkify)r   r   olds      rY   _enable_thunkifyr     s3      
 
 C#F%!$s   /# /	,/c               #     K   t               } | %t        | j                  d      5  d ddd       yd y# 1 sw Y   yxY ww)a[  Within a context, disable thunkification.  See :func:`maybe_enable_thunkify`
    for more details.  This is helpful if you have a wrapper function which
    you want to enable thunkification on, but in some segment on the inside (say,
    the original user function), you want to disable thunkification as you know
    it is not needed there.
    NFr   rI   r   r   
proxy_modes    rY   rL   rL     sG       !Jj//> 		 	 		 	s   $A9AAAc               #     K   t               } | #t        | j                        5  d ddd       yd y# 1 sw Y   yxY ww)a3  Within this context manager, if you are doing make_fx tracing, we will thunkify
    all SymNode compute and avoid tracing it into the graph unless it is actually needed.
    You should prefer to avoid using this as much as possible, as lazy evaluation of
    SymNode tracing can lead to long chains of thunks which will stack overflow
    if you evaluate them.  However, this is currently sometimes necessary as there
    are buggy parts of PT2 which will fail with "s0 is not tracked with proxy" error
    due to insufficient tracing of SymNode computation.
    Nr   r   s    rY   rK   rK     sE       !Jj//0 		 	 		 	s   "A7AA Ac                   t        || j                  j                  dk(        | j                  j                  d<   t	        | j
                        5  t        |      r#t        |      | j                  j                  d<   n>t        |t              r.|j                  s"t        |      | j                  j                  d<   d d d        | S # 1 sw Y   | S xY w)Nplaceholderr   r   tensor_meta)r   r   opr   r   r   r%   r/   r   r   r   )r   r   s     rY   set_metar     s    (5::==M9EJJOOE 
%,,	' K3<-Ec-JEJJOOM*V$S]]-Ec-JEJJOOM*K LK Ls   A-CCc                    | j                   r"t        t        j                  |g|i |      S  ||i |t        fd      S )zT
    Delays computation of f until it's called again
    Also caches the result
    c                      S rV   rk   )rs   rY   rZ   zthunkify.<locals>.<lambda>  s    Q r[   )r   r7   	functoolspartial)r   fargskwargsr   s       @rY   thunkifyr     sH     Y&&q:4:6:;;tvYr[   c                  	 	 	 	 	 	 	 	 	 	 dfd}t        | j                        D ]  \  }} ||fd|        t        |       s/t        | j                               D ]  \  }} ||fd|         || j	                         fd       t        |       s || j                         fd       t        | t        |             y )Nc           
         t        |      sJ t        | t              r1t              5  t	        | t        || g|i |       d d d        y y # 1 sw Y   y xY wrV   )callabler   r   r   r   r   )outer_sproxy_callabler   r   r   s       rY   try_set_proxy_slotz(track_tensor.<locals>.try_set_proxy_slot  sh     '''gv&!&) V^WNtNvN  ' s   AAc                    t        j                  dt        j                  j                  j
                  j                  |fi       |       S Ncall_function)r   create_proxyr   opsatensym_sizer   rd   rc   r   r   s     rY   rZ   ztrack_tensor.<locals>.<lambda>  s@    ###UYY^^%<%<%@%@5!*b 	 r[   c                    t        j                  dt        j                  j                  j
                  j                  |fi       |       S r  )r   r  r   r  r  
sym_strider   r  s     rY   rZ   ztrack_tensor.<locals>.<lambda>'  sB    X''')B)B)F)FPQ
TV 	 r[   c                    t        j                  dt        j                  j                  j
                  j                  fi       |       S r  )r   r  r   r  r  	sym_numelr   rd   r   r   s    rY   rZ   ztrack_tensor.<locals>.<lambda>2  s>    (!9!9!A!AE8R 	
 r[   c                    t        j                  dt        j                  j                  j
                  j                  fi       |       S r  )r   r  r   r  r  sym_storage_offsetr   r  s    rY   rZ   ztrack_tensor.<locals>.<lambda><  sA    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  	
 
( &,,' 

1 		


  fmmo. 
	DAq 	
	 	
  !!#	
 66<x#@Ar[   _NestedProxys_NestedTensorsc               T    t        | |       	 	 	 	 	 	 	 	 dfd | ||       | S )Nc           	        t        | t              rBt        t              sJ |t        |t              sJ t        | |       t	        |        y t        | t
              r9t        t              sJ t	        |        t        | t        fd             y t        | t              r,t        t              sJ t        |        t	        |        y t        | t        t        f      rXt        t        j                        rt	        |        	 	 	 	 	 	 dd}t        |       D ]  \  }} 	||    |||              y t        | t              rP|J t        t        j                        rt	        |        | j                         D ]  \  }} 	||   d         y t        | t              r&t        t              sJ t	        |        | _        y y )N)r   r  c                      S rV   rk   r   s   rY   rZ   z<track_tensor_tree.<locals>.wrap_with_proxy.<locals>.<lambda>s  s    u r[   c                B    | y t        | t        t        f      sJ | |   S rV   )r   rW   r]   )cidxs     rY   get_constantz@track_tensor_tree.<locals>.wrap_with_proxy.<locals>.get_constant}  s)     9%a$777S6Mr[   )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   r(  z*track_tensor_tree.<locals>.wrap_with_proxyg  s    a eU+++#z(F'CCCE&8DUA<(eU+++UA1fhv}&EF+,eU+++1fe,UAE4=)%*""+"25")" %Q< MR  E#JXs0KLM
 4  ###%*"GGI 7SU3Z67 =)eU+++UAAG r[   )r%  objectr   r  r  r#  r  r  )_set_unbacked_bindings)	inner_res	proxy_resr  r   r(  s      `@rY   track_tensor_treer-  Q  sI    ( 9i0::':3K:	:x Iy(3r[   c                  "    e Zd ZU ded<   ded<   y)r   r)   r   Optional[Tensor]r  Nr   rk   r[   rY   r   r     s    Lr[   c                     d fd}|S )Nc                   | j                   }|j                  |j                  S | j                   j                  j                  r}t	        | t
              rt        | j                   j                        S t	        | t              rt        | j                   j                        S t        | j                   j                        S t	        | t              sJ t        |       j                         S rV   )r   r  r   	is_numberr   r   r   r   r   r   rG   r   force)r%  nr   s     rY   innerz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   r5  s   ` rY   fetch_sym_proxyr6    s    5 Lr[   c                     y rV   rk   r   ts     rY   fetch_object_proxyr:    s     #&r[   c                     y rV   rk   r8  s     rY   r:  r:    s     *-r[   c                     y rV   rk   r8  s     rY   r:  r:    s     ),r[   c                    t        || |      S rV   r   r8  s     rY   r:  r:    s     !VQ''r[   ProxyTorchDispatchModec                $   |j                   s|j                  syt        | t        j                  j
                        r&t        j                  j                  | j                  vryt        t        t        |j                  j                  j                                    }|j                  j!                  d      }t        |t        j"                        r,|j$                  t        j&                  t        j(                  fvryd|j                  d<   y)zd
    Records pointwise operators in user program (non decomposed) that were output in fp16/bf16
    Nr   Tlow_precision_pointwise_barrier)decomp_layersemulate_precision_castsr   r   _opsr@   Tag	pointwisetagsnextiterreversedr   graphnodesr   getr   r   bfloat16float16)funcr   	last_noder9  s       rY   _maybe_record_pointwise_barrierrR    s     z'I'I tUZZ22399dii/T(:#4#4#:#:#@#@ABCI5!Aa&!'': + 	8<INN45r[   c           	          g t        j                  ||f      \  }}d fdt        fd|D              st        j	                  d       t
        S t         |||      }|t
        urt        |        |S |s|t        j                  j                  j                  j                  t        j                  j                  j                  j                  t        j                  j                  j                  j                  fvr1 5   |j                  |i |}|t
        ur|cd d d        S 	 d d d        |t        j                  j                  j                   j                  u rM 5  t        j"                  |d   j%                         dk(  d        |d   dk7  j'                         cd d d        S  j(                  }|D 	cg c]&  }	t+        |	t,        t.        f      rt1        ||	      n|	( }
}	t3        d |
D               xr t3        d |D               }t        j4                  j6                  |j8                  v r|r`|
D cg c]   }t+        |t:              r|j<                  n|" }}t        j>                  ||      \  }}tA               5   ||i |cd d d        S  jB                  r-t        jD                  t,        d	 ||f      rtG        d
| d      |
D cg c]   }t+        |t:              r|jH                  n|" }}|D cg c]/  }t+        |tJ              r tM         j(                        |      n|1 }}t        j>                  ||      \  }}|t        j                  j                  jN                  j                  u r.t        j                  j                  jP                  j                  } j(                  jS                  d||| j(                  jT                  jW                  |jX                  jZ                              }t]         j(                        5   ||i |}d d d        t3        d |
D              }d }dd}|t        j                  j                  jP                  j                  u rjj%                         t^        k  rStA               5  t+        |d   t`        t,        f      sJ tc        |d                |d   je                         }d d d        nt        j4                  jf                  |j8                  vr|r}|r{t        jD                  t,        |      r`tA               5  |
D cg c]   }t+        |t:              r|j<                  n|" }}t        j>                  ||      \  }} ||i |}d d d        nd }ti        |||       t        |        |S # 1 sw Y   |xY w# 1 sw Y   xY wc c}	w c c}w # 1 sw Y   6xY wc c}w c c}w # 1 sw Y   xY w# 1 sw Y   nxY wc c}w # 1 sw Y   xY w)Nc                    t        |       t        v xs t        | j                        }j                  r*|xs& t        |       t
        j                  j                  fv }|sj                  t        |              |S rV   )	r   HANDLED_TYPESr   r   _allow_fake_constantr   _subclassesr#   append)rd   r   r   unrecognized_typess     rY   can_handle_tensorz%proxy_call.<locals>.can_handle_tensor  sh    G}$Lq*:K:K(L**?T!W!2!2!=!= ??A%%d1g.r[   c              3  P   K   | ]  }t        |t              s |        y wrV   )r   r   )rl   rd   rZ  s     rY   rm   zproxy_call.<locals>.<genexpr>  s      WAvAV #Ws   &&zEProxyTensorMode tensors without proxy had unrecognized subclasses: %sr   r<   c                      y)Nz=Boolean value of Tensor with more than one value is ambiguousrk   rk   r[   rY   rZ   zproxy_call.<locals>.<lambda>'  r   r[   c              3  X   K   | ]"  }t        |t              r|j                  d u  $ y wrV   r   r   r  rl   r9  s     rY   rm   zproxy_call.<locals>.<genexpr>9  s+      
!\* JJ$
   (*c              3  <   K   | ]  }t        |t                y wrV   )r   rG   )rl   rd   s     rY   rm   zproxy_call.<locals>.<genexpr>@  s     JAJq,/Js   c                    t        |        S rV   )r%   r9  s    rY   rZ   zproxy_call.<locals>.<lambda>S  s    '!*n r[   zHIt appears that you're trying to get value out of a tracing tensor with z - erroring out! It's likely that this is caused by data-dependent control flow or similar.  It may be possible to trace this with dynamic shapes; try setting tracing_mode='symbolic' in your make_fx call.r  )namec              3  X   K   | ]"  }t        |t              r|j                  d u $ y wrV   r^  r_  s     rY   rm   zproxy_call.<locals>.<genexpr>  s+      a& 	


$r`  c                0    | j                         t        k  S rV   )r  CONSTANT_NUMEL_LIMITrc  s    rY   tensor_numel_in_limitz)proxy_call.<locals>.tensor_numel_in_limit  s    wwy000r[   r  r   )rd   r   r  r   )r9  r   r  r   )5ra   tree_flattenallnot_implemented_logr   NotImplementedmaybe_handle_decomprR  r   r  r  sizer   r   r  ry   
is_nonzero_checkr  itemr   r   r   r   r:  anyrE  data_dependent_outputrG  r   r  tree_unflattenr&   _error_on_data_dependent_opstree_all_onlyr   r   rG   r6  
lift_freshlift_fresh_copyr  rK  _target_to_stroverloadpacketr}   r   rg  r)   r   clonenondeterministic_seededr-  )r   rP  pre_dispatchr   r   flat_args_kwargsspecr   r   rd   f_flat_args_kwargsall_constantr9  const_flat_args_kwargs
const_argsconst_kwargsr%  proxy_flat_args_kwargs
proxy_argsproxy_kwargs	proxy_outoutany_constantr  rh  rZ  rY  s   `                        @@rY   
proxy_callr    s    &(#00$@d W-=WW!!S	
 JdF;A'j9 D		##		%%		%%--) 
  	//A&	 	&	
 uyy~~((000 	)LLQ1$W GqL&&(	) 	) F "  !f&678 vq)   
'
 
 	
 	K J9IJJJ  yy&&$))3 ,& )L9

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

q@&" & (.'<'<&($J Z8<8H	9 	9 c9xG#D*5Jk	 		) 	)4&9 9d$ $T	' 	'&	9 	9st   
V++AV8+W%W
W %W4W!$	W&A W36X;%W? #X+V58WW&W03W<?XXc                  V    e Zd ZdZd
dZddZddZddZ	 d	 	 	 	 	 ddZddZ	dd	Z
y)_SymNodeDictzM
    Wrapper around a dictionary that will hash SymInts with their nodes
    c                    i | _         y rV   )sym_node_dictselfs    rY   __init__z_SymNodeDict.__init__  s
    ?Ar[   c                6    || j                   |j                  <   y rV   r  r   )r  r'  r   s      rY   __setitem__z_SymNodeDict.__setitem__  s    ',388$r[   c                4    | j                   |j                     S rV   r  r  r'  s     rY   __getitem__z_SymNodeDict.__getitem__  s    !!#((++r[   c                2    |j                   | j                  v S rV   )r   r  r  s     rY   __contains__z_SymNodeDict.__contains__  s    xx4----r[   Nc                N    | j                   j                  |j                  |      S rV   )r  rM  r   )r  r'  r   s      rY   rM  z_SymNodeDict.get  s!    
 !!%%chh88r[   c                    t         rV   )NotImplementedErrorr  s    rY   __iter__z_SymNodeDict.__iter__  s    !!r[   c                ,    t        | j                        S rV   )lenr  r  s    rY   __len__z_SymNodeDict.__len__  s    4%%&&r[   r  r  )r'  r   r   r   r  r  )r'  r   r  r   )r'  r   r  r   rV   )r'  r   r   zOptional[_PySymProxyType]r  r   )r  r   )r  r   )r}   r~   r   __doc__r  r  r  r  rM  r  r  rk   r[   rY   r  r    sJ    B-,. DH99'@9	9"'r[   r  c                  "    e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   dZded<   dZded<   d fdZ	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZd fdZ	e
dd       Ze
dd       Ze
	 	 	 	 dd       ZddZ	 	 d 	 	 	 	 	 	 	 	 	 	 	 	 	 d! fdZ xZS )"rC   +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         |   d       t               | _        t	               | _        t        d t              | _        t               | _
        d | _        i | _        d| _        y )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  zPythonKeyTracer.__init__  sb    "-57+~%8&
" #'& "&  "$r[   c                     ||i |S rV   rk   )r  mforwardr   r   s        rY   call_modulezPythonKeyTracer.call_module  s     '''r[   c                    |S rV   rk   )r  attrattr_valparameter_proxy_caches       rY   getattrzPythonKeyTracer.getattr  s	     r[   c                   t        |t        j                  j                        rx| j                  j                         D ]  \  }}||u s| j                  d|di       c S  | j                  d      }t        | j                  ||       | j                  d|di       S t        |t              r.|j                  j                  J |j                  j                  S t        | 5  |      S )Nget_attrrk   _param_constant)r   r   nn	Parameterrootnamed_parameterscreate_nodeget_fresh_qualnamesetattrrG   r   r  r  
create_arg)r  ar4  pqualnamer   s        rY   r  zPythonKeyTracer.create_arg   s    a++,		224 C16++J2rBBC ../@AHDIIx+##J"bAA<(66??...66??"w!!$$r[   c                     y rV   rk   r  r%  s     rY   unwrap_proxyzPythonKeyTracer.unwrap_proxy/  s    ?Br[   c                     y rV   rk   r  s     rY   r  zPythonKeyTracer.unwrap_proxy2  s    EHr[   c                     y rV   rk   r  s     rY   r  zPythonKeyTracer.unwrap_proxy5  s     .1r[   c                    t        |t              rt        || |d       S t        |t              rt        || |d       S t        |t              rt        || |      S |S )Nc                    | j                   S rV   r  r   s    rY   rZ   z.PythonKeyTracer.unwrap_proxy.<locals>.<lambda><  s
     r[   c                "    | j                         S rV   )r3  )r%  s    rY   rZ   z.PythonKeyTracer.unwrap_proxy.<locals>.<lambda>>  s    	 r[   )r   r   r   rG   r   r  s     rY   r  zPythonKeyTracer.unwrap_proxy:  sY    a !!T1.?@@<(!!T1.ABB+,!!T1--Hr[   c                   t         |   ||||||      }| j                  rd|j                  vr|j                  dvrt        j                         j                         }|r|D 	cg c].  }	|	j                  dk(  s|	j                  j                  d      r|	0 }
}	|
D 	cg c]  }	|	j                  j                  d      s|	! }
}	|
rYt        j                  j                  |
      }
dj                  |
j                               j!                         |j                  d<   |dk(  rmt#        |t$              sJ t'        | j(                  |      }t#        |t*        j,                        r+t/               5  t1        |      |j                  d<   d d d        dd	}t3        |||f      r@t*        j4                  j6                  j9                  ||f|      \  }}||f|j                  d
<   |S c c}	w c c}	w # 1 sw Y   gxY w)Nr  r   outputr  ztorch/__init__.py)zfx/_symbolic_trace.pyzexport/_trace.py r  r   c                   t        | t        j                  j                        rd| j                  vry | j                  d   }t        |t        j
                        rt        |t              sy t        | j                  d         S )Nr   )r   r   r$  Noder   r   r#   r   )r   r   s     rY   map_fnz+PythonKeyTracer.create_node.<locals>.map_fnw  s^    a/53F&&-C #u||,ZZ5Pqvve}--r[   eager_input_vals)r   r   r  zOptional[_ExtractValType])r  r  r  r   r   r8   extractsummaryrd  filenameendswith	tracebackStackSummary	from_listrp   formatstripr   strr  r  r   r   disable_proxy_modes_tracingr   _should_save_eager_input_valsr$  r   map_aggregate)r  kindtargetr   r   rd  	type_exprr   user_frame_summaryframer  r  r  arg_inp	kwarg_inpr   s                  rY   r  zPythonKeyTracer.create_nodeD  s    w"4vtYO TYY.88!2!:!:!<!D!D!F!
 "4

i/ >>223FG	   "- >>22E    "+"8"8"B"B;"OK/1ww{7I7I7K/L/R/R/TDIIm,:fc***499f-D$-02 9'24'8DIIe$9	. )$@ "'!<!<dF^V!TGY-4i,@DII()c"9 9s   &3G&$G+1G00G9r  )
r  r0   r  zCallable[..., Any]r   ztuple[Any, ...]r   zdict[str, Any]r  r   r  r  r  r)  r  zdict[str, Proxy]r  r)  )r  r)  r  fx.node.Node)r%  r   r  zUnion[Proxy, Tensor])r%  r   r  zUnion[Proxy, PySymType])r%  _AnyScriptObjectTyper  "Union[Proxy, _AnyScriptObjectType])r%  rP   r  r)  )NN)r  r  r  r.   r   ztuple[Argument, ...]r   zdict[str, Argument]rd  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  __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                   ddl m} t        |       syt        | t        j
                  j                  j                  t        j
                  j                  j                  |f      ry|| t        j                  j                  j                  u s&| t        j                  j                  j                  u rW|d   }t        |d   t        j                  j                  t        j                  j                  f      sJ t!        |d   d       S | t        j                  j                  j"                  u ryt        | t        j                  j                        r)t%        j&                  t         |      rt)        d|  d      t        | t        j                  j                        r3ddlm}  ||       t        j.                  j0                  j2                  k(  S y)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_v2rD  r@   HigherOrderOperatorr  with_effectsra   tree_anyr   torch._library.utilsr  _CrE  needs_exact_strides)r  args_kwargsr  r   r  s        rY   r  r    su    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??8+Fx (G H 
 &%**//0B(0EHHLL4T4TTTr[   c                &     t         d fd       }|S )Nc               3    K   ddl m} m}m} g }d } |        dkD  r2 |       }t	        |      r|}n|j                  |        |        dkD  r2t        |      D ]
  } ||        	 | |Lt        |      }|dkD  r |       }|dz  }|dkD  r|j                  |       t        |      D ]
  } ||        y y # |Lt        |      }|dkD  r |       }|dz  }|dkD  r|j                  |       t        |      D ]
  } ||        w w xY ww)Nr   )_len_torch_function_stack	_pop_moder3   r<   )torch.overridesr  r  r3   r   rX  rJ  r  )r  r  r3   temp_elementsremoved_modemoder6   mode_tys          rY   context_manager_fnzB_make_temp_remove_mode_context_manager.<locals>.context_manager_fn  sC    TT')A-;D$(#$$T* ()A- ]+ 	Dt		% 'M*ai$;DQJE ai $$\2$]3 %Dt$% (|'M*ai$;DQJE ai $$\2$]3 %Dt$% (s0   A
DD'B: +#D+D:$D
+D

D)r  z2Generator[Optional[TorchFunctionMode], None, None])r
   )r  r  s   ` rY   &_make_temp_remove_mode_context_managerr    s      % %@ r[   c                &   |j                  | |      }dd}|j                  |       ddlm}  ||       t	        | t
              r| j                  j                  n| j                  }t        j                  j                  |j                  ||      S )Nc                    ddl m} | j                         ry ||       ryt        | j                  j                  d      t              rt        d | j                  D              ryy)Nr<   )is_accessor_nodeTFr   c              3     K   | ]G  }t        |t        j                        r+t        |j                  j	                  d       t
               I yw)r   N)r   r$  r  r   rM  rG   )rl   r  s     rY   rm   z6dispatch_trace.<locals>.impure_pred.<locals>.<genexpr>  s:      a) 166::e,l;s   AA)	symbolic_shapesr  	is_impurer   r   rM  rG   rk  r   )r4  r  s     rY   impure_predz#dispatch_trace.<locals>.impure_pred  s^    5 ;;= A
 qvvzz%(,7     r[   r   )dedupe_symints)r4  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_argsrK  r  r  rd  s          rY   rD   rD     sq     LL}-E8 
k*K5&0v&>4>>""DMMD  33FKKMMr[   c                     t        j                        \  }t        j                         d fd       }|S )Nc                    t        j                  |       \  }}t        |      t        	      k(  sJ t               5 }t	        |t
              sJ t        	|d        d d d        dfd} 
 }t        j                  t        ||      }t        j                  t        fd|      }dfd}t        j                  t        ||      }|S # 1 sw Y   pxY w)Nri  c                "    t        | | d       S )Nc                    | j                   S rV   r  r   s    rY   rZ   zJwrap_key.<locals>.wrapped.<locals>.get_tensor_proxy_slot.<locals>.<lambda>  s
    !'' r[   r>  r9  r   s    rY   get_tensor_proxy_slotz8wrap_key.<locals>.wrapped.<locals>.get_tensor_proxy_slot  s    !!VQ0ABBr[   c                "    t        | | d       S )Nc                    | S rV   rk   r   s    rY   rZ   z=wrap_key.<locals>.wrapped.<locals>.<lambda>.<locals>.<lambda>#  s    q r[   r>  r"  s    rY   rZ   z+wrap_key.<locals>.wrapped.<locals>.<lambda>#  s    q&![(Q r[   c                8    t        |       j                         S rV   )r   r3  r"  s    rY   get_sym_proxy_slotz5wrap_key.<locals>.wrapped.<locals>.get_sym_proxy_slot&  s    !!V,2244r[   )r9  r   r  zUnion[Tensor, Proxy])r9  r   r  r)   )ra   rj  r  r  r   r?  r-  tree_map_onlyr   r   rG   )proxies_unusedflat_proxies_proxies_specr  r#  r  r'  r   flat_tensorstensorsr   s           rY   wrappedzwrap_key.<locals>.wrapped  s    &,&9&9'&B#m< C$5555(* 	Xaa!7888lL4PVW	X	C k""6+@#F""QSV
	5 ""<1CSI
#	X 	Xs   "CC)r)  r  r*  r  r  rS   )ra   rj  r   wraps)r   r.  r   r~  _tensors_specr/  r-  s   ```   @rY   wrap_keyr2    s<     #)"5"5g">L-__Q , Nr[   zOptional[object]ORIGINAL_ATENc              #     K   t         Dt        j                         r0| a | t        j                  d<   	 d  d a d t        j                  d<   y d  y # d a d t        j                  d<   w xY ww)Noriginal_aten)r3  fx_tracebackhas_preserved_node_metacurrent_meta)rP  s    rY   set_original_aten_opr9  3  sf      !E!E!G59!!/2	> M9=L%%o6 !M9=L%%o6s   0A,A A,A))A,c                  4    e Zd ZddZ	 	 d	 	 	 	 	 	 	 	 	 ddZy)TorchFunctionMetadataModec                    || _         y rV   )r   r  r   s     rY   r  z"TorchFunctionMetadataMode.__init__C  s	    r[   Nc                    |xs i }|| j                   _        | j                   j                  j                  |d      dz   | j                   j                  |<    ||i |S )Nr   r<   )r   r  r  rM  r  rP  typesr   r   s        rY   __torch_function__z,TorchFunctionMetadataMode.__torch_function__F  s[     2(,%,0KK,G,G,K,KDRS,TWX,X##D)T$V$$r[   r   _ProxyTracerr  r  rk   N
rP  r@   r@   tuple[torch._C._TensorMeta, ...]r   tuple[object, ...]r   Optional[dict[str, object]]r  r)  r}   r~   r   r  rA  rk   r[   rY   r;  r;  B  sD     $&.2
%
% 0
% !	
%
 ,
% 

%r[   r;  c                  4    e Zd ZddZ	 	 d	 	 	 	 	 	 	 	 	 ddZy)PreDispatchTorchFunctionModec                     || _         g | _        y rV   )r   enter_autocast_nodesr=  s     rY   r  z%PreDispatchTorchFunctionMode.__init__\  s     :<!r[   Nc                `   |xs i }|t         v r|t        j                  j                  j                  k(  r| j
                  j                         }|f}| j                  j                  d||i       }|t        j                  j                  j                  k(  r| j
                  j                  |       |t        j                  j                  t        j                  j                  j                  t        j                  j                  j                  fv rd |j                  d<   |S  ||i |S )Nr  r   )r,   r   ampautocast_mode_exit_autocastrM  popr   r  _enter_autocastrX  r  _set_grad_enabledr   )r  rP  r@  r   r   
enter_noder   s          rY   rA  z/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[   rB  rD  )
rP  zUnion[OpOverload, Callable]r@  rF  r   rG  r   rH  r  r)  rI  rk   r[   rY   rK  rK  [  sD    < $&.2%)% 0% !	%
 ,% 
%r[   rK  c                       e Zd Zed	d       Z	 	 	 d
	 	 	 	 	 	 	 	 	 	 	 d fdZe	 	 d	 	 	 	 	 	 	 	 	 dd       Zd fdZ	 	 	 	 	 	 	 	 d fdZ	e
d	d       Z	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 ddZ xZS )r?  c                     yr   rk   r  s    rY   enable_tracingz%ProxyTorchDispatchMode.enable_tracing      r[   c                V   |r$t         j                  j                  j                  nd }t        |   |       || _        || _        || _        || _	        || _
        t         j                  j                  j                  | _        g | _        d| _        ddlm} |j$                  | _        y )Nr   config)r   r  DispatchKeyPreDispatchr  r  r   tracing_moder~  rV  rv  _TorchDispatchModeKeyPROXY	_mode_keyenter_stackrB  torch._inductorr\  rC  )	r  r   r_  r~  rV  rv  dkr\  r   s	           rY   r  zProxyTorchDispatchMode.__init__  s     2>UXX!!--4(($8!,H) 77== DF"#*-3-K-K$r[   c                    t        |      5  |xs i }|t        j                  j                  fv r ||i |cd d d        S t	        | || j
                  ||      cd d d        S # 1 sw Y   y xY wrV   )r9  primr   r   r  r~  r?  s        rY   __torch_dispatch__z)ProxyTorchDispatchMode.__torch_dispatch__  st     "$' 	K\rF++--T,V,		K 	K dD$*;*;T6J	K 	K 	Ks   +A#A##A,c                    t        t        j                  j                  j                        }| j
                  j                  |       t        | !         S rV   )	r4   r   r  r`  ra  rc  rX  r  	__enter__)r  maybe_prev_proxy_moder   s     rY   rj  z ProxyTorchDispatchMode.__enter__  sA     1%((2P2P2V2V W 56w ""r[   c                x    t         |   |||      }| j                  j                         }|t	        |       |S rV   )r  __exit__rc  rR  r3   )r  exc_type	exc_valuer  bmb_previous_proxy_moder   s         rY   rm  zProxyTorchDispatchMode.__exit__  sC     GXy)< "&!1!1!5!5!7!--.r[   c                     yr   rk   )clss    rY   is_infra_modez$ProxyTorchDispatchMode.is_infra_mode  rY  r[   c                D    t        |      dk(  r2t        |d   t        t        f      rt         fd|d   D              f}nt         fd|D              } j                  j                  d||i       }t        j                  | j                        }t        ||       |S )Nr<   r   c              3     K   | ]D  }t        |t              r.t        |j                        j	                         j
                  n| F y wrV   r   rG   r   r   r3  r   rl   r  r  s     rY   rm   z8ProxyTorchDispatchMode._compute_proxy.<locals>.<genexpr>  sI        &a6 'q$++6<<>CC   A
Ac              3     K   | ]D  }t        |t              r.t        |j                        j	                         j
                  n| F y wrV   rw  rx  s     rY   rm   z8ProxyTorchDispatchMode._compute_proxy.<locals>.<genexpr>  sI        "!\2 #1dkk288:??ry  r  )	r  r   rW   r]   r   r  r$  r)   r   )r  rP  r   r  n_argsn_outp_outs   `      rY   _compute_proxyz%ProxyTorchDispatchMode._compute_proxy  s    
 t9>ja4-@  "!W 	F    F ''vrJ,r[   c                Z   |t         j                  k(  r@t        |d   t              r|d   dk(  r|d   S t        |d   t              r|d   dk(  r|d   S |rJ  ||i |}t        |t              r;t        | j                  | j                  |||      }t        || j                  |       |S )Nr<   r   )rP  r   r  )	operatormulr   r   rG   r   r   r~  r   )r  rP  r@  r   r   r  p_out_thunks          rY   __sym_dispatch__z'ProxyTorchDispatchMode.__sym_dispatch__  s     8<<$q'3'DGqLAwDGS)d1glAw
 zD#F# c<("T00t$CK 3[9
r[   )r  r   )FFT)r   rC  r_  r  r~  r   rV  r   rv  r   r  r  rD  rE  )r  r   )rn  zOptional[type[BaseException]]ro  zOptional[BaseException]r  zOptional[types.TracebackType]r  zOptional[bool])rP  r@   r   rG  r  r   r  r)   )
rP  r@   r@  rF  r   rG  r   dict[str, object]r  r)  )r}   r~   r   propertyrX  r  r6   rh  rj  rm  classmethodrt  r~  r  r  r  s   @rY   r?  r?    sX     #%*-1LL L 	L
 #L '+L 
L6 
 $&.2KK 0K !	K
 ,K 
K K#/ + 1	
 
  &8?H	B 0 !	
 " 
r[   c                  l     e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   dZded<   d fdZ xZS )rM   r  r   z*MutableMapping[PySymType, _PySymProxyType]r   r  r   r  r   zOptional[OpOverload]r  r  r  Fr   r   c                    t         |   |       t        j                         | _        t               | _        i | _        t        d t              | _
        d | _        i | _        y )Nr  )r  r  weakrefr   r   r;   r   r   r:   r9   r   r  r  )r  rK  r   s     rY   r  z _GraphAppendingTracerEx.__init__  sZ    &88:57"$%8&
" "&  "r[   )rK  zfx.graph.Graphr  r  )r}   r~   r   r   r   r  r  r  s   @rY   rM   rM     s;    FF??8822++**!OT!" "r[   rM   c                       e Zd Z	 d	 	 	 	 	 	 	 	 	 d fdZ	 	 	 	 	 	 	 	 d fdZ	 	 	 	 	 	 	 	 d fdZ	 	 	 	 	 	 	 	 d fdZd	 fdZ xZS )
rF   c                    t        |   |fi | || _        t        | j                        | _        |xs i | _        t        | j                  d      | _        y )Nreal)r_  )r  r  	new_graphrM   r   rw   r?  r  )r  moduler  rw   r   r   s        rY   r  z!DecompositionInterpreter.__init__/  sM     	*6*"-dnn=#6#<" *4;;VL	r[   c                    t         |   |||      }t        j                  | j                  j                  |      | j
                        }t        ||d | j
                         |S Nri  )r  r   r$  r)   r  r   r-  r  r  r   r   r  r   r   s         rY   r   z$DecompositionInterpreter.placeholder=  sR     g!&$733F;T[[I#utDKKH
r[   c                    t         |   |||      }t        j                  | j                  j                  |      | j
                        }t        ||d | j
                         |S r  )r  r  r$  r)   r  r   r-  r  s         rY   r  z!DecompositionInterpreter.get_attrI  sR     gvtV4008$++F#utDKKH
r[   c                     t            |||      }ddd fd} j                  j                  t        j                  ||             |S )Nc                .    | j                   j                  S rV   )r   r   r   s    rY   get_proxy_nodez7DecompositionInterpreter.output.<locals>.get_proxy_node^  s    77<<r[   c                4    t        | j                  |       S rV   )r   r   )r%  r  r  s    rY   unwrapz/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  zDecompositionInterpreter.outputV  sF     gnVT62	 	E 	foofc:;
r[   c                    t        | j                        5  | j                  5  t        |   |i |cd d d        cd d d        S # 1 sw Y   nxY wd d d        y # 1 sw Y   y xY wrV   )ry   rw   r  r  run)r  r   r   r   s      rY   r  zDecompositionInterpreter.rung  sY     t//0 	0$)) 	07;//	0 	0 	0 	0 	0 	0 	0s!   AA	AA	AA$rV   )
r  fx.GraphModuler  fx.Graphrw   'Optional[Mapping[OpOverload, Callable]]r   r)  r  r  )r  r  r   rG  r   r  r  r)  )r   r)  r   r)  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

 !
 "	

 

		 !	 "		
 
	 ! "	
 
"0 0r[   rF   c                P     t        j                  ||f      \  }d fd}||fS )Nc                F    t        j                  |       \  }} |i |S rV   )ra   ru  )	flat_argsfn_args	fn_kwargsrP  r  s      rY   r/  z-wrapper_and_args_for_make_fx.<locals>.wrappedu  s*    #229dCW*	**r[   )r  zlist[object]r  rS   )ra   rj  )rP  r   r   r  r/  r  s   `    @rY   wrapper_and_args_for_make_fxr  n  s/    
 ))4.9OIt+ Ir[   c               #     K   t        j                         } t        j                  d       	 d  t        j                  |        y # t        j                  |        w xY wwNF)r   is_autocast_cache_enabledset_autocast_cache_enabled)	old_values    rY   disable_autocast_cacher  |  sF     //1I	$$U+4((3((3s   *A!A A!AA!c                      e Zd Zy)#_ModuleNotInstalledAsSubmoduleErrorNr|   rk   r[   rY   r  r    r   r[   r  c                      e Zd ZddZy)
_AttrProxyc                     y rV   rk   )r  basepaths      rY   reset_proxy_mappingz_AttrProxy.reset_proxy_mapping  s    r[   N)r  r0   r  r  r  r  )r}   r~   r   r  rk   r[   rY   r  r    s    r[   r  c                       e Zd ZdZd	 fdZd
dZ	 	 	 	 	 	 	 	 d fdZ	 	 	 	 	 	 d fdZ	 	 	 	 	 	 	 	 	 	 ddZddZ	d fdZ
 xZS )_ModuleStackTracera  Customized version of PythonKeyTracer that retains module stack
    information in node.meta["nn_module_stack"].

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

    So for this version we hold onto a reference to the original module
    (scope_root) and use that to match the path. Also when we see,
            A
           / \
          B   C
           \ /
            D
    we want to record the path as A.B.D by recording only one path.
    See Note [Preserving the nn module stack metadata during export non-strict mode]  # noqa: W605
    c                   t         |           d| _        || _        d| _        i | _        | j                  j                  d      D ]N  \  }}|| j
                  v r,t        j                  d| j
                  |   |       d| _        @|| j
                  |<   P t               | _
        t               | _        t               | _        d| _        t        t              | _        | j                  j                  d      D ],  \  }}| j                   t#        |         j%                  |       . |  G fddt&              | _        y )NTF)remove_duplicatez<Shared module found between %s and %s, AttrProxy is enabled.r   c                  f     e Zd ZdfdZd fdZdfdZd	 fdZed
fd       Z xZ	S )._ModuleStackTracer.__init__.<locals>.AttrProxyc                   t        |t              r|j                         }t        |t              sJ t	        |j
                  j                  | j
                  |j
                  fi       | _        |j                  | _        |j
                  j                  | j
                  _        |j
                  j                  | j
                  _	        |j                  | <   |j                  | <   y rV   )r   r  get_baser0   r   r   r}   __dict__r~   r   proxy_pathsproxy_modules)r  r  r  r   s      rY   r  z7_ModuleStackTracer.__init__.<locals>.AttrProxy.__init__  s    dJ/==?D!$/// "&NN++^^T^^4"
 !%,0NN,E,E).2nn.I.I+ ,0""4(-1$$T*r[   c                    t        | t              sJ t        |   |      }t        |t              s|S  |j                  |    dz   |z         S N.)r   r0   r  __getattr__r  )r  rd  r  	AttrProxyr   r   s      rY   r  z:_ModuleStackTracer.__init__.<locals>.AttrProxy.__getattr__  sU    !$/// !7.t4!(F3#O 6+=+=d+Cc+ID+PQQr[   c                "    j                   |    S rV   )r  r=  s    rY   r  z7_ModuleStackTracer.__init__.<locals>.AttrProxy.get_base  s    ++D11r[   c                ^   t        |t              rt        | t        j                  j                        rgt        j                  j	                  t        t        | j                  j                               |               } |j                  |     d|       S t        | t        j                  j                        r^t        j                  j                  t        | j                  j                               |         } |j                  |     d|       S t        | 5  |      S r  )r   slicer   r  
Sequentialr   rW   _modulesr   r  
ModuleListvaluesr  r  )r  r!  r   r  r   r   s      rY   r  z:_ModuleStackTracer.__init__.<locals>.AttrProxy.__getitem__  s    c5)!$(;(;<#hh11'T]]-@-@-B(CC(HI  )1C1CD1I0J!C5.QRR#D%((*=*=>#hh11$t}}7K7K7M2Ns2ST(1C1CD1I0J!C5.QRRw*3//r[   c                   d| j                   v sJ | j                   d   }t        |t              sJ |j                         D ci c]/  \  }}||% |j                  |    dz   t        |      z         n|1 c}}S c c}}w )Nr  r  )r  r   r   r   r  r  )r  
submodulesr'  r   r  r   s       rY   r  z7_ModuleStackTracer.__init__.<locals>.AttrProxy._modules  s    !T]]222!]]:6
!*d333 '1&6&6&8 #U  , "%););D)AC)G#c()RS"#  s   4A>)r  zUnion[Module, _AttrProxy]r  r  r  r  )rd  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   s   @rY   r  r    s,    2*	R2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   rX  r  
proxy_type)r  r  rd  r  modr  r   r   s        @@rY   r  z_ModuleStackTracer.__init__  s2   $!&!44e4L 		/GD!D(((R((+
 *.&*.$$Q'		/ @Q?REVEXDUDW*40666N 	7ID#  C)006	7 ?	
 ?	B $r[   c                    || j                   u ryt        |t              r| j                  |   S 	 t	        j
                  | |      S # t        $ r}t        |d}~ww xY w)z
        Use tracked access path during tracing instead of the default BFS behavior.
        Still use all the possible module paths to verify the result.
        r  N)r  r   r  r  r*   path_of_module	NameErrorr  )r  r  r%  s      rY   r  z!_ModuleStackTracer.path_of_module  s^    
 $//!c:&##C((	=((s33 	=51<	=s   A 	AAAc                n   t        |t              r&t        |t        j                        s| j                  st
        |   |||      S t        |t              r|S || j                  vr | j                  ||      | j                  |<   n| j                  |   j                  ||       | j                  |   S rV   )r   r0   r$  r(   r  r  r  r  r  r  r  )r  r  r  r  r   s       rY   r  z_ModuleStackTracer.getattr  s     8V,(BNN3))7?43HIIh
+O 4...,0OOHd,KD))==hM""8,,r[   c                B   t         |   ||      }g }| j                  j                         D ]'  \  }}|| j                  v s|j                  ||f       ) dd}|D ]>  \  }}	 || j                  |       | j                  |	   }
t        |
| j                  |       @ |S )Nc                <   |j                  d      }|d d |d   }}t        | t              sJ | }|D ]4  }t        ||      s yt	        ||      }t        |t
        t        f      r4 y t        ||      syt        t	        ||      t
              syt        ||       y)Nr  FT)splitr   r0   r   r  r  delattr)r   r  atomsr  target_submodr  rr  s          rY   _delete_proxy_attrz4_ModuleStackTracer.trace.<locals>._delete_proxy_attr7  s     LL%E"'*eBi-Dc6***C  !sD) c4(!#
F';< ! 3. gc=9:FC'r[   )r   r0   r  r  r  r   )r  r  r  r  r  rX  r+   )r  r  r  r   !proxy_module_names_to_be_replacedrd  r  r  proxy_module_nameproxy_moduleactual_moduler   s              rY   r  z_ModuleStackTracer.trace(  s     gmD-0 KM) II335 	ILD&+++188$H	I	8 0Q 	F+|tyy*;< ..|<M		3DE	F
 
r[   c                    ddl m} t        ||t        f      r ||i |S 	 t	        j
                  | ||||      S # t        $ r* t        j                  dt        |              ||i |cY S w xY w)zlPythonKeyTracer 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._dynamor  r   r(   r*   r  r  r   r   r  )r  r  r  r   r   r  s         rY   r  z_ModuleStackTracer.call_moduleZ  s     	2 a/;78D+F++
	,%%dAwfEE2 	,IIJ A D+F++	,s   ; 0A.-A.c                     yr  rk   )r  r  module_qualified_names      rY   is_leaf_modulez!_ModuleStackTracer.is_leaf_module|  s    r[   c                   t        |   |i |}|j                  dvrd|j                  vr| j                  |j                  d<   |j                  d   j                         D ]G  \  }\  }}t        |t              s||j                  dz   |j                  z   f|j                  d   |<   I |j                  dk(  r| j                  d|j                  vrx| j                  j                   d| j                  | j                      | j                  j                  j                   d| j                  j                   f|j                  d<   |S )aF  
        Create node and add on metadata.
        Add nn_module_stack here instead of TracerBase,
        since calls to make_fx() might not want to record module stack metadata.
        Add torch_fn by looking at torch_fn_metadata and torch_fn_counts.
        Add stack_trace by filtering out forward() stack frames.
        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   r'  fqnmod_clsr   s          rY   r  z_ModuleStackTracer.create_node  sJ    w"D3F3 7733 		1/3/@/@		+,'+yy1B'C'I'I'K #^c7gt,**S073G3GG9DII/05 GG&&&2$))+ ))2231T5I5I$J`J`5a4bc))33<<=Qt?U?U?^?^>_`%DIIj!
 r[   )r  r(   r  r  )r  r0   r  r  r  )r  Union[Module, Callable]r  rH  r  r  )
r  r0   r  r   r   rG  r   r  r  r  )r  r0   r  r  r  r   )r   r)  r   r)  r  r  )r}   r~   r   r  r  r  r  r  r  r  r  r  r  s   @rY   r  r    s    $`$D= --#)-BR-	-&0+0<W0	0d , ,  , !	 ,
 " , 
 ,D! !r[   r  c                      e Zd Z	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZe	 	 	 	 	 	 dd       ZddZe	 	 	 	 dd       Z	ddZ
ddZdd	Zy
)_MakefxTracerc	                   t        |xs i       | _        | j                  j                  t        j                  j
                  j                  j                  t        j                  j                  j                         || _
        || _        || _        || _        || _        || _        d | _        t#               | _        t#               | _        d | _        t#               | _        t#               | _        || _        y rV   )r   rw   
setdefaultr   r  r  r  r   _decompdecompositionsr_  _allow_non_fake_inputsr~  record_module_stackrV  rv  r   r   r   proxy_function_mode	fx_tracerpython_dispatcher_modetorch_fn_metadata_moder  )	r  rw   r_  r  r~  r  rV  rv  r  s	            rY   r  z_MakefxTracer.__init__  s     @D%2@
  	  ++IINN$$,,emm.J.J.T.T	
 ".,B#".)< *>!2N) ;?FQmM 	  59?J}#M 	# 'r[   c                    | j                   | j                  | j                  | j                  | j                  | j
                  gS rV   r   r   r  r  r  r  r  s    rY   _checkpoint_modesz_MakefxTracer._checkpoint_modes  s>    !!OO$$NN''''
 	
r[   c                X    || _         || _        || _        || _        || _        || _        y rV   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          rY   _restore_modesz_MakefxTracer._restore_modes  s2     !6)#; '&A#&A#r[   c              #  2  K   | j                         }	 ddlm} t        |d      r)| j                  r|j
                  }t        |      | _        n*t               | _        | j                  | j                  _	        | j                  dk(  rudd l}|j                  j                  j                  |      }|Bdd lmc m} |j%                  d      5  t'        d| j(                   |       d	      }d d d        || _        n| j                  d
k(  rdd l}|j                  j                  j                  |      }|C |       }	dd lmc m} |j%                  d      5  t'        d| j(                  |	      }d d d        |j,                  J d       || _        n'| j                  dk(  st/        d| j                         | j1                  | j                         d   | j2                  |  y # 1 sw Y   xY w# 1 sw Y   xY w#  | j2                  |  w xY ww)Nr<   )ShapeEnv	_orig_modfaker   F)(fake_tensor_allow_unsafe_data_ptr_accessT)r   allow_non_fake_inputs	shape_envstatic_shapessymbolic)r   r  r  2shape_env should be set if tracing with 'symbolic'r  zUnexpected tracing type: )r   r  r
  r   r  r  r  r  rC   r  r_  r  _dynamoutilsr   torch._functorch.config
_functorchr\  patchr$   r  r   r  AssertionError_construct_modes_with_fx_tracerr  )
r  r   r   
prev_modesr
  r  r   r   _configr  s
             rY   _init_modes_from_inputsz%_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*.	,( )9%""j0$#(==#6#6#G#G#M #+ (
I== PUV +938262M2M&/,( (11= H= )9%((F2(3D4E4E3FG  00@D,G   &  D,sO   HB:H G+-A,H G72A)H H+G40H 7H <H HHc                *   t        || j                  | j                  | j                  | j                        | _        | j                  rt        |      | _        | j                  dk(  s| j                  rt               | _	        t        |      | _        y )N)r~  rV  rv  r  )r?  r_  r~  rV  rv  r   rK  r  r   r  r;  r  )r  r  s     rY   r  z-_MakefxTracer._construct_modes_with_fx_tracer%  s}    0**!%!:!:)-)J)J
 'CI'ND$ 
*d.?.?*B*DD'&?	&J#r[   c              #  &  K   | j                         }	 |j                  | _        dd}|j                  J  ||j                        | _        | j                  | j                         d   | j                  |  y #  | j                  |  w xY ww)Nc                    t        |       t        k(  r
t               S t        |       t        k(  rt        | j                        S t	        dt        |        d      )NzUnexpected tracer type: r  )r   rC   r  r  r   )parent_tracers    rY   _create_sub_fx_tracerzD_MakefxTracer._init_modes_from_parent.<locals>._create_sub_fx_tracerC  sV    &/9*,,-(,>>-m.F.FGG&243F2GqI r[   )r   rC  r  rC   )r   r   r  r  r  )r  r   r  r!  s       rY   _init_modes_from_parentz%_MakefxTracer._init_modes_from_parent8  s      ++-
	-$1$B$BD! !**6662=3J3JKDN00@D,D,s   BAA= -B=BBc           	        
 dd l 
t        j                  
fd|      }d 
fd}dd} ||      } |||      }t        j                  t
         j                        }t               5 }|j                  t         j                                j                  r|j                   j                         |j                   j                         |j                   j                         |j                   j                         |j                  |       |j                  t                      |j                  t!                       j"                  J 	 t%        t'        || j"                   j(                         j"                  t+        |            }		 d d d         j0                  d
k(  r) j                  J  j                  j2                  	_        	S # t,        $ r t/        dd  fd	        w xY w# 1 sw Y   cxY w)Nr   c                D    j                   j                  j                  S rV   )r$  _symbolic_tracePH)r^   r   s    rY   rZ   z,_MakefxTracer._trace_inner.<locals>.<lambda>\  s    (@(@(C(C r[   c                n    ddfd}d ||d}t        j                  |j                     |       S )Nr   c                   ddl m} j                  J  |d       }t        | t              r"dz  j                  j                  | |      S t        |       t        u rzj                  dk(  rkj                  j                  J d       j                  j                  j                  j                  j                  j                  | |d       | |	      S t        | j                        r0j                  j                  j                  j                  |       S t        | t               rJ d
|  d       | S )Nr   )ConstantSourceinputr<   )sourcer  r  )positive)hintr+  zScriptObject z. has been fakified. Cannot wrap_fake it again.)torch._dynamo.sourcer)  r   r   r   from_tensorr   r   r_  r  create_symintnodecreate_symbolScriptObject_libraryfake_class_registrymaybe_to_fake_objr    )rd   r)  r+  	arg_countr  r   s      rY   inner_wrap_fakezG_MakefxTracer._trace_inner.<locals>._wrap_fake.<locals>.inner_wrap_fakea  sS    @,,888'%	{(;<a(NI00<<Qv<NN!W^(9(9Z(G00::F LF  00::LL--77EEv F  % M    5#5#56 >>==OO--q  &a)9: #A3&TU: r[   c                    | S rV   rk   r   s    rY   rZ   z@_MakefxTracer._trace_inner.<locals>._wrap_fake.<locals>.<lambda>  s    ! r[   r  r  r  )rd   r)  r  r)  )ra   r  r_  )r   r7  wrap_fn_mapr6  r  r   s      @rY   
_wrap_fakez._MakefxTracer._trace_inner.<locals>._wrap_fake^  s>    I!H $'+K
 ??;t/@/@#A4HHr[   c                    t        t        j                  |       d      r:t        j                  |       j                  j                  t        j
                  z  rt        | t        |            S | S )N__code__)r   inspectr  r=  co_flags
CO_VARARGSru   r  )r   phss     rY   
_wrap_funcz._MakefxTracer._trace_inner.<locals>._wrap_func  sP    GNN1-z:>>!$--669K9KK &aS22Hr[   )r   r  artifactc                     dddS )Nmake_fx_fail_partialstring)rd  encodingrk   rk   r[   rY   rZ   z,_MakefxTracer._trace_inner.<locals>.<lambda>  s     6$,) r[   c                 j     j                   j                  j                  dddd      j                  S )Nr  T)root_moduleverboseinclude_strideinclude_device)r  rK  python_codesrcr  s   rY   rZ   z,_MakefxTracer._trace_inner.<locals>.<lambda>  s8    t~~';';'G'G$* $'+'+	 (H (
 c r[   )metadata_fn
payload_fnr  )r   rP   r  rP   )r   Callable[_P, R]rA  zSequence[PHBase]r  rQ  )r  ra   r  r   r   r?  r   r   enter_contextry   rw   r   r  r  r  r  _set_make_fx_tracerr  rD   r2  r~  r]   	Exceptionr!   r_  r  )r  r   r   rA  r;  rB  rP  r   stackr9  r   s   `         @rY   _trace_innerz_MakefxTracer._trace_innerT  s    	ooCTJ+	IZ	 $!S! .4[["DOO.

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

 //5 	5*:**14t4	5 	5 	5s   A<<BNF)rw   r  r_  r  r  r   r~  r   r  r   rV  r   rv  r   r  r   r  r  )r  z	list[Any])r  zOptional[FakeTensorMode]r  z*Union[nullcontext, ProxyTorchDispatchMode]r  z0Union[nullcontext, PreDispatchTorchFunctionMode]r  zOptional[PythonKeyTracer]r  zUnion[nullcontext, Any]r  z-Union[nullcontext, TorchFunctionMetadataMode]r  r  )r   r   r   rG  r  Generator[None, None, None])r  rC  r  r  )r   r  r  r\  )r   r   r   r)  r  r(   )r   r   r   r)  r  r  )r}   r~   r   r  r   r  r
   r  r  r"  rV  r  rZ  rk   r[   rY   r  r    s&    "('D(' (' !%	('
 (' "(' #(' '+(' (' 
('T
B7B DB #S	B
 2B &=B &SB 
B  :-:-!3:-	$:- :-xK& -*-	$- -6rh/5r[   r  zOptional[_MakefxTracer]_CURRENT_MAKE_FX_TRACERc              #  8   K   t         }	 | a d  |a y # |a w xY wwrV   )r]  )r   prev_tracers     rY   rS  rS    s'      *K."("-+s    )r~  r  rV  rv  r  c                    |dv sJ ddl m}	 t        ||||||||xs |	j                  j                        t        j                         d fd       }
|
S )a5  
    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"]
    r9  r   r[  )r  c                 *     j                   g|  S rV   )r  )r   r   make_fx_tracers    rY   r/  zmake_fx.<locals>.wrapped	  s    #~##A---r[   )r   r)  r  r(   )rd  r\  r  r  enabledr   r0  )r   rw   r_  r  r~  r  rV  rv  r  r\  r/  rb  s   `          @rY   rE   rE     sl    ( 7777&"$76<<#7#7	N __Q. . Nr[   c                 R    t         j                  j                  j                         S rV   )r   r  _python_dispatch _get_current_dispatch_mode_stackrk   r[   rY   get_torch_dispatch_modesrg  	  s    ;;''HHJJr[   c                     t               S rV   )rI   rk   r[   rY   rH   rH   	  s    r[   c                 4   t         j                  j                  t         j                  j                  j
                        } t         j                  j                  t         j                  j                  j
                        }| |J d|  d|        | xs |S )z
    Current the currently active proxy tracing mode, or None if
    we are not currently tracing.  This includes pre-dispatch proxy
    tracing.
    zpre_dispatch_mode=z, mode=)r   rD  _get_dispatch_mode_pre_dispatchr  r`  ra  _get_dispatch_mode)pre_dispatch_moder  s     rY   rI   rI   	  s     

BB&&,, 88&&uxx'E'E'K'KLD$ 
./wtf=4 $$r[   c                    t               }|sJ t               5  g }|j                  | |||      cddd       S # 1 sw Y   yxY w)z
    Call into the currently active proxy tracing mode to do a
    SymInt/SymFloat/SymBool dispatch trace on a function that operates on
    these arguments.
    N)rI   r  r  )rP  r   r   r  r@  s        rY   rJ   rJ   -	  sM     DK4 
%	& @$$T5$?@ @ @s	   9Ac                 \    t        t        j                  j                  j                        S rV   )r2   r   r  r`  ra  rk   r[   rY   r  r  A	  s    uxx==CCDDr[   c                   ddl m} t        v rb|j                  ddfd      rt        S | 5  | xj
                  dz  c_        t           |i |}| xj
                  dz  c_        |cd d d        S t        S # 1 sw Y   t        S xY w)Nr   )CompilerBisectoraot_eager_decomp_partitiondecompositionc                     t               S rV   )repr)r   s   rY   rZ   z%maybe_handle_decomp.<locals>.<lambda>P	  s    48 r[   r<   )!torch._inductor.compiler_bisectorrp  rO   disable_subsystemrm  rB  )r   r   r   r   rp  r  s    `    rY   rn  rn  F	  s     C	((--(/;K
 "! 	$$)$-b14B6BC$$)$		 	 	 s   :A88Bc                    t        | ||      \  }}t               5   t        |||      |      }ddd       |S # 1 sw Y   S xY w)a  A helper function used to get the GraphModule for the given func.

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

 I	 Is	   :Ac                >   ddl m} t        j                  j	                  t        j                  j
                  j                        }|rT|j                  rG ||j                  |       x}r1t        |t              sJ |       ||j                  j                  d<   yyyy)zOA helper function for setting up unbacked_bindings on the destination FX graph.r<   )compute_unbacked_bindingsunbacked_bindingsN)r  r|  r   r  rk  r`  FAKEr  r   r)   r   r   )r  	out_proxyr|  r   symbol_to_paths        rY   r*  r*  s	  s    : ++EHH,J,J,O,OPIY((6y7J7JCPP>Pi/::/7EINN 34 Q )yr[   )ro   rQ  rs   r   r  rQ  )rw   r  r  z4Generator[Mapping[OpOverload, Callable], None, None])r   r   r  r   )r   r   r   rC  r   r   r  r  )r   r  r   rC  r   r)   r  r  )r   r   r   rC  r   r   r  r  )r   z.Union[PySymType, _AnyScriptObjectType, Tensor]r   rC  r   r)  r  r  )r   r   r   rC  r  r   )r   r   r   rC  r  r   )r   r   r   rC  r   rQ   r  zUnion[_ProxyTensor, U])
r   r   r   rC  r   rQ   r   zCallable[[_ProxyTensor], R]r  Union[R, U])r   r  r   rC  r  r)   )r   r  r   rC  r   rQ   r  zUnion[Proxy, U])
r   r  r   rC  r   rQ   r   zCallable[[Proxy], R]r  r  )r   r   r   rC  r  r   )r   r   r   rC  r   rP   r  zUnion[T, _PySymProxyType])
r   r   r   rC  r   rQ   r   zCallable[[_PySymProxyType], R]r  r  )
r   .Union[Tensor, _AnyScriptObjectType, PySymType]r   rC  r   r)  r   r   r  r)  r[  )r   r   r   r   r  r/  )r   r   r   r   r  r   )r   rC  r   r   r  r\  )r  r\  )r   r)   r   r   r  r)   )
r   rC  r   rQ  r   r  r   r  r  zThunk[R])
r  r   r   r)   r  r/  r   rC  r  r  )
r+  rP   r,  r  r  r#  r   rC  r  rP   )r   rC  r  z5Callable[[PySymType], Union[bool, int, float, Proxy]])r   rC  r9  r   r  zUnion[_ProxyTensor, Tensor])r   rC  r9  r  r  r  )r   rC  r9  r   r  z!Union[_PySymProxyType, PySymType])r   rC  r9  r  r  r)  )rP  r)  r   r?  r  r  )r   r?  rP  r@   r~  r   r   rG  r   r  r  r)  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]r.  ztuple[Unpack[_Ts]]r   rC  r~  r   r  rQ  )rP  r@   r  r\  )rP  zCallable[..., R]r   rG  r   r  r  z0tuple[Callable[[list[object]], R], list[object]])r   r  r  r\  )Nr  F)r   r   rw   r  r_  r  r  r   r~  r   r  r   rV  r   rv  r   r  r   r  zCallable[..., GraphModule])r  zlist[TorchDispatchMode])r  z Optional[ProxyTorchDispatchMode])rP  rQ  r   r  r   r  r  rS   )r  z-Generator[ProxyTorchDispatchMode, None, None])
r   r?  r   r@   r   rG  r   r  r  r)  )r  N)rP  r   r   rG  r   r  r_  r  rw   r  r  r(   )r  r)  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.tracebackr6  torch.utils._pytreer  _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>   r@  r?   r   r@   torch.fx._symbolic_tracerA   torch.typesrB   __all__rC  r2  r   r  r  r  rg  	getLoggerr}   r   _logginggetArtifactLoggerrl  rO   r   rg  rP   rQ   rR   rS   rT   r   null_ctx_typeregister_pytree_nodeSizer]   !_pytree_subclasses_that_lose_inforu   ry   r)  
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  r-  r   r6  r:  r  r  rU  rR  r  r  rC   r  r  _disable_dynamorD   r2  r3  r9  r;  )_temp_remove_metadata_torch_function_moderK  -_temp_remove_pre_dispatch_torch_function_moder?  r   GraphAppendingTracerrM   InterpreterrF   r  r  r  r  r  r  r  r]  rS  rE   rg  rH   rI   rJ   r  rn  rz  r*  rk   r[   rY   <module>r     sd   #         0 8 8 W W !	 	 	 Q P %    ) ) $ $ ) ) ; ? + 4  7 / / . 
 @  -  % $ 4 W W *  .%/' AB&&(89 U//1AAB yy~~yy~~g!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[   