
    im                        % S SK r S SKrS SKrS SKJr  S SKJrJr  S SKJ	r	J
r
JrJrJrJrJrJrJrJr  S SKJs  Jr  S SKrS SKJ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#J$r$J%r%J&r&  S SK'J(r(J)r)J*r*  S SK+J,r,  S SK-J.r.  S S	K/J0r0  S S
K1J2r2  S SK3J4r4J5r5  S SK6J7r7  S SK8J9r9  S SK:J;r;  S SK<J=r=  S SK>J?r?  S SK@JArA  S SK JBrB  S SKCJDrD  \\,\S   \S   \\ES4   4   rF\D\GS'   SrHS\\\E\E4      4S jrIS\R                  S\R                  4S jrKS\,S\\,\R8                  R                  4   4S jrMS\,S\R8                  R                  S\
S\,4   S\,4S  jrN\O4S!\FS\R8                  R                  S\
S\,4   S"\
S\\2   4   S\F4
S# jjrP " S$ S%5      rQ " S& S'\R                  5      rR\S(\S)   S\S*   4S+ j5       rS " S, S)\R                  5      rUSqV\\U   \GS-'   SqW\X\GS.'   \S/\XS\S*   4S0 j5       rY  SCS1\
S\F4   S2\\,S4   S3\\9   S4\\B   S5\XS\\R8                  R                  \F4   4S6 jjr[\ " S7 S85      5       r\S9\R8                  R                  SS4S: jr] SDS\\R                  R                  \
S\F4   4   4S; jjr`    SES1\
S\F4   S2\\	S4   S<\XS=\ES>\\\   S?\\\	      S@\XS\\R8                  R                  \\9   4   4SA jjraS1\
S\F4   S2\\FS4   S\R8                  R                  4SB jrbg)F    N)contextmanager)asdict	dataclass)
AnyCallableDict	GeneratorIterableListOptionalSetTupleUnion)extract_out_argumentsformat_schema_nameno_dispatchsetting_python_recursive_limit)ExportErrorExportErrorTypeInternalError)	LeafValue)is_out_variant)_QUANT_PRIMITIVES)	ValueSpec)_EnableTorchFunctionDisableTorchFunctionSubclass)get_decompositions)Guard)_maybe_unwrap_functional_tensor)default_decompositions)functionalize)normalize_function)TreeSpec)	TypeAlias)Value.r%   Freturnc                  X   [         R                  " 5       n SnSn[        S5      u  p4nUn[        U 5       HX  u  pxXc:X  a  SUR                  ;   a  UnM  M   Xd:X  a  SUR                  ;  a  UnUnM;  M=  Xe:X  d  MD  SUR                  ;   d  MV  Un  O   XU n / n	U  H  n
 [        U
R                  5       n[        U
R                  5      n[        UR                  5       5       VVs/ s H  u  p[        US-   5      U-   PM     nnnSR                  U[        US-
  S5      U 5      nSR                  X[        US-   [        U5      5       5      nUS-   U-   nU	R                  U5        SSS5        M     / n[        U 5       Hj  u  pxUR                  [        UR                  5      [        UR                  5      [        UR                   5      [        UR"                  5      X   S
.5        Ml     U$ s  snnf ! , (       d  f       GMm  = f! [         a    U	R                  S	5         GM  f = f)a>  
Get the current stacktrace (between trace() and __torch_dispatch__())
Include the filename, function name, line number, and source code from the
start of the function to the given instruction.

Return:
    A list of stacktraces for each instruction along with the source code
    context surrounding each instruction
r   N   zexecutorch/exir/tracer.py       z(^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
z<unknown file: unknown line>)filenamelinenonamelinecontext)	tracebackextract_stackrange	enumerater,   openintr-   	readlinesstrjoinmaxminlenappendFileNotFoundErrorr.   r/   )
stacktraceinit_exir_endtrace_exir_startFIND_INIT_EXIR_STARTFIND_INIT_EXIR_ENDFIND_TRACE_EXIR_STARTstateiframecontextssfiler-   indexr/   file_contentsfile_contents_abovefile_contents_belowr0   framess                       U/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/executorch/exir/tracer.pyget_stacktracerQ   E   s1    ((*J: M GLAhC.C Ej)(*enn<* =(*%..@ !- A +*enn<#$  * *:;J H	<ajj!T QXX >Gt~~GW=X!=XkeC	NT)=X  ! ')gg!#fqj!"4v>'# ')gg!3vz3};M+NO'# (AB)* 
 (' "! 8 $&Fj)/ell+EJJEJJ#;	
 * MC! "!( ! 	<OO:;;	<sC   H	22G6$G0
A&G6'H	0G66
H	 H	H		H)(H)tc                 X    [        U [        R                  5      (       d   e[        U SS9$ )NF)reapply_views)
isinstancetorchTensorr   rR   s    rP   unwrap_functionalrY      s&    a&&&&*1EBB    c                     [        U [        R                  5      (       d  U $ [        U 5      n [        U [        5      (       a  U R
                  $ U $ N)rU   rV   rW   rY   PythonTensorproxyrX   s    rP   unwrap_proxyr_      s=    a&&!A L111778q8rZ   outputr^   wrapper.c                 T    [        U [        R                  5      (       a  U" X5      $ U $ r\   )rU   rV   rW   )r`   r^   ra   s      rP   single_returnrc      s%    
 &%,,''v%%MrZ   outputs	meta_typec                 d   ^^^ SmS[         S[         4UUU4S jjn[        R                  " X@5      $ )Nr   or&   c                 2   > [        U TT   T5      nTS-  mU$ )Nr)   )rc   )rg   retrF   r^   ra   s     rP   wraptree_return.<locals>.wrap   s#    AuQx1	Q
rZ   )r   pytreetree_map)rd   r^   ra   re   rj   rF   s    ``  @rP   tree_returnrn      s3     A	 i   ??4))rZ   c                   0    \ rS rSrSS jrS\SS 4S jrSrg)	
DummyProxy   r&   Nc                 0     " S S5      nU" 5       U l         g )Nc                       \ rS rSrS rSrg)&DummyProxy.__init__.<locals>.DummyNode   c                     0 U l         g r\   meta)selfs    rP   __init__/DummyProxy.__init__.<locals>.DummyNode.__init__   s	    	rZ   rw   N)__name__
__module____qualname____firstlineno__rz   __static_attributes__ rZ   rP   	DummyNodert      s    rZ   r   node)ry   r   s     rP   rz   DummyProxy.__init__   s    	 	 K	rZ   keyc                     [        5       $ r\   )rp   )ry   r   s     rP   __getitem__DummyProxy.__getitem__   s
    |rZ   r   r&   N)r|   r}   r~   r   rz   r8   r   r   r   rZ   rP   rp   rp      s     s | rZ   rp   c                      \ rS rSrSrSS/r\ SS\R                  S\R                  R                  S\S\R                  4S jj5       rS\R                  R                  SS4S	 jrSS
.SSS\4S jjr\  SS\\S4   S\\\\4      S\4S jj5       r\  SS\R,                  R.                  S\\S4   S\\\\4      S\4S jj5       rSrg)r]      ag  
A wrapper tensor subclass used in the DispatchTracer to keep track of
proxies to construct the FX graph.

Wrapping something in PythonTensor implicitly detaches gradients.  If
something required grad, we will collect it as if it were a leaf.  A
consequence of detaching in this way is you need to maintain a parameter
cache when translating tensors into PythonTensor, so you don't create
multiple copies of a gradient (they are aliased, but they would count as
independent leaves).  An alternate strategy would be to avoid implicitly
detaching and instead "catch" gradients as they exit the PythonTensor
boundary.
r^   is_immutableelemr&   c                     [         R                  R                  XUR                  5      n[	        U[
        5      (       d   eX4l        UR                  U5        U$ r\   )rV   rW   _make_subclassrequires_gradrU   r]   r   update_proxy)clsr   r^   r   rs        rP   __new__PythonTensor.__new__   sI     LL''43E3EF!\****+	urZ   Nc                     Xl         g r\   r^   )ry   r^   s     rP   r   PythonTensor.update_proxy   s    
rZ   )tensor_contentsr   c                    [        5          SU R                  [        R                  5       S3sS S S 5        $ ! , (       d  f       g = f)NzPythonTensor())r   as_subclassrV   rW   )ry   r   s     rP   __repr__PythonTensor.__repr__  s-    ]"4#3#3ELL#A"B!D ]]s	   #8
Aargs.kwargsc                 p   Uc  0 n[         R                  " 5       (       a  U[         R                  R                  R                  L a^  [        XU5      u  p4Uu  pV[        U5      nU R                  [         R                  R                  R                  R                  UXV4U5      $ U[         R                  R                  R                  L a?  U R                  [         R                  R                  R                  R                  X#U5      $ [        5          U" U0 UD6sS S S 5        $ ! , (       d  f       g = fr\   )rV   is_inference_mode_enablednn
functional
layer_normr"   list__torch_dispatch__opsatendefaultlinearr   )r   functypesr   r   inputnormalized_shapes          rP   __torch_function__PythonTensor.__torch_function__  s     >F**,,uxx**5551$fE*.'#'(8#9 --IINN--55-	  ,,333--IINN))115  *+(( ,++s   D''
D5func_overloadc           	          UR                   nU=(       d    0 n[        UR                  UR                  5      (       a  [	        UR
                  U5      n[        U[        5      (       d  U/OUnU H[  u  p[        U	[        5      (       d  M  U	R                  (       d  M/  [        SR                  U[        UR
                  5      5      5      e   [        R                  " [        U5      n
[        R                  " [        U5      n[!        5       n ["        R%                  5       (       d  [&        (       a  U" U
0 UD6O	[)        5       nA[+        5          U" U0 UD6nSSS5        UR,                  S   S:X  a4  UR,                  S   S:w  a!  [        US   [        5      (       a	  XS   l        [0        R2                  R4                  R7                  5       (       d5  [8        R:                  " [=        5       5      UR>                  R@                  S'   S[B        S[0        R2                  RD                  S	[B        4S
 jnSn[        W[        [F        45      (       d  [I        XU5      nU$ [K        XU[M        U5      5      nU$ ! Af = f! , (       d  f       GN,= f)a  
This function is invoked every time an aten operation is called.

Args:
    func_overload: The function that was called that invoked this
        torch_dispatch call
    types:
    args: Arguments that were passed into the function. Each argument
        has type PythonTensor.
    kwargs: Keyword arguments that were passed into the function. Each
        argument has type PythonTensor.
z;Immutable tensor `{}` is potentially getting modified by {}N_r   stack_traceer^   r&   c                     U c  [         R                  " S5      n [        U [         R                  5      (       a  [	        X5      $ [        U [        5      (       a  U R                  U5        U $ U $ )Nr   )rV   emptyrU   rW   r]   r   )r   r^   s     rP   wrap_with_proxy8PythonTensor.__torch_dispatch__.<locals>.wrap_with_proxyf  sW    
 yKKO!U\\**#A--
 !\**u%HrZ   )'overloadpacketr   _qualified_op_name_overloadnamer   _schemarU   r   r]   r   RuntimeErrorformatr   	ex_pytreerm   r_   r   DispatchTracergettorchdynamo_enabledrp   r   r|   r^   rV   fxr1   has_preserved_node_metajsondumpsrQ   r   rx   r   Proxytuplerc   rn   type)r   r   r   r   r   r   out_argsout_args_iterout_arg_nameout_arg_val
proxy_argsproxy_kwargsg	proxy_outreal_outr   retvals                    rP   r   PythonTensor.__torch_dispatch__%  s   * ++2$11=3N3NOO,]-B-BFKH.84.H.HXJhM-:)k<88[=U=U=U&U\\(*<]=R=R*S  .; ''d;
 )),? !"	 "%%''+>+> z:\:  \	  ]$d5f5H  ==#a(8C(?$q'<00 )Qxx!!99;;15N<L1MINN.	y 	 	I 	( (T5M22"8HF  !otH~VFQ ]s   6I8 	I>8I;>
Jr   Fr   N)r|   r}   r~   r   __doc__	__slots__staticmethodrV   rW   r   r   boolr   r   r8   r   classmethodr   r%   r   r   r   _ops
OpOverloadr   r   r   rZ   rP   r]   r]      sH    .)IMR	<<	(-	FJ			 	%((.. T  37 E4 E3 E  #%-1) E3J) c5j)*) 
) ):  #%-1Yzz,,Y
 E3JY c5j)*Y 
Y YrZ   r]   tracerr   )NNNc              #   :   #    U [         sq n Sv   Uq g! Uq f = f7f)aP  
Set the "current" global tracer within the scope of using_tracer
context manager.

Since various things we want to capture today with torch_dispatch
does not "trap" into dispatcher really (for example, cond() and
shape()), we need a separate singleton tracer exposed to user space
in addition to Dispatcher to trigger graph capturing.
NTRACER)r   prevs     rP   using_tracerr     s$      6LFD   
 c            
         ^  \ rS rSrSU 4S jjrS\R                  R                  S\S\	4   S\
\	S4   S\\\	4   S\	4
S	 jrS
\S\	S\\\R                  4   S\	4S jrS\	S\R                   R"                  4U 4S jjr\SS j5       r  SS\S\	4   S\
\	S4   S\\   S\	4S jjrS\S\	4   S\
\	S4   S\\   S\	4S jrSrU =r$ )r   i  r&   c                    > [         TU ]  5         [        R                  R	                  5       U l        0 U l        0 U l        g r\   )superrz   rV   r   Moduleroottensor_attrs
submodules)ry   	__class__s    rP   rz   DispatchTracer.__init__  s/    %*XX__%6	5757rZ   mforward.r   r   c                     U" U0 UD6$ r\   r   )ry   r   r   r   r   s        rP   call_moduleDispatchTracer.call_module  s     '''rZ   attrattr_valparameter_proxy_cachec                    [        U[        R                  R                  5      (       aU  U R                  R                  5        H5  u  pEX%L d  M  XC;  a!  U R                  SUS0 5      n[        X&5      X4'   X4   s  $    U$ U$ )Nget_attrr   )rU   rV   r   	Parameterr   named_parameterscreate_proxyr]   )ry   r   r   r   npr^   s          rP   _module_getattrDispatchTracer._module_getattr  sx     h 2 233		224=5 $ 1 1*aR H3?3P-0033 5 OrZ   ac                   > [        U[        R                  R                  5      (       a  U R                  R                  5        H  u  p#XL d  M  U R                  SUS0 5      s  $    S nU(       dA  Sn SU 3n[        U R                  U5      (       d  OUS-  nM(  [        U R                  XA5        U R                  SUS0 5      $ [        U[        R                  5      (       a  U R                  R                  U5      nU(       dT  Sn SU 3n[        U R                  U5      (       d  OUS-  nM(  X@R                  U'   U R                  R                  XA5        U R                  SUS0 5      $ [        U[        R                  5      (       aq  XR                  ;  aA  S[!        U R                  5       3nU R                  R#                  Xa5        X`R                  U'   U R                  SU R                  U   S0 5      $ [$        TU ]M  U5      $ )Nr   r   r   _param_constantr)   _tensor_constant
submodule_)rU   rV   r   r   r   r   create_nodehasattrsetattrrW   r   r   register_bufferr   GraphModuler   r<   
add_moduler   
create_arg)ry   r  r   r   qualnamerF   name_submoduler   s          rP   r  DispatchTracer.create_arg  s   a++,,		2246++J2rBB 5 '+H!04H"499h77FA	 
 		8/##J"bAAa&&&*&7&7&;&;A&>H!1!5H"499h77FA	 
 (0!!!$		))(6##J"bAA a(('#-c$//.B-C!D		$$^7%3"##J0BBKKw!!$$rZ   c                      [         $ r\   r   r   rZ   rP   r   DispatchTracer.get  s    rZ   r   concrete_argsin_specc                 n    [        U 5         U R                  XUS9sSSS5        $ ! , (       d  f       g= f)z 
Traces the given graph module.
r  r  N)r   _trace)ry   r   r  r  s       rP   traceDispatchTracer.trace  s(     $;;t';R  s   &
4c                   ^  [         R                  R                  5       T l        Un[	        T SS 5      n[
        R                  " US9T l        0 T l        S[        S[        S[        4U 4S jjn[        U5       VVs/ s H  u  pxU" X5      PM     n	nnU(       a  [        R                  " X5      n	U" U	6 n
[        R                  " U
5      u  pS[        S[         [        [         R
                  R"                  4   4S jnU Vs/ s H
  o" U5      PM     nnS n[%        US	5      (       a  UR&                  R)                  SS 5      nT R+                  S
S
U40 US9  S T l        U
$ s  snnf s  snf )Nr   )
tracer_clsargrF   r&   c                    > TR                  SSU 3S0 5      n[        U [        R                  5      (       a
  [	        XSS9$ U $ )Nplaceholderph_r   T)r   )r   rU   rV   rW   r]   )r  rF   r  ry   s      rP   rj   #DispatchTracer._trace.<locals>.wrap  sD    ++MS9b"MK#u||,,#C4HH 
rZ   outc                     U c  g [        U [        R                  5      (       d  [        S[	        U 5       SU  S35      e[        U 5      $ )Nz0Expect model to return torch.Tensor, got type: 'z
' (value: z).)rU   rV   rW   	TypeErrorr   r_   )r"  s    rP   unwrap%DispatchTracer._trace.<locals>.unwrap  sQ     {c5<<00FtCykQ[\_[``bc   $$rZ   __annotations__r`   )	type_expr)rV   r   r   r   getattrr   Graphgraphr   r%   r6   r4   rl   tree_unflattentree_flattenr   r   r   r	  r'  r   r   submodule_paths)ry   r   r  r  root_fnr  rj   rF   r  	tree_argstree_outr   r   r%  r"  returnsreturn_annotations   `                rP   r  DispatchTracer._trace  sY    HHOO%	T;5
XX4
		e 		 		 		 1:-0HI0HfaT#\0H	I--iAII&))(3		%	 		%eIuxx~~,E&F 		% +33(36#;(3 7-.. ' 7 7 ; ;Hd KJ' 	 	
  $I J& 4s   <E"E()r+  r   r.  r   r   r   )r&   r   r   )r|   r}   r~   r   rz   rV   r   r   r   r%   r   r   r8   r   rW   r  r   Noder  r   r   r   r#   r  r  r   __classcell__)r   s   @rP   r   r     sY   8(88??( #u*%( E3J	(
 S%Z ( 
(#(AEc5<<FWAX	)%E )%ehhmm )%V   ,.&*	
SsEz"
S UCZ(
S (#	
S
 

S?sEz"? UCZ(? (#	?
 
? ?rZ   r   TORCHDYNAMO_ENABLEDvalc              #   :   #    U [         sq n S v   Uq g ! Uq f = f7fr\   )r7  )r8  r   s     rP   using_dynamor:  3  s)      !$%8#"dr   fr   guardsr  enable_functionalizationc                    [        U[        5      (       d  [        S[        U5       35      e[	        5       nU(       a
  [        U SS9n UR                  XUS9n[        U [        R                  R                  5      (       a  [        U 5      R                  OU R                  n[        R                  R                  UR                  UR                  U5      nX4$ )Nz%Expecting 'args' to be a tuple, got: mutations_and_views)remover  )rU   r   r$  r   r   r!   r  rV   r   r   r|   r   r  r   r+  )	r;  r   r<  r  r=  r   r1  r.   gms	            rP   flattened_dispatch_tracerB  =  s     dE""?T
|LMMF!$9:||A7|CH)!UXX__==471::D			fkk6<<	>B>rZ   c                   D    \ rS rSr% SrSr\\S'   Sr\\S'   Sr	\\S'   Sr
g	)
ExirDynamoConfigiS  z0
Manage Exir-specific configurations of Dynamo.
T	allow_rnnverboseFassume_static_by_defaultr   N)r|   r}   r~   r   r   rE  r   r'  rF  rG  r   r   rZ   rP   rD  rD  S  s(     ItGT%*d*rZ   rD  rA  c                 6   [        U R                  R                  5       H_  nUR                  S:X  d  M  [	        UR
                  5      S:X  d   eUR
                  S   n[        R                  " U5      u  p4U4Ul          g   [        SU R                   35      e)z
Modifies the output nodes in the submodules to return the result
as a flattened list. This keeps it consistent with the result of
EXIR's tracer
r`   r)   r   Nz!Could not find an output node in )	reversedr+  nodesopr<   r   rl   r-  r   )rA  r   rd   r2  r   s        rP   flatten_outputrL  ^  s     (77htyy>Q&&&iilG,,W5JG 
DI ) :288*E
FFrZ   c                    U (       a  [         R                  R                  R                  [         R                  R                  R                  [         R                  R                  R
                  R                  [         R                  R                  R
                  R                  [         R                  R                  R                  /n[        U5      $ [        5       n[         R                  R                  R                  R                  /n[        U5      nUR                  U5        / nUR                  [        5        U H  nUR                  US 5        M     U$ r\   )rV   r   r   log_sigmoid_forwardonesaranger   start	transposer   r    linalg_vector_normupdateextendr   pop)_use_old_decomp_tabledecomp_opsetdecompsadditional_decomp_opsadditional_decompsnever_decomposerK  s          rP   _default_decomposition_tabler]  n  s     IINN..IINNIINN!!))IINN!!''IINN$$
 ",//$&G
 			))11
 ,,ABNN%& O,-B NrZ   
aten_graphtracing_modedynamo_configdynamic_shapesrW  c                 z   Uc
  [        5       n[        R                  R                  [	        U5      5         [        S5         [        R                  " 5          [        R                  " U UUUR                  U(       a  [        U5      OSUS9" [        R                  " U5      6 sSSS5        sSSS5        $ ! [        R                  R                   a   n[        [        R                   S5      UeSnAf["         a  n[%        S5      UeSnAff = f! , (       d  f       O= f SSS5        g! , (       d  f       g= f)z
TODO: Once we fully migrate to torchdynamo frontend, we will remove
this config option alltogether.  For now, it helps with quick
experiments with playing around with TorchDynamo
Ni  )r^  r_  rG  decomposition_tablera  zoThe user code is using a feature we don't support. Please try torchdynamo.explain() to get possible the reasonsz?torchdynamo internal error occured. Please see above stacktrace)rD  torchdynamoconfigpatchr   r   resetexportrG  r]  copydeepcopyexcUnsupportedr   r   NOT_SUPPORTED	Exceptionr   )r;  r   r^  r_  r`  ra  rW  rk  s           rP   dynamo_tracero    s     (*				!	!}
%d+	
 %%%))6)O)O " 11FG- t$ ,+
 
. ** 	--O 	
  	Q	7 ,++
 
 
sN   D,DAB7$	D,7DC00D=D		DD
D	D,,
D:c                 8  ^ U n[        5       n[        (       a  [        X!S5      u  p#[        R                  " U5      u  pE[
        R                  " [        U5      5      n[        UUUUSS9u  mn[        R                  " U5      u  pUTl	        U	Tl
        TR                  R                  5       n
U
(       a  TR                  5         [
        R                  " [        U5      5      n[        T5      (       d   eU4S jn[        UUUUSS9u  mnUTl	        U	Tl
        T$ )at  
Executes a given callable `f` with a given tuple of arguments. During
execution, Tensor operations are recorded in a fx.GraphModule, which is then
returned.

Args:
    f: A `nn.Module` or a Python function that implements an ML program.
    args: A tuple of arguments of any type to be used as inputs for the tracing run.

Returns:
    EXIR contained in a fx.GraphModule
F)r=  c                  @  >  [         R                  " U TR                  5      n [        R                  R                  R                  5          T" U 6 nS S S 5        TR                  b$   [        R                  " WTR                  5      nU$ W$ ! [         a4    [        R
                  " U 5      u  p[        STR                   SU 35      ef = f! , (       d  f       N= f! [         a4    [        R
                  " W5      u  p[        STR                   SU 35      ef = f)Nz>Trying to flatten user inputs with exported input tree spec: 
z-
but actually got inputs with tree spec of: 
z@Trying to flatten user outputs with exported output tree spec: 
z.
but actually got outputs with tree spec of: 
)	fx_pytreetree_flatten_specr  rn  rl   r-  r   rV   r   r1   preserve_node_metaout_specr,  )r   r   received_specresrA  s       rP   graph_with_interpreter.dispatch_trace.<locals>.graph_with_interpreter  s   		..tRZZ@D XX224d)C 5 ;;"	++C= 
s
-  	%2248AQ::, @ /# 	 54  #)#6#6s#; "W{{m $E$o' s#   !B C(!C >C
C>DT)setr7  ro  rl   r-  ri  rj  r   rB  r  ru  r+  eliminate_dead_code	recompilecallable)r;  r   
trace_funcr<  
trace_argsr  in_argsr1  r   ru  changedrx  rA  s               @rP   dispatch_tracer    s	     JUF)*EB
 !--d3JmmE*-.G+!&LB %%h/KA BJBK hh**,G
mmE*-.GB<<<
6 ,!%LB BJBKIrZ   )NTr   )realNNF)cri  r   r1   
contextlibr   dataclassesr   r   typingr   r   r   r	   r
   r   r   r   r   r   executorch.extension.pytree	extensionrl   r   rV   torch._dynamo_dynamord  torch.fxr   torch.fx._pytree_pytreerr  torch.utils._pytreeutilsexecutorch.exir.commonr   r   r   r   executorch.exir.errorr   r   r   executorch.exir.graph_moduler    executorch.exir.operator.convertr   executorch.exir.operator.utilr   executorch.exir.typesr   torch._Cr   r   torch._decompr   torch._dynamo.guardsr   !torch._functorch.eager_transformsr   torch.exportr    
torch.funcr!   torch.fx.operator_schemasr"   r#   typing_extensionsr$   r8   r%   r'  r   rQ   rW   rY   r   r_   rc   r   rn   rp   r]   r   Tracerr   r   r7  r   r:  r  rB  rD  rL  r   r   r]  ro  r  r   rZ   rP   <module>r     s      % )   0 /  #  $ $ $ $  N M 2 ; ; + G , & M / $ 8 ( '	,Mgy   gT#s(^, gTC C%,, C
9I 9%	588>>(A"B 988>> c9n% 	 5:	**88>>* c9n%* Xi001	*
 *"	 	\5<< \~ "23 	BR8S  $WRYY Wt $(  '! T ! #d #y)9: # # #'%)U

	3
 J h	
 # 588&', + + +Guxx++ G G"  	%**

#u*!5
56H 04*."'3U
3 S/3 	3
 3 ,-3 T#Y'3  3 588U+,3l`U
`
s

` XX`rZ   