
    `iG                        U d dl Z d dlZd dlZd dlmZ d dlmZmZmZmZ d dl	Z	d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZ d dlmZ d dlmZmZ d dlm Z  d dl!m"Z"m#Z# d dl$m%Z%m&Z& d dl'm(Z) dgZ*eZ+eZ,edef         Z-ee	j
        j.        gee#         f         Z/e	j0        e	j1        e	j2        e	j3        e	j4        e	j5        e	j6        hZ7e8e         e9d<    G d de:          Z; G d de"          Z<dS )    N)nullcontext)AnyCallableOptionalUnion)fx)enable_python_dispatcher)NodeMetadata)
ProxyValue)_unstack_pytree)
FakeTensorUnsupportedFakeTensorException)FakeTensorMode)	traceback)PythonKeyTracer)compute_unbacked_bindingsPropagateUnbackedSymInts)CodeGen)PassBase
PassResult)_extract_tensor_metadataTensorMetadata)_pytree!_ExportPassBaseDeprecatedDoNotUse._TORCH_SYM_OPSc                       e Zd ZdS )ExportPassBaseErrorN)__name__
__module____qualname__     k/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torch/_export/pass_base.pyr   r   0   s        Dr"   r   c                      e Zd ZdZed             Z G d de          Z G d dej	                  Z
d*d	Zd
edej        j        j        deedf         deeef         dedefdZdej        j        dee         fdZdeddfdZdedededefdZdeedf         deeef         dedefdZdedeedf         dedefdZdedej        j        dej        j        dee         dedefdZdej        j        d ee         d!ee         dedef
d"Zd#ed$e dedefd%Z!d&ee         dedefd'Z"dej        deedf         de#fd(Z$dej        de#fd)Z%dS )+r   zl
    Interpreter-based pass class to help users maintain the IR spec while writing
    transformations.
    c                  p    t          dd                    t          j        d                    i          S )Nstack_trace    )limit)r
   joinr   format_stackr!   r"   r#   _create_dummy_node_metadataz=_ExportPassBaseDeprecatedDoNotUse._create_dummy_node_metadata:   s0    ]BGGI4JQR4S4S4S,T,TUVVVr"   c                        e Zd Zdddeddf fdZddZdedej        j	        f fd	Z
d
ej        j	        deddfdZ xZS )._ExportPassBaseDeprecatedDoNotUse.ExportTracercallbackr   codegenreturnNc                 @   t                                                       || _        t          j                                        | _        t          j                                        | _	        | j	        
                    |           i | _        d | _        i | _        d S N)super__init__r/   torchnnModulerootr   Graphgraphset_codegentensor_attrsfake_tensor_mode
submodules)selfr/   r0   	__class__s      r#   r5   z7_ExportPassBaseDeprecatedDoNotUse.ExportTracer.__init__?   sy     GG$DM))DI))DJJ""7+++9;D>BD!:<DOOOr"   c                      t          d          )Nz%ExportTracer doesn't support trace().r   r@   s    r#   tracez4_ExportPassBaseDeprecatedDoNotUse.ExportTracer.traceK   s    %&MNNNr"   ac                    t          |t          j        j                  rF|| j        vr<dt          | j                   }| j                            ||           || j        |<   nFt          |t                    r1t          |d          r|j
        t          d| d          |j
        }t                                          |          }t          |t          j                  rht          |t          j        j                  rI|j        dk    r>|                     ||           | j                            t+          ||                     |S )N
submodule_constantzCannot add z
 to graph.get_attr)
isinstancer6   r7   r8   r?   lenr9   
add_moduler   hasattrrI   r   r4   
create_argTensorr   Nodeopset_metadatar/   on_attrr   )r@   rF   name_submodulenoderA   s       r#   rO   z9_ExportPassBaseDeprecatedDoNotUse.ExportTracer.create_argN   s:   !UX_-- DO++%H#do2F2F%H%HNI((;;;)7DOA&Az** q*-- K1C-.IA.I.I.IJJJJ77%%a((D1el++;tUX]33; Gz))!!$***%%jD&9&9:::Kr"   rV   valuec                 n    dt           dt          t          t          j        t          j        t          j        t          t          t          t          d f	         f fd}t          j        ||          |j        d<   dt           dt          t                   f fd}t          j        ||          |j        d<   d S )Nxr1   c           
      >   t          | t                    r| S t          | t          j                  r| j        rt          j        |           } 	 j        J t          | t          j        j                  rj        	                    | d          }nj        	                    |           }n!# t          $ r t          d           d }Y nw xY w|S t          | t          j        t          j        t          j        t          t           t"          t$          f          r| S d S )NT)static_shapeszvFakeifying a Tensor subclass is not supported                             right now. Instead a TensorMetadata is used.)rK   r   r6   rP   is_quantized
dequantizer>   r7   	Parameterfrom_tensorr   printSymIntSymFloatSymBoolintfloatboolstr)rY   fake_tensorr@   s     r#   make_valzM_ExportPassBaseDeprecatedDoNotUse.ExportTracer.set_metadata.<locals>.make_valh   s?    a,, ( H5<00 & ~ 0!,Q//+#4@@@ &a);<< O*.*?*K*K ! +L + +KK +/*?*K*KA*N*NK9 + + + J   '++ '&    H4s   AB/ /CCvalc                 ,   t          | t                    s}t          | t          j                  rc| j        rt          j        |           } 	 j        J j                            |           }d }n# t          $ r t          |           }Y nw xY w|S d S r3   )
rK   r   r6   rP   r\   r]   r>   r_   r   r   )rY   _tensor_metar@   s      r#   make_tensor_metazU_ExportPassBaseDeprecatedDoNotUse.ExportTracer.set_metadata.<locals>.make_tensor_meta   s    !!Z00  Z5<5P5P  ~ 0!,Q//B#4@@@ 1==a@@&*9 B B B '?q&A&AB '&4s   %A3 3BBrm   )Argumentr   r   r6   ra   rb   rc   rd   re   rf   rg   pytreetree_mapmetar   r   )r@   rV   rW   ri   rn   s   `    r#   rS   z;_ExportPassBaseDeprecatedDoNotUse.ExportTracer.set_metadatab   s    5 5 
5  5  5  5  5  5 n  &x??DIe H  .1I            $ (.7G'O'ODIm$$$r"   r1   N)r   r   r    r   r5   rE   ro   r6   r   rQ   rO   rS   __classcell__rA   s   @r#   ExportTracerr.   >   s        
	=?
	=JQ
	=
	= 
	= 
	= 
	= 
	= 
	=	O 	O 	O 	O	 	UX] 	 	 	 	 	 	(R	P(-R	P R	P 	R	P R	P R	P R	P R	P R	P R	P R	Pr"   rv   c                       e Zd Zdddej        ddf fdZdedeed	f         d
e	eef         de
f fdZdej        j        j        deed	f         d
e	eef         de
fdZdej        j        j        deed	f         d
e	eef         de
fdZdedeed	f         d
e	eef         def fdZdej        j        j        deed	f         d
e	eef         ddfdZdedeed	f         d
e	eef         ddfdZdej        j        def fdZ xZS )3_ExportPassBaseDeprecatedDoNotUse.ExportInterpreterr/   r   gmr1   Nc                     t                                          |           || _        t          t	          |j        j                            | _        d S r3   )r4   r5   r/   nextiterr;   nodesrV   )r@   r/   ry   rA   s      r#   r5   z<_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.__init__   sC     GGR   $DM'+D,@,@'A'ADIIIr"   targetargs.kwargsc                     t                                          |||          }| j                            ||t          | j        j                            S r3   )r4   placeholderr/   r
   rV   rr   )r@   r~   r   r   argrA   s        r#   r   z?_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.placeholder   sF     ''%%fdF;;C=,,VS,ty~:V:VWWWr"   c                 |    | j                             |d         t          | j        j                            j        S )Nr   )r/   outputr
   rV   rr   datar@   r~   r   r   s       r#   r   z:_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.output   s/     =''Qdin1M1MNNSSr"   c                    t          | j        j                  }|t          j        k    r!|\  }}| j                            |||          S t          |dd           dv r-t          |          sJ | j        	                    |||          S |t          v r-t          |          sJ | j        	                    |||          S t          |t          j        j        t          j        j        f          r| j                            ||||          S |t          j        j        j        k    r%|\  }}}	}
| j                            |||	|
|          S |t          j        j        j        k    r#|\  }}}| j                            ||||          S t          |t          j        j                  r| j                            d||||          S t3          d|           )Nr   >   mathbuiltins	_operatorcall_functionzUnsupported target type: )r
   rV   rr   operatorgetitemr/   call_getitemgetattrcallablecall_symr   rK   r6   _ops
OpOverloadOpOverloadPacketcall_operatoropshigher_ordercond	call_condmap_implcall_mapHigherOrderOperator_fxr   )r@   r~   r   r   rr   rW   keypredtrue_fnfalse_fninputsfmapped_argsoperandss                 r#   r   zA_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.call_function   s     	//D)))!
s}11%dCCCt44 9  
  '''''}--fdDAAA>))'''''}--fdDAAA.
0KL  P }22	   59166626/gx}..tWhPTUUU591:::+/(;}--ahMMMFEJ$BCC 	P}((#   **Nf*N*NOOOr"   c                 J    t                                          |||          S r3   )r4   rJ   )r@   r~   r   r   rA   s       r#   rJ   z<_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.get_attr   s!     77##FD&999r"   c                      t          d          )Nzcall_module is not supported.rC   r   s       r#   call_modulez?_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.call_module       &&EFFFr"   c                      t          d          )Nzcall_method is not supported.rC   r   s       r#   call_methodz?_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.call_method  r   r"   nc                     || _         |                                | j        _        t	                                          |          S r3   )rV   format_noder/   node_debug_strr4   run_node)r@   r   rA   s     r#   r   z<_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.run_node  s4    DI+,==??DM(77##A&&&r"   )r   r   r    r   GraphModuler5   rg   tuplero   dictr   r   r6   rV   Targetr   r   rJ   r   r   rQ   r   rt   ru   s   @r#   ExportInterpreterrx      s       	B?	BEG^	B	B 	B 	B 	B 	B 	B	X	X #&	X h'		X
 	X 	X 	X 	X 	X 	X	THM(	T #&	T h'		T
 	T 	T 	T 	T.	PHM(.	P #&.	P h'	.	P
 .	P .	P .	P .	P`	:	: #&	: h'		:
 	: 	: 	: 	: 	: 	:	GHM(	G #&	G h'		G
 	G 	G 	G 	G	G	G #&	G h'		G
 	G 	G 	G 	G	'ehm 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'r"   r   r1   Nc                 R   t          t          j                            t          j                                        t          j                                                            | _        |                     | t                                | _
        d | _        d| _        d | _        d S )NT)r   r6   r   r   r7   r8   r:   interpreterrv   r   tracerr>   _initializedr   rD   s    r#   r5   z*_ExportPassBaseDeprecatedDoNotUse.__init__  s|    3H  !2!2EHNN4D4DEE
 
 ''gii88:> 48r"   kindr~   r   .r   rr   c                    t          j        t          d ||f          \  }} t          | j        |          |||          }t          j        t          d ||f          \  }	}
d }t          |t          j        j                  r)| j	        j
                            |j        j                  }| j	                            |||	|
|          }|j        j                            |j                   | j        r/| j        j        x}r!t+          ||          x}r||j        j        d<   | j	                            |j        |           t          ||          S )Nc                     | j         S r3   r   rY   s    r#   <lambda>z7_ExportPassBaseDeprecatedDoNotUse._fx.<locals>.<lambda>.  s    !& r"   c                     | j         S r3   )proxyr   s    r#   r   z7_ExportPassBaseDeprecatedDoNotUse._fx.<locals>.<lambda>2  s    !' r"   )nameunbacked_bindings)rp   tree_map_onlyr   r   r   rK   r6   r   r   r   r;   _target_to_stroverloadpacketr   create_proxyrV   rr   updater   r>   	shape_envr   rS   )r@   r   r~   r   r   rr   	args_datakwargs_datares_data
args_proxykwargs_proxyr   	res_proxyr   symbol_to_paths                  r#   r   z%_ExportPassBaseDeprecatedDoNotUse._fx%  sd    "(!5((4."
 "
	; 374+T2269kRR#)#7))D&>$
 $
 
L fej344 	T;$33F4I4RSSDK,,&*l - 
 
	 	""49---  	J43H3R&Ri 	J!:9h!O!OO~ J;I	#$78  :::(I...r"   graph_modulec                      j                             dd           x}t          |          S dt          j        j        dt          t                   f fdfdj        j	        D             S )Nr   rV   r1   c           
         d| j         v r-| j         d         }t          |d          r|j        |j        S |S | j                             d          x}r\j        J t          j        t          j        |j        |j	        d|j
        |j                  t          j        d                    S t          | j                  dk    rd S t          d d	          )
Nrj   rI   rm   rr   )dtypedevicerequires_gradmemory_formatcpur   z,Cannot construct an input for graph module: .)rr   rN   rI   getr>   r   r6   emptyshaper   r   r   r   rL   usersr   )rV   fakerm   r   r@   s      r#   extract_inputz?_ExportPassBaseDeprecatedDoNotUse.inputs.<locals>.extract_inputI  s    	!!y'4,, )1J=( $	m < << ,888!)K#))/%&1&?&1&?   L''
 
 
 TZA%%t%N|NNN  r"   c                 <    g | ]}|j         d k     |          S )r   )rR   ).0rV   r   s     r#   
<listcomp>z<_ExportPassBaseDeprecatedDoNotUse.inputs.<locals>.<listcomp>b  s:     
 
 
w-'' M$'''r"   )
rr   r   listr6   r   rQ   r   r   r;   r}   )r@   r   r   r   s   `` @r#   r   z(_ExportPassBaseDeprecatedDoNotUse.inputsC  s     !%))&$777DD::	 	(:2F 	 	 	 	 	 	 	2
 
 
 
$*0
 
 
 	
r"   attrc                     d S r3   r!   )r@   r   s     r#   rT   z)_ExportPassBaseDeprecatedDoNotUse.on_attrh  s    r"   r   r   c                     | j                             d|di           }|j        |j        _        | j                             |j        |           t          ||          S )Nr   r!   )r   r   r   rV   rr   rS   r   )r@   r   r   rr   	arg_proxys        r#   r   z-_ExportPassBaseDeprecatedDoNotUse.placeholderk  sS    K,,]D"bII	"i	  555#y)))r"   c                 4    |                      d||||          S Nr   r   )r@   rR   r   r   rr   s        r#   r   z/_ExportPassBaseDeprecatedDoNotUse.call_operatorq  s     xxT64@@@r"   c                 4    |                      d||i |          S r   r   )r@   r~   r   rr   s       r#   r   z*_ExportPassBaseDeprecatedDoNotUse.call_symz  s     xxr4@@@r"   r   r   r   r   c           
      .   |                      |t          |                    }|                      |t          |                    }|J |J |                     dt          j        j        j        ||j        |j        t          |          fi |          S r   )	call_submoduler   r   r6   r   r   r   r   r   )r@   r   r   r   r   rr   true_branchfalse_branchs           r#   r   z+_ExportPassBaseDeprecatedDoNotUse.call_cond  s     ))'5==AA**8U6]]CC&&&'''xxI"';+\-FVU
 
 	
r"   r   r   r   c                    t          d |D                       d         }|                     |t          |d |D             z                       }|J |                     dt          j        j        j        |j        ||fi |          S )Nc                     g | ]	}|j         
S r!   r   r   r   s     r#   r   z>_ExportPassBaseDeprecatedDoNotUse.call_map.<locals>.<listcomp>  s    >>>3ch>>>r"   r   c                     g | ]	}|j         
S r!   r   r   s     r#   r   z>_ExportPassBaseDeprecatedDoNotUse.call_map.<locals>.<listcomp>  s    5S5S5S3ch5S5S5Sr"   r   )	r   r   r   r   r6   r   r   r   r   )r@   r   r   r   rr   xsf_branchs          r#   r   z*_ExportPassBaseDeprecatedDoNotUse.call_map  s     >>+>>>??B&&q%5S5S(5S5S5S0S*T*TUU###xxI"+"K:
 
 	
r"   rW   r   c                 L    |                      dt          j        ||fi |          S r   )r   r   r   )r@   rW   r   rr   s       r#   r   z._ExportPassBaseDeprecatedDoNotUse.call_getitem  s%     xx)9E3<TRRRr"   resultsc                 6    |                      dd|fi |          S )Nr   r   )r@   r   rr   s      r#   r   z(_ExportPassBaseDeprecatedDoNotUse.output  s    xx(WJDAAAr"   c                    | j         |                     | |j        j                  c}| _         |j        | j         _        |                     | |          }| j        t          j        	                    t          j        
                    t          j                                        t          j                                                            c}| _        t          j        t           d |          }t#          j                    5   |j        |  d d d            n# 1 swxY w Y   t          j        
                    | j         j        | j         j                  }|| _         || _        t+          |d          S )Nc                     | j         S r3   r   r   s    r#   r   zB_ExportPassBaseDeprecatedDoNotUse.call_submodule.<locals>.<lambda>  s     r"   T)r   rv   r;   _codegenr>   r   r   r6   r   Interpreterr   r7   r8   r:   rp   r   r   fx_tracebackpreserve_node_metarunr9   r   )r@   r   r   prev_tracerr   prev_interpreterinputs_datanew_graph_modules           r#   r   z0_ExportPassBaseDeprecatedDoNotUse.call_submodule  s~    KdL$6$?@@ 	!T[ (3'C$,,T<@@H  $$UX__%6%68H8HII  	+$* *:7G7GPP,.. 	* 	*KO[))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* !8//0@$+BSTT!+
 
 	
s   DD!$D!c                 d   t          | dd          st          d          |                     |          }d }|D ]3}t          |t                    r|||j        u s
J d            |j        }4|7t          d          | j        _        t                      }t                      }n!d|_
        || j        _        t                      }| j        j        | _        |5  |5  |                     |t          |                    }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |S )Nr   Fz.ExportPass is not initialized with __init__().z#Multiple fake tensor mode detected.T)allow_non_fake_inputs)r   r   r   rK   r   	fake_moder   r   r>   r   r  r	   r   r   )r@   r   r   r>   idispatcher_moderesults          r#   callz&_ExportPassBaseDeprecatedDoNotUse.call  s   t^U33 	%@   \** 	/ 	/A!Z(( /'/3Cq{3R3R3R9 4S3RR $%; #+9PT+U+U+UDK(*}})mmOO592+;DK(688O $ < 	F 	F 	F 	F((uV}}EEF	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F s6   D%$DD%D	D%D	D%%D),D)rs   )&r   r   r    __doc__staticmethodr,   r   rv   r   r   r   r5   rg   r6   rV   r   r   ro   r   r
   r   r   r   r   r   rT   r   r   Fnr   r   r   rd   r   r   r   r   r  r!   r"   r#   r   r   4   s        
 W W \WvP vP vP vP vP vP vP vPpd' d' d' d' d'BN d' d' d'L9 9 9 9// $/ HcM"	/
 S(]#/ / 
/ / / /<#
58#7 #
DN #
 #
 #
 #
JJ 4    * *( *, *: * * * *A HcM"A S(]#	A
 A 
A A A AAA HcM"A 	A
 
A A A A

 %
 (&	

 X
 
 

 
 
 
(
8
 *%
 z"	

 
 

 
 
 
$SS&)S1=S	S S S S
Bd8n BL BZ B B B B
N
49(C-4H
	
 
 
 
8 J      r"   )=r   r   typing
contextlibr   r   r   r   r   r6   r   torch._dispatch.pythonr	   &torch._export.pass_infra.node_metadatar
   $torch._export.pass_infra.proxy_valuer   torch._higher_order_ops.mapr   torch._subclassesr   r   torch._subclasses.fake_tensorr   torch.fxr   "torch.fx.experimental.proxy_tensorr   %torch.fx.experimental.symbolic_shapesr   r   torch.fx.graphr   torch.fx.passes.infra.pass_baser   r   torch.fx.passes.shape_propr   r   torch.utilsr   rp   __all__ro   Valuer  r   PassTypesym_int	sym_floatsym_itesym_maxsym_minsym_notsym_sqrtr   set__annotations__RuntimeErrorr   r   r!   r"   r#   <module>r+     ss         " " " " " " 1 1 1 1 1 1 1 1 1 1 1 1        ; ; ; ; ; ; ? ? ? ? ? ? ; ; ; ; ; ; 7 7 7 7 7 7 H H H H H H H H 8 8 8 8 8 8 . . . . . . > > > > > >        # " " " " " @ @ @ @ @ @ @ @ O O O O O O O O ) ) ) ) ) ) /
/ c3hUX)*HZ,@@A 
M	O	M	M	M	M	N!H   	 	 	 	 	, 	 	 	t t t t t t t t t tr"   