
    i+t                     j   % S SK r S SKrS SKJr  S SKJrJrJrJrJ	r	J
r
JrJrJrJrJrJr  S SKrS SKJr  S SKJrJr  S SKJr  S SKJrJr  S SKJr  S S	KJr  S S
KJ r J!r!  S SK"J#r#  S SK$J%r%J&r&  S SK'Jr(  S SK)J*r*  S SK+J,r,  S SK-J.r.J/r/  S SK0J1r1J2r2  S SK3J4r5  S SK6J7r7  \S\4   r8\r9\r:\r;\" S5      r<\\R8                  Rz                  /\
\/   4   r>\R~                  \R                  \R                  \R                  \R                  \R                  \R                  1rF\\   \GS'   1 SkrH\\I   \GS'   S\\7   4S jrJ " S S5      rK " S S5      rL " S S \M5      rN " S! S"\.5      rO " S# S$\O5      rP\ " S% S&\5      5       rQS'\R                  R                  S(\8S)\9S*\\I\94   S\\9\\I\94   4   4
S+ jrTg),    N)nullcontext)AnyCallableDictListMutableMappingOptionalProtocolruntime_checkableSetTupleTypeVarUnion)memory)executorch_call_delegateis_lowered_module)EdgeOpOverload)ExportErrorExportErrorType)fx)enable_python_dispatcher)FakeTensorModeUnsupportedFakeTensorException)
FakeTensor)FunctionalTensorFunctionalTensorMode)	traceback)PythonKeyTracer)CodeGen)PassBase
PassResult)_extract_tensor_metadataTensorMetadata)_pytree)PyTree.K_TORCH_SYM_OPS>   valstack_tracetensor_metadebug_handlenn_module_stackPROTECTED_KEYSreturnc                 
  ^ [         R                  " U 5      u  mn[        S T 5       5      (       d  [        ST 35      e[        U4S jT 5       5      (       d(  [        ST V s/ s H  o R                  PM     sn  35      e[        S T 5       5      (       a  [        O[        nU" 5          [        T6 nS S S 5        / nW H(  nUR                  [         R                  " XQ5      5        M*     U$ s  sn f ! , (       d  f       NE= f)Nc              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7fN)
isinstancetorchTensor).0xss     X/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/executorch/exir/pass_base.py	<genexpr>"_unstack_pytree.<locals>.<genexpr>N   s     >gz"ell++gs   ')zLeaves of xs must be Tensor c              3   f   >#    U  H&  oR                   S    TS    R                   S    :H  v   M(     g7f)r   N)shape)r5   r6   flat_xss     r7   r8   r9   Q   s+     DGbxx{gaj..q11Gs   .1z3Leaves of xs must have same leading dimension size c              3   B   #    U  H  n[        U[        5      v   M     g 7fr1   )r2   r   )r5   xs     r7   r8   r9   X   s     @1z!-..s   )pytreetree_flattenallRuntimeErrorr;   anyr   r   zipappendtree_unflatten)r6   inspecctxapytreestupler<   s         @r7   _unstack_pytreerL   L   s    ))"-OGV>g>>>9'CDDDGDDDAV]B^V]PR88V]B^A_`
 	
 @@@@ 	 
 
M 
 Gv,,U;< N C_ 
s   $C/
,	C44
Dc                   t    \ rS rSrS\\\4   SS4S jrS\S\4S jr	S\S\S\4S	 jr
S\S\4S
 jrSS jrSrg)NodeMetadatad   datar.   Nc                 .    UR                  5       U l        g r1   )copyrP   )selfrP   s     r7   __init__NodeMetadata.__init__e   s    $(IIK	    keyc                      U R                   U   $ r1   rP   rS   rW   s     r7   __getitem__NodeMetadata.__getitem__h   s    yy~rV   valuec                 P    U[         ;   a  [        SU 35      eX R                  U'   g )NzCould not override node key: )r-   rB   rP   )rS   rW   r]   s      r7   __setitem__NodeMetadata.__setitem__k   s(    . !>seDEE		#rV   c                     XR                   ;   $ r1   rY   rZ   s     r7   __contains__NodeMetadata.__contains__p   s    iirV   c                 H    [        U R                  R                  5       5      $ r1   )rN   rP   rR   rS   s    r7   rR   NodeMetadata.copys   s    DIINN,--rV   rY   )r.   rN   )__name__
__module____qualname____firstlineno__r   strr   rT   NodeMetadataValuer[   r_   boolrb   rR   __static_attributes__ rV   r7   rN   rN   d   se    0T#s(^ 0 0s '8 s +< AR 
     .rV   rN   c                   @   \ rS rSrS\\R                  R                  \R                  R                  4   4S jr	\
S\R                  R                  4S j5       r\
S\R                  R                  4S j5       rS\R                  4S jrS\4S jrS	 rS\4S
 jrSrg)
ProxyValuew   proxyc                     Xl         X l        g r1   rP   proxy_or_node)rS   rP   rs   s      r7   rT   ProxyValue.__init__y   s    	"rV   r.   c                    [        U R                  [        R                  R                  5      (       a  U R                  $ [        U R                  [        R                  R
                  5      (       d   eU R                  R                  $ r1   )r2   rv   r3   r   NodeProxynodere   s    r7   r{   ProxyValue.node~   s\    d((%((--88%%%$,,ehhnn====!!&&&rV   c                     [        U R                  [        R                  R                  5      (       d&  [        SU R                  R                  5        35      eU R                  $ )Nz5ProxyValue doesn't have attached Proxy object. Node: )r2   rv   r3   r   rz   rB   format_nodere   s    r7   rs   ProxyValue.proxy   sR    $,,ehhnn==GHZHZHfHfHhGij  !!!rV   c                 p    [        U R                  [        R                  5      (       d   eU R                  $ r1   r2   rP   r3   r4   re   s    r7   	to_tensorProxyValue.to_tensor   s'    $))U\\2222yyrV   c                 J    [        U R                  [        R                  5      $ r1   r   re   s    r7   	is_tensorProxyValue.is_tensor   s    $))U\\22rV   c              #   8   #    U R                    S h  vN   g  N7fr1   rY   re   s    r7   __iter__ProxyValue.__iter__   s     99s   c                 ,    [        U R                  5      $ r1   )rm   rP   re   s    r7   __bool__ProxyValue.__bool__   s    DIIrV   ru   N)rg   rh   ri   rj   r   r3   r   rz   ry   rT   propertyr{   rs   r4   r   rm   r   r   r   rn   ro   rV   r7   rq   rq   w   s    #E%((..%((--*G$H #
 'ehhmm ' ' "uxx~~ " "5<< 34 3$ rV   rq   c                       \ rS rSrSrg)ExportPassBaseError   ro   N)rg   rh   ri   rj   rn   ro   rV   r7   r   r      s    rV   r   c                      \ rS rSrSr\S\4S j5       r " S S\5      r	 " S S\
R                  5      rS5S
 jrS\S\R                  R                   R"                  S\\S4   S\\\4   S\S\4S jrS\R                  R.                  S\\   4S jrS\SS	4S jrS\S\S\S\4S jrS\\S4   S\\\4   S\S\4S jrS\S\\S4   S\S\4S jrS\S\R                  R.                  S\R                  R.                  S\\   S\S\4S jrS \R                  R.                  S!\R                  R.                  S"\\   S#\\   S\S\4S$ jr S%\R                  R.                  S&\\   S'\\   S\S\4
S( jr!S)\R                  R.                  S*\\   S+\\   S#\\   S\S\4S, jr"S-\S.\#S\S\4S/ jr$S0\\   S\S\4S1 jr%S\
R.                  S\\S4   S\&4S2 jr'S\
R.                  S\&4S3 jr(S4r)g	)6_ExportPassBase   z`
Interpreter-based pass class to help users maintain the IR spec while writing
transformations.
r.   c            	      ^    [        SSR                  [        R                  " SS95      05      $ )Nr)       )limit)rN   joinr   format_stackro   rV   r7   _create_dummy_node_metadata+_ExportPassBase._create_dummy_node_metadata   s'    ]BGGI4J4JQR4S,TUVVrV   c                      ^  \ rS rSrSSS\SS4U 4S jjrSS jrS	\S\R                  R                  4U 4S
 jjrS\R                  R                  S\SS4S jrSrU =r$ )_ExportPassBase.ExportTracer   callbackr   codegenr.   Nc                   > [         TU ]  5         Xl        [        R                  R                  5       U l        [        R                  R                  5       U l	        U R                  R                  U5        0 U l        S U l        0 U l        g r1   )superrT   r   r3   nnModulerootr   Graphgraphset_codegentensor_attrsfake_tensor_mode
submodules)rS   r   r   	__class__s      r7   rT   %_ExportPassBase.ExportTracer.__init__   s`    G$M)DI)DJJJ""7+9;D>BD!:<DOrV   c                     [        S5      e)Nz%ExportTracer doesn't support trace().r   re   s    r7   trace"_ExportPassBase.ExportTracer.trace   s    %&MNNrV   rI   c                 n  > [        U[        R                  R                  5      (       aQ  XR                  ;  aA  S[        U R                  5       3nU R                  R                  X!5        X R                  U'   O[        U[        5      (       a:  [        US5      (       a  UR                  c  [        SU S35      eUR                  nON[        U[        R                  5      (       a/  UR                  R                  b  UR                  R                  $ U$ [        TU ]=  U5      n[        U[        R                   5      (       an  [        U[        R"                  R$                  5      (       aE  UR&                  S:X  a5  U R)                  X15        U R*                  R-                  [/        X5      5        U$ )N
submodule_constantzCannot add z
 to graph.get_attr)r2   r3   r   r   r   lenr   
add_moduler   hasattrr   r   SymIntr{   r   
create_argr4   r   ry   opset_metadatar   on_attrrq   )rS   rI   name_submoduler{   r   s       r7   r   '_ExportPassBase.ExportTracer.create_arg   s4   !UXX__--OO+'1#doo2F1G%HNII((;)7OOA&Az**q*--1C-A3j.IJJJJAu||,,66??.66??*H7%a(D1ell++tUXX]]33GGz)!!$*%%j&9:KrV   r{   r]   c                   ^  S[         S[        [        [        R                  [        R
                  [        R                  [        [        [        [        S 4	   4U 4S jjn[        R                  " X25      UR                  S'   S[         S[        [           4U 4S jjn[        R                  " XB5      UR                  S'   g )Nr>   r.   c           
        > [        U [        5      (       a  U $ [        U [        R                  5      (       a  U R                  (       a  [        R
                  " U 5      n  TR                  c   e[        U [        R                  R                  5      (       a  TR                  R                  U SS9nU$ TR                  R                  U 5      n U$ [        U [        R                  [        R                  [        R                  [        [         ["        [$        45      (       a  U $ g ! [         a    [        S5        S n U$ f = f)NT)static_shapeszvFakeifying a Tensor subclass is not supported                             right now. Instead a TensorMetadata is used.)r2   r   r3   r4   is_quantized
dequantizer   r   	Parameterfrom_tensorr   printr   SymFloatSymBoolintfloatrm   rk   )r>   fake_tensorrS   s     r7   make_val;_ExportPassBase.ExportTracer.set_metadata.<locals>.make_val   s&    a,,H5<<00~~!,,Q/+#44@@@ &a););<<*.*?*?*K*K ! +L +K '& +/*?*?*K*KA*NK '&  H/ : + J '+&&+s    AD' 4D' 'EEr(   c                 R  > [        U [        5      (       du  [        U [        R                  5      (       aV  U R                  (       a  [        R
                  " U 5      n  TR                  c   eTR                  R                  U 5      nS nU$ g ! [         a    [        U 5      n U$ f = fr1   )
r2   r   r3   r4   r   r   r   r   r   r"   )r>   _r*   rS   s      r7   make_tensor_metaC_ExportPassBase.ExportTracer.set_metadata.<locals>.make_tensor_meta  s    !!Z00Z5<<5P5P~~!,,Q/B#44@@@ 11==a@&*
 '& : B '?q&A&&	Bs   ,B B&%B&r*   )Argumentr   r   r3   r   r   r   r   r   rm   rk   r?   tree_mapmetar	   r#   )rS   r{   r]   r   r   s   `    r7   r   )_ExportPassBase.ExportTracer.set_metadata   s    5 5 
5 n  &x?DIIe H  .1I  $ (.7G'ODIIm$rV   )r   r   r   r   r   r   r.   N)rg   rh   ri   rj   r   rT   r   r   r3   r   ry   r   r   rn   __classcell__r   s   @r7   ExportTracerr      sw    	=%6 	= 	=T 	=	O	 	UXX]] 	2R	P((--R	P R	P 	R	P R	PrV   r   c                   `  ^  \ rS rSrSSS\R
                  SS4U 4S jjrS\S	\\	S
4   S\
\\	4   S\4U 4S jjrS\R                  R                  R                  S	\\	S
4   S\
\\	4   S\4S jrS\R                  R                  R                  S	\\	S
4   S\
\\	4   S\4S jrS\S	\\	S
4   S\
\\	4   S\	4U 4S jjrS\R                  R                  R                  S	\\	S
4   S\
\\	4   SS4S jrS\S	\\	S
4   S\
\\	4   SS4S jrS\R                  R*                  S\	4U 4S jjrSrU =r$ )!_ExportPassBase.ExportInterpreteri%  r   r   gmr.   Nc                    > [         TU ]  U5        Xl        [        [	        UR
                  R                  5      5      U l        g r1   )r   rT   r   nextiterr   nodesr{   rS   r   r   r   s      r7   rT   *_ExportPassBase.ExportInterpreter.__init__&  s.    GR $M'+D,@'ADIrV   targetargs.kwargsc                    > [         TU ]  XU5      nU R                  R                  X[        U R                  R
                  5      5      $ r1   )r   placeholderr   rN   r{   r   )rS   r   r   r   argr   s        r7   r   -_ExportPassBase.ExportInterpreter.placeholder+  s:     '%fF;C==,,V,tyy~~:VWWrV   c                     U R                   R                  US   [        U R                  R                  5      5      R
                  $ )Nr   )r   outputrN   r{   r   rP   rS   r   r   r   s       r7   r   (_ExportPassBase.ExportInterpreter.output4  s2     ==''Qdiinn1MNSSSrV   c                 ^   [        U R                  R                  5      nU[        R                  :X  a   Uu  pVU R
                  R                  XVU5      $ [        USS 5      S;   a.  [        U5      (       d   eU R
                  R                  XU5      $ U[        ;   a.  [        U5      (       d   eU R
                  R                  XU5      $ [        U[        R                  R                  [        R                  R                  45      (       a  U R
                  R!                  UUUU5      $ U[        R"                  R$                  R&                  :X  a"  Uu  pxpU R
                  R)                  XxXU5      $ U[        R"                  R$                  R*                  :X  a"  Uu  ppU R
                  R-                  XXU5      $ U[        R"                  R$                  R.                  :X  a$  Uu  nnnU R
                  R1                  UUUU5      $ U[        R"                  R$                  R2                  :X  a%  Uu  nnnnU R
                  R5                  UUUX5      $ [        U[        R                  R6                  5      (       a  U R
                  R9                  SUUUU5      $ [;        SU 35      e)Nrh   >   mathbuiltins	_operatorcall_functionzUnsupported target type: )rN   r{   r   operatorgetitemr   call_getitemgetattrcallablecall_symr'   r2   r3   _ops
OpOverloadOpOverloadPacketcall_operatoropshigher_ordercond	call_cond
while_loop
call_whilemap_implcall_mapscan	call_scanHigherOrderOperator_fxr   )rS   r   r   r   r   r]   rW   predtrue_fnfalse_fninputsr   bodycarried_inputsadditional_inputsfmapped_argsoperands
combine_fninitr6   s                        r7   r   /_ExportPassBase.ExportInterpreter.call_function<  s]     		/D)))!
}}11%dCCt4 9 
  ''''}}--fDAA>)''''}}--fDAA..

0K0KL  }}22	  5991166626/x}}..thPTUU59911<<<@D=N}}//4  59911:::+/(;}}--ahMM59911666:>7
D"&7}}..b*;  FEJJ$B$BCC}}((#  *,EfX*NOOrV   c                 $   > [         TU ]  XU5      $ r1   )r   r   )rS   r   r   r   r   s       r7   r   *_ExportPassBase.ExportInterpreter.get_attrv  s     7#F&99rV   c                     [        S5      e)Nzcall_module is not supported.r   r   s       r7   call_module-_ExportPassBase.ExportInterpreter.call_module{  s     &&EFFrV   c                     [        S5      e)Nzcall_method is not supported.r   r   s       r7   call_method-_ExportPassBase.ExportInterpreter.call_method  s     &&EFFrV   nc                 l   > Xl         UR                  5       U R                  l        [        TU ]  U5      $ r1   )r{   r~   r   node_debug_strr   run_node)rS   r  r   s     r7   r"  *_ExportPassBase.ExportInterpreter.run_node  s*    I+,==?DMM(7#A&&rV   )r   r{   )rg   rh   ri   rj   r   GraphModulerT   rk   r   r   r   rq   r   r3   r{   Targetr   r   r   r  r  ry   r"  rn   r   r   s   @r7   ExportInterpreterr   %  s   	B%6 	BBNN 	Bt 	B
	X	X #&	X h'		X
 	X	THHMM((	T #&	T h'		T
 	T8	PHHMM((8	P #&8	P h'	8	P
 8	Pt	:	:%*8S=%9	:CGXCV	:	:
	GHHMM((	G #&	G h'		G
 	G	G	G%*8S=%9	GCGXCV	G	G
	'ehhmm 	' 	' 	'rV   r&  Nc                 `   [         R                  R                  [         R                  R                  [         R                  R                  5       [         R                  R                  5       5      5      U l        U R                  U [        5       5      U l
        S U l        SU l        S U l        g )NT)r3   r   Interpreterr$  r   r   r   interpreterr   r   tracerr   _initializedr!  re   s    r7   rT   _ExportPassBase.__init__  ss     88//HH  !2EHHNN4DE
 ''gi8:> -1rV   kindr   r   .r   r   c                 z   [         R                  " [        S X445      u  pg[        U R                  U5      " X&U5      n[         R                  " [        S X445      u  pS n[        U[        R                  R                  5      (       a9  U R                  R                  R                  UR                  R                  5      nU R                  R                  XXUS9nUR                  R                   R#                  UR$                  5        U R                  R'                  UR                  U5        [        X5      $ )Nc                     U R                   $ r1   rY   r>   s    r7   <lambda>%_ExportPassBase._fx.<locals>.<lambda>  s    !&&rV   c                     U R                   $ r1   )rs   r0  s    r7   r1  r2    s    !''rV   )name)r?   tree_map_onlyrq   r   r)  r2   r3   r   r   r*  r   _target_to_stroverloadpacketrg   create_proxyr{   r   updaterP   r   )rS   r-  r   r   r   r   	args_datakwargs_datares_data
args_proxykwargs_proxyr4  	res_proxys                r7   r	  _ExportPassBase._fx  s     "(!5!5(4."
	 4++T26kR#)#7#7)D>$
 
 fejj3344;;$$33F4I4I4R4RSDKK,,* - 
	 	""499-  :(..rV   graph_modulec                 B  ^ ^ TR                   R                  SS 5      =nb  [        U5      $ S[        R                  R
                  S[        [           4UU 4S jjnTR                  R                   Vs/ s H  nUR                  S:X  d  M  U" U5      PM     sn$ s  snf )Nr   r{   r.   c                    > SU R                   ;   a;  U R                   S   n[        US5      (       a  UR                  b  UR                  $ U$ U R                   R                  S5      =n(       ax  TR                  c   e[        TR                  [        R                  " UR                  UR                  SUR                  UR                  S9[        R                  " S5      5      $ [        U R                  5      S:X  a  g [        ST S	35      e)
Nr(   r   r*   r   )dtypedevicerequires_gradmemory_formatcpur   z,Cannot construct an input for graph module: .)r   r   r   getr   r   r3   emptyr;   rD  rF  rG  rE  r   usersr   )r{   faker*   rA  rS   s      r7   extract_input-_ExportPassBase.inputs.<locals>.extract_input  s    		!yy'4,,1J==( $		m <<<,,888!))KK#)))//%&1&?&?&1&?&? LL'
 
 TZZA%%>|nAN rV   r   )r   rJ  listr3   r   ry   r	   r   r   r   r   )rS   rA  r   rN  r{   s   ``   r7   r  _ExportPassBase.inputs  s     !%%))&$77DD:	 	(:2F 	 	6 %**00
0ww-'  M$0
 	
 
s   5BBattrc                     g r1   ro   )rS   rR  s     r7   r   _ExportPassBase.on_attr  s    rV   r4  r   c                     U R                   R                  SUS0 5      nUR                  UR                  l        X$R                  R                  S'   [        X$5      $ )Nr   ro   r(   )r*  r8  rP   r{   r   rq   )rS   r4  r   r   	arg_proxys        r7   r   _ExportPassBase.placeholder  sI    KK,,]D"bI	"ii	%(E"#))rV   c                 (    U R                  SXX45      $ Nr   r	  )rS   r   r   r   r   s        r7   r   _ExportPassBase.call_operator  s     xx6@@rV   c                 *    U R                  SX0 U5      $ rY  rZ  )rS   r   r   r   s       r7   r   _ExportPassBase.call_sym  s     xxr4@@rV   r
  r  r  r  c           
      0   U R                  U[        U5      5      nU R                  U[        U5      5      nUc   eUc   eU R                  S[        R                  R
                  R                  XR                  UR                  [        U5      40 U5      $ rY  )	call_submodulerK   r	  r3   r   r   r   rA  rP  )rS   r
  r  r  r  r   true_branchfalse_branchs           r7   r  _ExportPassBase.call_cond  s     ))'5=A**8U6]C&&&'''xxII""''++\-F-FVU
 	
rV   cond_fnbody_fnr  r  c                    U R                  U/ UQUQ75      nU R                  U/ UQUQ75      nUc   eUc   eU R                  S[        R                  R                  R
                  UR                  UR                  UU40 U5      $ rY  )r_  r	  r3   r   r   r  rA  )rS   rc  rd  r  r  r   s         r7   r  _ExportPassBase.call_while  s     %%g/T/TBS/TU%%g/T/TBS/TU""""""xxII""--$$$$!	 
 	
rV   r  r  r  c           
      d   [        U Vs/ s H  oUR                  PM     sn5      S   nU R                  U[        Xc Vs/ s H  oUR                  PM     sn-   5      5      nUc   eU R	                  S[
        R                  R                  R                  UR                  X#40 U5      $ s  snf s  snf )Nr   r   )
rL   rP   r_  rK   r	  r3   r   r   r  rA  )rS   r  r  r  r   r   r6   f_branchs           r7   r  _ExportPassBase.call_map  s     +>+3hh+>?B&&q%(5S(3hh(5S0S*TU###xxII""++""K:
 	
 ?5Ss
   B(B-r  r  r6   c                    UR                   R                   Vs/ s H  ofR                  S:X  d  M  UPM     nn[        U5      n/ n	[	        S[        U5      5       H(  n
XxU
-      nU	R                  UR                  S   5        M*     U R                  U/ UQU	QUQ75      nUc   eU R                  S[        R                  R                  R                  UR                  X#U40 U5      $ s  snf )Nr   r   r(   r   )r   r   r   r   rangerE   r   r_  r	  r3   r   r   r  rA  )rS   r  r  r6   r  r   r  combine_fn_placeholdersnum_initxs_element_dataiphcombine_fn_results                r7   r  _ExportPassBase.call_scan/  s     "''--#
-!1FA- 	  #
 t9q#b'"A(A6B""2775>2 #
 !//E$EE3DE
 !,,,xxII""''++T7HI
 	
!#
s
   C(C(r]   rW   c                 J    U R                  S[        R                  X40 U5      $ rY  )r	  r   r   )rS   r]   rW   r   s       r7   r   _ExportPassBase.call_getitemQ  s#     xx)9)9E<TRRrV   resultsc                 .    U R                  SSU40 U5      $ )Nr   rZ  )rS   ru  r   s      r7   r   _ExportPassBase.outputV  s    xx(WJDAArV   c                 H   U R                   U R                  XR                  R                  5      so0l         UR                  U R                   l        U R                  X5      nU R                  [        R                  R                  [        R                  R                  [        R                  R                  5       [        R                  R                  5       5      5      soPl        [        R                  " [         S U5      n["        R$                  " 5          UR&                  " U6   S S S 5        [        R                  R                  U R                   R(                  U R                   R                  5      nX0l         XPl        [+        US5      $ ! , (       d  f       Nn= f)Nc                     U R                   $ r1   rY   r0  s    r7   r1  0_ExportPassBase.call_submodule.<locals>.<lambda>d  s    rV   T)r*  r   r   _codegenr   r&  r)  r3   r   r(  r$  r   r   r   r?   r5  rq   fx_tracebackpreserve_node_metarunr   r!   )rS   rA  r  prev_tracerr)  prev_interpreterinputs_datanew_graph_modules           r7   r_  _ExportPassBase.call_submoduleY  s(    $(;;0A0A$$--1
 [ (3'C'C$,,T@-1-=-=uxx?S?SHH  !2EHHNN4DE@
** **:7GP,,.OO[) / !88//0@0@$++BSBST!+
 	
 /.s   F
F!c                    [        U SS5      (       d  [        S5      eU R                  U5      nS nU H>  n[        U[        5      (       d  M  Ub  X4R
                  L d   S5       eUR
                  nM@     Uc  [        SS9n[        5       nOSUl        [        5       nX0R                  l        X0l        U   U   U R                  U[        U5      5      nS S S 5        S S S 5        W$ ! , (       d  f       N= f! , (       d  f       W$ = f)Nr+  Fz.ExportPass is not initialized with __init__().z#Multiple fake tensor mode detected.T)allow_non_fake_inputs)r   r   r  r2   r   	fake_moder   r   r  r   r*  r   r_  rK   )rS   rA  r  r   ro  dispatcher_moderesults          r7   call_ExportPassBase.callq  s    t^U33%@  \*A!Z(($,0@KK0O989O#$;;   #-DI)mO59268O'7$ 0((uV}EF  /   / s$   5C78C&C7&
C4	0C77
D)r+  r   r)  r!  r*  r   )*rg   rh   ri   rj   __doc__staticmethodrN   r   r   r   r   r(  r&  rT   rk   r3   r{   r%  r   r   r   rq   r	  r$  r   r  r   r   r   Fnr   r  r  r  r  r   r   r   r!   r_  r  rn   ro   rV   r7   r   r      s`   
 W W WyP yPvf'BNN f'P2// $$/ HcM"	/
 S(]#/ / 
/6#
588#7#7 #
DN #
JJ 4 * *( *, *: *A HcM"A S(]#	A
 A 
AAA HcM"A 	A
 
A

 %%
 ((&&	

 X
 
 

(
%%
 %%
 X	

  >
 
 

2
88
 *%
 z"	

 
 

$ 
HH(( 
 : 
 N	 

  
+ 
  
 
 
DSS&)S1=S	S
Bd8n BL BZ B
NN
49(C-4H
	
0 J rV   r   c            
          ^  \ rS rSr " S S\R
                  5      r " S S\R                  5      rSSS\\S	4   S
\	\
\4   S\S\4
S jrS\R                  S\\S	4   S\4U 4S jjrSrU =r$ )
ExportPassi  c                   \   ^  \ rS rSrS\S\R                  R                  4U 4S jjrSr	U =r
$ )ExportPass.ExportTraceri  rI   r.   c                 @  > [        U[        R                  R                  5      (       af  XR                  ;  aW  [        U5      (       a  SOSnU S[        U R                  5       3nU R                  R                  X15        X0R                  U'   [        TU ])  U5      $ )Nlowered_module	submoduler   )r2   r3   r   r   r   r   r   r   r   r   r   )rS   rI   prefixr   r   s       r7   r   "ExportPass.ExportTracer.create_arg  s|    !UXX__--OO+1B11E1E-;F(.xqT__1E0F%GNII((;)7OOA&7%a((rV   ro   )rg   rh   ri   rj   r   r3   r   ry   r   rn   r   r   s   @r7   r   r    s#    	) 	)UXX]] 	) 	)rV   r   c                      ^  \ rS rSrSrSSS\R                  SS4U 4S jjrS	\R
                  R                  R                  S
\\S4   S\\\4   S\4U 4S jjrSrU =r$ )ExportPass.ExportInterpreteri  z9
Interpreter to callback on any ExportPassBase functions
r   r  r   r.   Nc                 $   > [         TU ]  X5        g r1   )r   rT   r   s      r7   rT   %ExportPass.ExportInterpreter.__init__  s    GX*rV   r   r   .r   c                 4  > [        U R                  R                  5      nU[        R                  :X  a   Uu  pVU R
                  R                  XVU5      $ [        U[        5      (       a  U R
                  R                  UUUU5      $ U[        R                  :X  a  U R
                  R                  SUUUU5      $ U[        :X  aE  US   nUSS  nU R
                  R                  UUU[        U R                  R                  5      5      $ [        TU ]A  XU5      $ )Nr   r   r   )rN   r{   r   r   r   r   r   r2   r   r   r   allocr	  r   call_delegater   r   )	rS   r   r   r   r   r]   rW   r  r   s	           r7   r   *ExportPass.ExportInterpreter.call_function  s
     		/D)))!
}}11%dCCFN33}}22	  6<<'}}((#  33!%aABx}}22" 0	  7(v>>rV   ro   )rg   rh   ri   rj   r  r   r$  rT   r3   r{   r%  r   r   r   rk   rq   r   rn   r   r   s   @r7   r&  r    sv    		+\ 	+r~~ 	+$ 	+(	?HHMM(((	? #&(	? h'	(	?
 (	? (	?rV   r&  r  LoweredBackendModuler   .r   r   r.   c                 @    U4U-   nU R                  S[        UUU5      $ rY  )r	  r   )rS   r  r   r   r   s        r7   r  ExportPass.call_delegate  s1      4'xx$
 	
rV   rA  r  c                    > [         TU ]  X5      nS[        R                  R                  S[        R                  R                  SS 4S jnU" XR
                  5        U$ )Nr   new_gmr.   c                 @   S[         R                  R                  S[        [         R                  R                     4S jnS[        [         R                  R                     S[        [         R                  R                     SS 4S jnU" U" U 5      U" U5      5        g )Nr   r.   c                 |    U R                   R                   Vs/ s H  oR                  S:X  d  M  UPM     sn$ s  snf )Nr   )r   r   r   )r   r{   s     r7   get_phsQExportPass.call_submodule.<locals>.preserve_original_ph_meta_val.<locals>.get_phs  s+    )+T77m;STTTs   99orig_phsnew_phsc                 $   [        U 5      [        U5      :w  a  [        [        R                  S5      e[	        X5       H  u  p#[        UR                  S   [        R                  5      (       a  [        UR                  S   [        R                  5      (       a<  UR                  S   R                  5       UR                  S   R                  5       :w  a  [        [        R                  S5      eUR                  S   UR                  S'   M     g )Nz8ExportPassBase doesn't support changing the placeholdersr(   )
r   r   r   NOT_SUPPORTEDrD   r2   r   r3   r4   size)r  r  rp  new_phs       r7   migrate_meta_valZExportPass.call_submodule.<locals>.preserve_original_ph_meta_val.<locals>.migrate_meta_val  s     x=CL0%'55R  #&h"8JB!&++e"4ellCC *2775>5<< H H%{{51668BGGEN<O<O<QQ"- / = = Z#  *,FKK& #9rV   )r3   r   r$  r   ry   )r   r  r  r  s       r7   preserve_original_ph_meta_val@ExportPass.call_submodule.<locals>.preserve_original_ph_meta_val  sz    UEHH00 UT%((--5H U8uxx}}-88<UXX]]8K88( WR['&/:rV   )r   r_  r3   r   r$  rA  )rS   rA  r  resr  r   s        r7   r_  ExportPass.call_submodule  s[     g$\:	;$$	;.3hh.B.B	;	;L 	&l4D4DE
rV   ro   )rg   rh   ri   rj   r   r   r&  r   rq   r   rk   r   rN   r  r   r$  r!   r_  rn   r   r   s   @r7   r  r    s    )33 )0?O== 0?d
 /
 JO$	

 S(]#
 
 

"-NN-49(C-4H-	- -rV   r  c                   4    \ rS rSr% \\S'   \\S'   \\S'   Srg)	ArgSchemai  r4  
kwarg_onlytypero   N)	rg   rh   ri   rj   rk   __annotations__rm   r   rn   ro   rV   r7   r  r    s    
I
IrV   r  r   fnr   r   c                   ^ [        U[        5      (       d   e[        U[        5      (       d   e[        U5      nUR	                  5       nS[
        S[        [
        [        4   S[        SS 4U4S jjn[        U R                  R                  5       HW  u  pVUR                  U;   a  U" UR                  X65        M*  UR                  (       a  M=  U[        U5      :  d  MN  U" XRU5        MY     [        U5      U4$ )NrW   r   schemar.   c                     > T" X   U5      X'   g r1   ro   )rW   r   r  r  s      r7   r9  map_args.<locals>.update  s    ty&)	rV   )r2   rK   dictrP  rR   r&   r   r%   r  	enumerate_schema	argumentsr4  r  r   )r   r  r   r   r9  ro  r  s    `     r7   map_argsr    s     dE""""fd####:D[[]F*A *^AvI6 *	 *d * rzz334	;;& 6;;/"""q3t9}1F#	 5 ;rV   )Ur   r   
contextlibr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r3   executorch.exirr   executorch.exir.delegater   r   "executorch.exir.dialects.edge._opsr   executorch.exir.errorr   r   r   torch._dispatch.pythonr   torch._subclassesr   r   torch._subclasses.fake_tensorr   #torch._subclasses.functional_tensorr   r   torch.fxr|  "torch.fx.experimental.proxy_tensorr   torch.fx.graphr   torch.fx.passes.infra.pass_baser    r!   torch.fx.passes.shape_propr"   r#   torch.utilsr$   r?   torch.utils._pytreer%   r  r   Valuerl   r&   r$  PassTypesym_int	sym_floatsym_itesym_maxsym_minsym_notsym_sqrtr'   r  r-   rk   rL   rN   rq   rB   r   r   r  r  r   r   r  ro   rV   r7   <module>r     s     "     " P = >  ; L 4 V . > " @ O ) &c3h CLUXX))*HZ,@@A 
MM	OO	MM	MM	MM	MM	NNC C 4< 0. .&" "J	, 	lh l^{ {|   


  h	
 8T#x-(()rV   