
    sgD                     F   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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! d dl"m#Z#m$Z$ d dl%m&Z&m'Z' d dl(m)Z* d dl+m,Z,m-Z- dgZ.eZ/eZ0edef   Z1eej                   jd                  ge	e$   f   Z3ejh                  ejj                  ejl                  ejn                  ejp                  ejr                  ejt                  hZ;e
e   e<d<    G d de=      Z> G d de#      Z?y)    N)nullcontext)AnyCallableDictListOptionalSetTupleUnion)_unstack_pytree)fx)enable_python_dispatcher)NodeMetadata)
ProxyValue)
FakeTensorUnsupportedFakeTensorException)FakeTensorMode)	traceback)PythonKeyTracer)CodeGen)PassBase
PassResult)_extract_tensor_metadataTensorMetadata)_pytree)PropagateUnbackedSymIntscompute_unbacked_bindings!_ExportPassBaseDeprecatedDoNotUse._TORCH_SYM_OPSc                       e Zd Zy)ExportPassBaseErrorN)__name__
__module____qualname__     J/var/www/html/venv/lib/python3.12/site-packages/torch/_export/pass_base.pyr!   r!   -   s    r&   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%y)+r   zl
    Interpreter-based pass class to help users maintain the IR spec while writing
    transformations.
    c                  b    t        ddj                  t        j                  d            i      S )Nstack_trace    )limit)r   joinr   format_stackr%   r&   r'   _create_dummy_node_metadataz=_ExportPassBaseDeprecatedDoNotUse._create_dummy_node_metadata7   s'    ]BGGI4J4JQR4S,TU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                  j                         | _        t        j                  j                         | _	        | j                  j                  |       i | _        d | _        i | _        y N)super__init__r3   torchnnModulerootr   Graphgraphset_codegentensor_attrsfake_tensor_mode
submodules)selfr3   r4   	__class__s      r'   r9   z7_ExportPassBaseDeprecatedDoNotUse.ExportTracer.__init__=   sb    G$DM)DI)DJJJ""7+9;D>BD!:<DOr&   c                     t        d      )Nz%ExportTracer doesn't support trace().r!   rD   s    r'   tracez4_ExportPassBaseDeprecatedDoNotUse.ExportTracer.traceG   s    %&MNNr&   ac                    t        |t        j                  j                        rR|| j                  vrdt        | j                         }| j                  j                  ||       || j                  |<   nCt        |t              r3t        |d      r|j                  t        d| d      |j                  }t        | 5  |      }t        |t        j                        rjt        |t        j                  j                         rF|j"                  dk(  r7| j%                  ||       | j&                  j)                  t+        ||             |S )N
submodule_constantzCannot add z
 to graph.get_attr)
isinstancer:   r;   r<   rC   lenr=   
add_moduler   hasattrrM   r!   r8   
create_argTensorr   Nodeopset_metadatar3   on_attrr   )rD   rJ   name_submodulenoderE   s       r'   rS   z9_ExportPassBaseDeprecatedDoNotUse.ExportTracer.create_argJ   s    !UXX__-DOO+'1#doo2F1G%HNII((;)7DOOA&Az*q*-1C-A3j.IJJJJ7%a(D1ell+tUXX]]3GGz)!!$*%%jD&9:Kr&   rZ   valuec                 |    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<   y )Nxr5   c           
      X   t        | t              r| S t        | t        j                        r| j                  rt        j
                  |       } 	 j                  J t        | t        j                  j                        rj                  j                  | d      }|S j                  j                  |       }	 |S t        | t        j                  t        j                  t        j                  t        t         t"        t$        f      r| S y # t        $ r t        d       d }Y |S w xY w)NT)static_shapeszvFakeifying a Tensor subclass is not supported                             right now. Instead a TensorMetadata is used.)rO   r   r:   rT   is_quantized
dequantizerB   r;   	Parameterfrom_tensorr   printSymIntSymFloatSymBoolintfloatboolstr)r]   fake_tensorrD   s     r'   make_valzM_ExportPassBaseDeprecatedDoNotUse.ExportTracer.set_metadata.<locals>.make_valb   s    a,H5<<0~~!,,Q/+#44@@@ &a););<*.*?*?*K*K ! +L +K '& +/*?*?*K*KA*NK '&ELL%..%--QTV[]acf#ghH : + J '+&&+s   AD !D D)(D)valc                 .   t        | t              sit        | t        j                        rO| j                  rt        j
                  |       } 	 j                  J j                  j                  |       }d }|S y # t        $ r t        |       }Y |S w xY wr7   )
rO   r   r:   rT   r`   ra   rB   rc   r   r   )r]   _tensor_metarD   s      r'   make_tensor_metazU_ExportPassBaseDeprecatedDoNotUse.ExportTracer.set_metadata.<locals>.make_tensor_meta   s    !!Z0Z5<<5P~~!,,Q/B#44@@@ 11==a@&*
 '& : B '?q&A&&	Bs   +A< <BBrq   )Argumentr   r   r:   re   rf   rg   rh   ri   rj   rk   pytreetree_mapmetar   r   )rD   rZ   r[   rm   rr   s   `    r'   rW   z;_ExportPassBaseDeprecatedDoNotUse.ExportTracer.set_metadata^   s        z5<<PSUZ\`begkkl  D  &x?DIIe H  .1I  $ (.7G'ODIIm$r&   r5   N)r"   r#   r$   r   r9   rI   rs   r:   r   rU   rS   rW   __classcell__rE   s   @r'   ExportTracerr2   <   sj    	=%H 	=SZ 	=_c 	=	O	 	UXX]] 	(;	P;	P.6;	P;	Pr&   rz   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.ExportInterpreterr3   r   gmr5   Nc                     t         |   |       || _        t        t	        |j
                  j                              | _        y r7   )r8   r9   r3   nextiterr?   nodesrZ   )rD   r3   r}   rE   s      r'   r9   z<_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.__init__   s0    GR $DM'+D,@'ADIr&   targetargs.kwargsc                     t         |   |||      }| j                  j                  ||t        | j                  j
                              S r7   )r8   placeholderr3   r   rZ   rv   )rD   r   r   r   argrE   s        r'   r   z?_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.placeholder   s>     '%fdF;C==,,VS,tyy~~:VWWr&   c                     | j                   j                  |d   t        | j                  j                              j
                  S )Nr   )r3   outputr   rZ   rv   datarD   r   r   r   s       r'   r   z:_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.output   s2     ==''Qdiinn1MNSSSr&   c                 
   t        | j                  j                        }|t        j                  k(  r"|\  }}| j
                  j                  |||      S t        |dd       dv r*t        |      sJ | j
                  j                  |||      S |t        v r*t        |      sJ | j
                  j                  |||      S t        |t        j                  j                  t        j                  j                  f      r| j
                  j!                  ||||      S |t        j"                  j$                  j&                  k(  r&|\  }}}	}
| j
                  j)                  |||	|
|      S |t        j"                  j$                  j*                  k(  r$|\  }}}| j
                  j-                  ||||      S t        |t        j                  j.                        r| j
                  j1                  d||||      S t3        d|       )Nr#   >   math	_operatorcall_functionzUnsupported target type: )r   rZ   rv   operatorgetitemr3   call_getitemgetattrcallablecall_symr   rO   r:   _ops
OpOverloadOpOverloadPacketcall_operatoropshigher_ordercond	call_condmap_implcall_mapHigherOrderOperator_fxr!   )rD   r   r   r   rv   r[   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t48MM'''}}--fdDAA>)'''}}--fdDAAFUZZ%:%:EJJ<W<W$XY}}22	  5991166626/gx}}..tWhPTUU59911:::+/(;}}--ahMMFEJJ$B$BC}}((#  *,EfX*NOOr&   c                 &    t         |   |||      S r7   )r8   rN   )rD   r   r   r   rE   s       r'   rN   z<_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.get_attr   s     7#FD&99r&   c                     t        d      )Nzcall_module is not supported.rG   r   s       r'   call_modulez?_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.call_module   s     &&EFFr&   c                     t        d      )Nzcall_method is not supported.rG   r   s       r'   call_methodz?_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.call_method   s     &&EFFr&   nc                 n    || _         |j                         | j                  _        t        |   |      S r7   )rZ   format_noder3   node_debug_strr8   run_node)rD   r   rE   s     r'   r   z<_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.run_node   s,    DI+,==?DMM(7#A&&r&   )r"   r#   r$   r   GraphModuler9   rk   r
   rs   r   r   r   r:   rZ   Targetr   r   rN   r   r   rU   r   rx   ry   s   @r'   ExportInterpreterr|      s   	B%H 	Bbnn 	Bae 	B
	X	X #&	X h'		X
 	X	THHMM((	T #&	T h'		T
 	T(	PHHMM(((	P #&(	P h'	(	P
 (	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 	' 	' 	'r&   r   r5   Nc                 8   t        t        j                  j                  t        j                  j                         t        j                  j                                     | _        | j                  | t                     | _
        d | _        d| _        d | _        y )NT)r   r:   r   r   r;   r<   r>   interpreterrz   r   tracerrB   _initializedr   rH   s    r'   r9   z*_ExportPassBaseDeprecatedDoNotUse.__init__   si    3HH  !2EHHNN4DE
 ''gi8:> 48r&   kindr   r   .r   rv   c                    t        j                  t        d ||f      \  }} t        | j                  |      |||      }t        j                  t        d ||f      \  }	}
d }t        |t        j                  j                        r9| j                  j                  j                  |j                  j                        }| j                  j                  |||	|
|      }|j                  j                   j#                  |j$                         | j&                  r?| j&                  j(                  x}r't+        ||      x}r||j                  j                   d<   | j                  j-                  |j                  |       t        ||      S )Nc                     | j                   S r7   r   r]   s    r'   <lambda>z7_ExportPassBaseDeprecatedDoNotUse._fx.<locals>.<lambda>  s
    !&& r&   c                     | j                   S r7   )proxyr   s    r'   r   z7_ExportPassBaseDeprecatedDoNotUse._fx.<locals>.<lambda>	  s
    !'' r&   )nameunbacked_bindings)rt   tree_map_onlyr   r   r   rO   r:   r   r   r   r?   _target_to_stroverloadpacketr"   create_proxyrZ   rv   updater   rB   	shape_envr   rW   )rD   r   r   r   r   rv   	args_datakwargs_datares_data
args_proxykwargs_proxyr   	res_proxyr   symbol_to_paths                  r'   r   z%_ExportPassBaseDeprecatedDoNotUse._fx   sM    "(!5!5(4."
	; 374++T269kR#)#7#7)D&>$
 
L fejj334;;$$33F4I4I4R4RSDKK,,T6:|Z^,_	""499-  43H3H3R3R&Ri&R!:9h!OO~O;I	##$78  :(I..r&   graph_modulec                 0    j                   j                  dd       x}t        |      S dt        j                  j
                  dt        t           f fd}j                  j                  D cg c]  }|j                  dk(  r ||       c}S c c}w )Nr   rZ   r5   c           
         d| j                   v r5| j                   d   }t        |d      r|j                  |j                  S |S | j                   j                  d      x}rxj                  J t        j                  t        j                  |j                  |j                  d|j                  |j                        t        j                  d            S t        | j                        dk(  ry t        d d	      )
Nrn   rM   rq   rv   )dtypedevicerequires_gradmemory_formatcpur   z,Cannot construct an input for graph module: .)rv   rR   rM   getrB   r   r:   emptyshaper   r   r   r   rP   usersr!   )rZ   fakerq   r   rD   s      r'   extract_inputz?_ExportPassBaseDeprecatedDoNotUse.inputs.<locals>.extract_input  s    		!yy'4,1J==( $		m <<<,,888!))KK#)))//%&1&?&?&1&?&? LL'
 
 TZZA%%>|nAN r&   r   )rv   r   listr:   r   rU   r   r   r?   r   rV   )rD   r   r   r   rZ   s   ``   r'   r   z(_ExportPassBaseDeprecatedDoNotUse.inputs  s     !%%))&$77DD:	 	(:2F 	6 %**00
ww-' $
 	
 
s   2Battrc                      y r7   r%   )rD   r   s     r'   rX   z)_ExportPassBaseDeprecatedDoNotUse.on_attr=  s    r&   r   r   c                     | j                   j                  d|di       }|j                  |j                  _        | j                   j                  |j                  |       t        ||      S )Nr   r%   )r   r   r   rZ   rv   rW   r   )rD   r   r   rv   	arg_proxys        r'   r   z-_ExportPassBaseDeprecatedDoNotUse.placeholder@  sQ    KK,,]D"bI	"ii	  5#y))r&   c                 ,    | j                  d||||      S Nr   r   )rD   rV   r   r   rv   s        r'   r   z/_ExportPassBaseDeprecatedDoNotUse.call_operatorF  s     xxT64@@r&   c                 ,    | j                  d||i |      S r   r   )rD   r   r   rv   s       r'   r   z*_ExportPassBaseDeprecatedDoNotUse.call_symO  s     xxr4@@r&   r   r   r   r   c           
      .   | j                  |t        |            }| j                  |t        |            }|J |J | j                  dt        j                  j
                  j                  ||j                  |j                  t        |      fi |      S r   )	call_submoduletupler   r:   r   r   r   r   r   )rD   r   r   r   r   rv   true_branchfalse_branchs           r'   r   z+_ExportPassBaseDeprecatedDoNotUse.call_condW  s     ))'5=A**8U6]C&&&'''xxII""'';++\-F-FVU
 	
r&   r   r   r   c           
      ^   t        |D cg c]  }|j                   c}      d   }| j                  |t        ||D cg c]  }|j                   c}z               }|J | j	                  dt
        j                  j                  j                  |j                  ||fi |      S c c}w c c}w )Nr   r   )
r   r   r   r   r   r:   r   r   r   r   )rD   r   r   r   rv   r   xsf_branchs           r'   r   z*_ExportPassBaseDeprecatedDoNotUse.call_mapk  s     +>3chh>?B&&q%(5S3chh5S0S*TU###xxII""++""K:
 	
 ?5Ss
   B%B*r[   r   c                 L    | j                  dt        j                  ||fi |      S r   )r   r   r   )rD   r[   r   rv   s       r'   r   z._ExportPassBaseDeprecatedDoNotUse.call_getitem}  s%     xx)9)9E3<TRRr&   resultsc                 .    | j                  dd|fi |      S )Nr   r   )rD   r   rv   s      r'   r   z(_ExportPassBaseDeprecatedDoNotUse.output  s    xx(WJDAAr&   c                 F   | j                   | j                  | |j                  j                        c}| _         |j                  | j                   _        | j                  | |      }| j                  t        j                  j                  t        j                  j                  t        j                  j                         t        j                  j                                     c}| _        t        j                  t         d |      }t#        j$                         5   |j&                  |  d d d        t        j                  j                  | j                   j(                  | j                   j                        }|| _         || _        t+        |d      S # 1 sw Y   kxY w)Nc                     | j                   S r7   r   r   s    r'   r   zB_ExportPassBaseDeprecatedDoNotUse.call_submodule.<locals>.<lambda>  s
     r&   T)r   rz   r?   _codegenrB   r   r   r:   r   Interpreterr   r;   r<   r>   rt   r   r   fx_tracebackpreserve_node_metarunr=   r   )rD   r   r   prev_tracerr   prev_interpreterinputs_datanew_graph_modules           r'   r   z0_ExportPassBaseDeprecatedDoNotUse.call_submodule  s=    $(;;0A0A,$$--1
 T[ (3'C'C$,,T<@-1-=-=uxx?S?SHH  !2EHHNN4DE@
*$* **:7GP,,. 	*KOO[)	* !88//0@0@$++BSBST!+
 	
	* 	*s   FF c                 D   t        | dd      st        d      | j                  |      }d }|D ]6  }t        |t              s|||j
                  u sJ d       |j
                  }8 |0t        d      | j                  _        t               }t               }n"d|_
        || j                  _        t               }| j                  j                  | _        |5  |5  | j                  |t        |            }d d d        d d d        S # 1 sw Y   xY w# 1 sw Y   S xY w)Nr   Fz.ExportPass is not initialized with __init__().z#Multiple fake tensor mode detected.T)allow_non_fake_inputs)r   r!   r   rO   r   	fake_moder   r   rB   r   r  r   r   r   )rD   r   r   rB   idispatcher_moderesults          r'   callz&_ExportPassBaseDeprecatedDoNotUse.call  s&   t^U3%@  \* 	/A!Z($,0@AKK0O989O#$;; 	/ #+9PT+UDKK(*})mO592+;DKK(68O $ < < 	F 	F((uV}EF	F 	F 	F 	F 	F s$   DD	7D	D	DDrw   )&r"   r#   r$   __doc__staticmethodr0   r   rz   r   r   r   r9   rk   r:   rZ   r   r
   rs   r   r   r   r   r   r   r   rX   r   r   Fnr   r   r   rh   r   r   r   r   r  r%   r&   r'   r   r   1   s   
 W W]P ]P~V'BNN V'p9// $$/ HcM"	/
 S(]#/ / 
/8#
588#7#7 #
DN #
JJ 4 * *( *, *: *A HcM"A S(]#	A
 A 
AAA HcM"A 	A
 
A

 %%
 ((&&	

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

 
 

$SS&)S1=S	S
Bd8n BL BZ B
NN
49(C-4H
	
0 J r&   )@r   r   typing
contextlibr   r   r   r   r   r   r	   r
   r   r:   #functorch.experimental.control_flowr   r   torch._dispatch.pythonr   &torch._export.pass_infra.node_metadatar   $torch._export.pass_infra.proxy_valuer   torch._subclassesr   r   torch._subclasses.fake_tensorr   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   rt   %torch.fx.experimental.symbolic_shapesr   r   __all__rs   Valuer	  r   PassTypesym_int	sym_floatsym_itesym_maxsym_minsym_notsym_sqrtr   __annotations__RuntimeErrorr!   r   r%   r&   r'   <module>r%     s       " I I I  ?  ; ? ; H 8 . > " @ O ) e /
/ c3hUXX))*HZ,@@A 
MM	OO	MM	MM	MM	MM	NN!H 	, 	H Hr&   