
    9j]J                     .   U d dl Z d dlZd dlmZ d dlmZ d dl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                  jZ                  ge"dz  f   Z.ej^                  ej`                  ejb                  ejd                  ejf                  ejh                  ejj                  hZ6e7e   e8d<    G d de9      Z: G d de!      Z;y)    N)Callable)nullcontext)Any)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y)ExportPassBaseErrorN)__name__
__module____qualname__     W/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/_export/pass_base.pyr   r   0   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_metadata:   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__r-   torchnnModulerootr   Graphgraphset_codegentensor_attrsfake_tensor_mode
submodules)selfr-   r.   	__class__s      r!   r3   z7_ExportPassBaseDeprecatedDoNotUse.ExportTracer.__init__?   sd     G$DM)DI)DJJJ""7+9;D;?D!:<DOr    c                     t        d      )Nz%ExportTracer doesn't support trace().r   r>   s    r!   tracez4_ExportPassBaseDeprecatedDoNotUse.ExportTracer.traceK   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)
isinstancer4   r5   r6   r=   lenr7   
add_moduler   hasattrrG   r   r2   
create_argTensorr   Nodeopset_metadatar-   on_attrr	   )r>   rD   name_submodulenoder?   s       r!   rM   z9_ExportPassBaseDeprecatedDoNotUse.ExportTracer.create_argN   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    rT   valuec                     dt         dt        t        j                  z  t        j                  z  t        j
                  z  t        z  t        z  t        z  t        z  d z  f fd}t        j                  ||      |j                  d<   dt         dt        d z  f fd}t        j                  ||      |j                  d<   y )Nxr/   c           
      j   t        | t              r| S t        | t        j                        r| j                  rt        j
                  |       } 	 j                  t        d      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)N!fake_tensor_mode must not be NoneT)static_shapeszvFakeifying a Tensor subclass is not supported                             right now. Instead a TensorMetadata is used.)rI   r   r4   rN   is_quantized
dequantizer<   AssertionErrorr5   	Parameterfrom_tensorr   printSymIntSymFloatSymBoolintfloatboolstr)rW   fake_tensorr>   s     r!   make_valzM_ExportPassBaseDeprecatedDoNotUse.ExportTracer.set_metadata.<locals>.make_valh   s    a,H5<<0~~!,,Q/+008"01T"UU &a););<*.*?*?*K*K ! +L +K '& +/*?*?*K*KA*NK '& H/ : + J '+&&+s   AD *D D21D2valc                 @   t        | t              srt        | t        j                        rX| j                  rt        j
                  |       } 	 j                  t        d      j                  j                  |       }d }|S y # t        $ r t        |       }Y |S w xY w)NrY   )rI   r   r4   rN   r[   r\   r<   r]   r_   r   r   )rW   _tensor_metar>   s      r!   make_tensor_metazU_ExportPassBaseDeprecatedDoNotUse.ExportTracer.set_metadata.<locals>.make_tensor_meta   s    !!Z0Z5<<5P~~!,,Q/B008"01T"UU 11==a@&*
 '& : B '?q&A&&	Bs   4B BBrm   )Argumentr   r4   ra   rb   rc   rd   re   rf   rg   pytreetree_mapmetar   )r>   rT   rU   ri   rn   s   `    r!   rQ   z;_ExportPassBaseDeprecatedDoNotUse.ExportTracer.set_metadatab   s    6 6  ,,..! --  	
    6 p  &x?DIIe H  $1F  & (.7G'ODIIm$r    r/   N)r   r   r   r   r3   rC   ro   r4   r   rO   rM   rQ   __classcell__r?   s   @r!   ExportTracerr,   >   sr    
	=?
	=JQ
	=
	=	O	 	UXX]] 	(T	P((--T	P T	P 	T	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   gmr/   Nc                     t         |   |       || _        t        t	        |j
                  j                              | _        y r1   )r2   r3   r-   nextiterr9   nodesrT   )r>   r-   ry   r?   s      r!   r3   z<_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.__init__   s2     GR $DM'+D,@'ADIr    targetargs.kwargsc                     t         |   |||      }| j                  j                  ||t        | j                  j
                              S r1   )r2   placeholderr-   r   rT   rr   )r>   r~   r   r   argr?   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   )r-   outputr   rT   rr   datar>   r~   r   r   s       r!   r   z:_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.output   s2     ==''Qdiinn1MNSSSr    c                 4   t        | j                  j                        }|t        j                  u r"|\  }}| j
                  j                  |||      S t        |dd       dv r6t        |      st        d|       | j
                  j                  |||      S |t        v r6t        |      st        d|       | j
                  j                  |||      S t        |t        j                  j                  t        j                  j                   f      r| j
                  j#                  ||||      S |t        j$                  j&                  j(                  u r&|\  }}}	}
| j
                  j+                  |||	|
|      S |t        j$                  j&                  j,                  u r$|\  }}}| j
                  j/                  ||||      S t        |t        j                  j0                        r| j
                  j3                  d||||      S t5        d|       )Nr   >   mathbuiltins	_operatorzexpected callable target, got call_functionzUnsupported target type: )r   rT   rr   operatorgetitemr-   call_getitemgetattrcallabler]   call_symr   rI   r4   _ops
OpOverloadOpOverloadPacketcall_operatoropshigher_ordercond	call_condmap_implcall_mapHigherOrderOperator_fxr   )r>   r~   r   r   rr   rU   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4 9 
  '(+I&)RSS}}--fdDAA>)'(+I&)RSS}}--fdDAA..

0K0KL }}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 r1   )r2   rH   )r>   r~   r   r   r?   s       r!   rH   z<_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.get_attr  s     7#FD&99r    c                     t        d      )Nzcall_module is not supported.rA   r   s       r!   call_modulez?_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.call_module       &&EFFr    c                     t        d      )Nzcall_method is not supported.rA   r   s       r!   call_methodz?_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.call_method  r   r    nc                 n    || _         |j                         | j                  _        t        |   |      S r1   )rT   format_noder-   node_debug_strr2   run_node)r>   r   r?   s     r!   r   z<_ExportPassBaseDeprecatedDoNotUse.ExportInterpreter.run_node  s,    DI+,==?DMM(7#A&&r    )r   r   r   r   GraphModuler3   rg   tuplero   dictr	   r   r4   rT   Targetr   r   rH   r   r   rO   r   rt   ru   s   @r!   ExportInterpreterrx      s   	B?	BEG^^	B	B	X	X #&	X h'		X
 	X	THHMM((	T #&	T h'		T
 	T0	PHHMM((0	P #&0	P h'	0	P
 0	Pd	:	: #&	: h'		:
 	:	GHHMM((	G #&	G h'		G
 	G	G	G #&	G h'		G
 	G	'ehhmm 	' 	' 	'r    r   r/   Nc                 8   t        t        j                  j                  t        j                  j                         t        j                  j                                     | _        | j                  | t                     | _
        d | _        d| _        d | _        y )NT)r   r4   r   r   r5   r6   r8   interpreterrv   r   tracerr<   _initializedr   rB   s    r!   r3   z*_ExportPassBaseDeprecatedDoNotUse.__init__!  si    3HH  !2EHHNN4DE
 ''gi87; *.r    kindr~   r   .r   rr   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 r1   r   rW   s    r!   <lambda>z7_ExportPassBaseDeprecatedDoNotUse._fx.<locals>.<lambda>3  s
    !&& r    c                     | j                   S r1   )proxyr   s    r!   r   z7_ExportPassBaseDeprecatedDoNotUse._fx.<locals>.<lambda>7  s
    !'' r    )nameunbacked_bindings)rp   tree_map_onlyr	   r   r   rI   r4   r   r   r   r9   _target_to_stroverloadpacketr   create_proxyrT   rr   updater   r<   	shape_envr   rQ   )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*  sS    "(!5!5(4."
	; 374++T269kR#)#7#7)D&>$
 
L fejj334;;$$33F4I4I4R4RSDKK,,&*l - 
	 	""499-  43H3H3R3R&Ri&R!:9h!OO~O;I	##$78  :(I..r    graph_modulec                 (    j                   j                  dd       x}t        |      S dt        j                  j
                  dt        d z  f fd}j                  j                  D cg c]  }|j                  dk(  r ||       c}S c c}w )Nr   rT   r/   c           
         d| j                   v r5| j                   d   }t        |d      r|j                  |j                  S |S | j                   j                  d      x}rj                  t        d      t        j                  t        j                  |j                  |j                  d|j                  |j                        t        j                  d            S t        | j                        dk(  ry t!        d	 d
      )Nrj   rG   rm   rY   rr   )dtypedevicerequires_gradmemory_formatcpur   z,Cannot construct an input for graph module: .)rr   rL   rG   getr<   r]   r   r4   emptyshaper   r   r   r   rJ   usersr   )rT   fakerm   r   r>   s      r!   extract_inputz?_ExportPassBaseDeprecatedDoNotUse.inputs.<locals>.extract_inputN  s    		!yy'4,1J==( $		m <<<((0()LMM!))KK#)))//%&1&?&?&1&?&? LL'
 
 TZZA%%>|nAN r    r   )
rr   r   listr4   r   rO   r   r9   r}   rP   )r>   r   r   r   rT   s   ``   r!   r   z(_ExportPassBaseDeprecatedDoNotUse.inputsH  s     !%%))&$77DD:	 	*t2C 	8 %**00
ww-' $
 	
 
s   .Battrc                      y r1   r   )r>   r   s     r!   rR   z)_ExportPassBaseDeprecatedDoNotUse.on_attrn  s    r    r   r   c                     | j                   j                  d|di       }|j                  |j                  _        | j                   j                  |j                  |       t        ||      S )Nr   r   )r   r   r   rT   rr   rQ   r	   )r>   r   r   rr   	arg_proxys        r!   r   z-_ExportPassBaseDeprecatedDoNotUse.placeholderq  sQ    KK,,]D"bI	"ii	  5#y))r    c                 ,    | j                  d||||      S Nr   r   )r>   rP   r   r   rr   s        r!   r   z/_ExportPassBaseDeprecatedDoNotUse.call_operatorw  s     xxT64@@r    c                 ,    | j                  d||i |      S r   r   )r>   r~   r   rr   s       r!   r   z*_ExportPassBaseDeprecatedDoNotUse.call_sym  s     xxr4@@r    r   r   r   r   c           
      R   | j                  |t        |            }| j                  |t        |            }|t        d      |t        d      | j                  dt        j
                  j                  j                  ||j                  |j                  t        |      fi |      S )Nztrue_branch must not be Nonezfalse_branch must not be Noner   )
call_submoduler   r]   r   r4   r   r   r   r   r   )r>   r   r   r   r   rr   true_branchfalse_branchs           r!   r   z+_ExportPassBaseDeprecatedDoNotUse.call_cond  s     ))'5=A**8U6]C !?@@ !@AAxxII""'';++\-F-FVU
 	
r    r   r   r   c           
      p   t        |D cg c]  }|j                   c}      d   }| j                  |t        ||D cg c]  }|j                   c}z               }|t	        d      | j                  dt        j                  j                  j                  |j                  ||fi |      S c c}w c c}w )Nr   zf_branch must not be Noner   )r
   r   r   r   r]   r   r4   r   r   r   r   )r>   r   r   r   rr   r   xsf_branchs           r!   r   z*_ExportPassBaseDeprecatedDoNotUse.call_map  s     +>3chh>?B&&q%(5S3chh5S0S*TU !<==xxII""++""K:
 	
	 ?5Ss
   B.B3rU   r   c                 L    | j                  dt        j                  ||fi |      S r   )r   r   r   )r>   rU   r   rr   s       r!   r   z._ExportPassBaseDeprecatedDoNotUse.call_getitem  s%     xx)9)9E3<TRRr    resultsc                 .    | j                  dd|fi |      S )Nr   r   )r>   r   rr   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 r1   r   r   s    r!   r   zB_ExportPassBaseDeprecatedDoNotUse.call_submodule.<locals>.<lambda>  s
     r    T)r   rv   r9   _codegenr<   r   r   r4   r   Interpreterr   r5   r6   r8   rp   r   r	   fx_tracebackpreserve_node_metarunr7   r   )r>   r   r   prev_tracerr   prev_interpreterinputs_datanew_graph_modules           r!   r   z0_ExportPassBaseDeprecatedDoNotUse.call_submodule  sA    KKdL$6$6$?$?@ 	!T[ (3'C'C$,,T<@ HH  $$UXX__%68HI 	+$* **:7GP,,. 	*KOO[)	* !88//0@0@$++BSBST!+
 	
	* 	*s   FF c                 L   t        | dd      st        d      | j                  |      }d }|D ]:  }t        |t              s|||j
                  urt        d      |j
                  }< |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   rI   r   	fake_moder]   r   r   r<   r   r   r   r   r   )r>   r   r   r<   idispatcher_moderesults          r!   callz&_ExportPassBaseDeprecatedDoNotUse.call  s"   t^U3%@  \* 	/A!Z(#/4DAKK4W()NOO#$;; 		/
 #+9PT+UDKK(*})mO592+;DKK(68O $ < < 	F 	F((uV}EF	F 	F 	F 	F 	F s$   DD;DD	DD#rs   )&r   r   r   __doc__staticmethodr*   r   rv   r   r   r   r3   rg   r4   rT   r   r   ro   r   r   r	   r   r   r   r   rR   r   r   Fnr   r   r   rd   r   r   r   r   r  r   r    r!   r   r   4   s   
 W WxP xPtg'BNN g'R/// $$/ HcM"	/
 S(]#/ / 
/<$
588#7#7 $
DN $
L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
	
: J r    )<r   r   collections.abcr   
contextlibr   typingr   r4   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&     s      $ "    ; ? ; 7 H 8 . > # @ O ) /
/ c3hUXX))*J,==> 
MM	OO	MM	MM	MM	MM	NN!H 	, 	} }r    