
    Wj+                        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 d dl	Z	d dl
Z	d Zd Zd Zd Zdd	Zd
 ZdddZe	j        j        ee	j        j        ee	j        ee	j        j        j        ee	j        j        ee	j        ee	j        eiZeeef         ed<   d Z G d de	j        j                  Z  G d de           Z! G d de!          Z"d Z# G d de	j        j$                  Z%	 	 ddee	j        j&        edef         f         deee'e	j(        f                  deee'ef                  de	j        j)        fdZ*dS )     N)Callable)AnyOptionalUnionc                 X    t          j        g |j        | j        j        d         R ddiS )Ndevicemeta)torchemptyshapeweightselfinputs     f/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/torch/fx/experimental/meta_tracer.pyembedding_overrider      s1    ;JJT[%6r%:JJJ6JJJ    c                     |S N r   s     r   nn_layernorm_overrider      s    Lr   c                     | S r   r   )xs    r   torch_relu_overrider          Hr   c                     |S r   r   )r   r   s     r   torch_nn_relu_overrider      r   r   Fc                 (    |rt          d          | S )Nz<dont support inplace functional.relu for metatensor analysisAssertionError)r   inplaces     r   functional_relu_overrider#      s&     
J
 
 	
 Hr   c                     |                      d          |                     d          z   |                     d          z   S )Nr
   r	   )to)	conditionr   ys      r   torch_where_overrider)   $   s>     <<v<&&V)<)<<qtt6t?R?RRRr   )outc                (    |t          d          | S )Nz1Dont support in-place abs for MetaTensor analysisr    )r   r*   s     r   torch_abs_overrider,   *   s    
PQQQLr   manual_meta_overridesc                 J     t          j                    fd            }| fS )Nc                      d fd}t           j        j                            | |           t           j        j                            ||           j                            d| |          S  | i |S )Nc                 N    t          | t          j        j                  r| d S d S r   )
isinstancer   fxProxy)vproxys    r   check_has_proxyzAgen_constructor_wrapper.<locals>.wrapper.<locals>.check_has_proxy@   s,    !UX^,,  r   call_function)r   r2   nodemap_aggregatetracercreate_proxy)argskwargsr6   r5   targets      @r   wrapperz(gen_constructor_wrapper.<locals>.wrapper<   s    	 	 	 	 	
 	##D/:::##FO<<<<,,_fdFSSS64*6***r   )	functoolswraps)r>   r?   s   ` r   gen_constructor_wrapperrB   ;   s=    _V+ + + + +  F?r   c                   j    e Zd Zd Zd	dZd Zed             Zed             Zed             Z	d Z
dS )
	MetaProxyc                     || _         d S r   )_tensor_meta)r   tensor_metas     r   install_tensor_metazMetaProxy.install_tensor_metaQ   s    'r   Nc                     t          | d          r| j         | j        j        |r|gng  S | j                            dd|r| |fn| fi           S )NrF   call_methodsize)hasattrrF   rK   r:   r;   )r   dims     r   rK   zMetaProxy.sizeT   sm    4(( 	AT->-J)4$)C+?C55R@@{''6##BD#;;D7B
 
 	
r   c                     t          | d          r | j        | j                                        S | j                            dd| fi           S )NrF   rJ   rM   )rL   rF   rM   r:   r;   r   s    r   rM   zMetaProxy.dim[   sO    4(( 	+T->-J$((***{''utgrJJJr   c                     t          | d          r| j        | j        j        S | j                            dt
          j        | dfi           S )NrF   r7   r   )rL   rF   r   r:   r;   builtinsgetattrrO   s    r   r   zMetaProxy.shape`   R    4(( 	+T->-J$**{''X-g
 
 	
r   c                     t          | d          r| j        | j        j        S | j                            dt
          j        | dfi           S )NrF   r7   dtype)rL   rF   rU   r:   r;   rQ   rR   rO   s    r   rU   zMetaProxy.dtypeh   rS   r   c                 "    t          | d          S )Nr	   )MetaDeviceAttributerO   s    r   r	   zMetaProxy.devicep   s     #4222r   c                 X    |dk    r|                      |          S t          | |          S )NrF   )__getattribute__MetaAttribute)r   ks     r   __getattr__zMetaProxy.__getattr__v   s3    ((+++ T1%%%r   r   )__name__
__module____qualname__rH   rK   rM   propertyr   rU   r	   r\   r   r   r   rD   rD   P   s        ( ( (
 
 
 
K K K
 
 
 X
 
 
 X
 3 3 X3
& & & & &r   rD   c                   6    e Zd ZdefdZed             Zd ZdS )rZ   attrc                 H    || _         || _        |j        | _        d | _        d S r   )rootrb   r:   _node)r   rd   rb   s      r   __init__zMetaAttribute.__init__   s$    		k


r   c                     | j         8| j                            dt          | j        | j        fi           j        | _         | j         S )Nr7   )re   r:   r;   rR   rd   rb   r8   rO   s    r   r8   zMetaAttribute.node   sG     :1149di*@"  J zr   c                 X    | j                             d| j        | j        f|z   |          S )NrJ   )r:   r;   rb   rd   )r   r<   r=   s      r   __call__zMetaAttribute.__call__   s0    {''49tylT&96
 
 	
r   N)r]   r^   r_   strrf   r`   r8   ri   r   r   r   rZ   rZ   ~   sY        3       X
 
 
 
 
r   rZ   c                       e Zd ZdS )rW   N)r]   r^   r_   r   r   r   rW   rW      s        Dr   rW   c                 &   t          | t                    rdS t          | t          j        j                  rZt          | t
                    st          dt          |                      t          | d          st          d          | j	        S | S )Nr
   zExpected MetaProxy but got rF   z*MetaProxy does not have an associated meta)
r1   rW   r   r2   r3   rD   r!   typerL   rF   )r4   s    r   proxys_to_metasrn      s    !()) v!UX^$$ !Y'' 	J !HtAww!H!HIIIq.)) 	O !MNNN~Hr   c                        e Zd ZU dZeed<   g dZ	 	 	 d fd	Z fdZ fdZ	de
j        j        d	efd
Zde
j        j        d	ef fdZd Zddeee
j        f         f fdZ xZS )
MetaTracerTallow_insert_stateless_mods)arangezerosones	full_likeeyeNc           	         t                                          |||||||          }|dk    r+|| j        v r"|                    | j        |                    |S || j        v r	d|v rd|d<   	 t
          j        j                            |t                    }	t
          j        j                            |t                    }
|dk    r%t                              ||          } ||	i |
}ni|dk    r(t          |	d         |          } ||	dd          i |
}n;|dk    rt          | d	          st          d
          d| _        	 | j                            |          }t%          |          }|t          v rt          |         |g|	R i |
}n | j        |	i |
}d| _        n# d| _        w xY w|dk    rd| _        	 | j        }|                    d          }|D ]}t          ||          }t+          |t
          j                  st          dt%          |                     |                    d          }d| _        n# d| _        w xY w|S t+          |t
          j        j                  st          d          |                    |           n4# t2          $ r'}t5          j        d| d| d|            Y d }~nd }~ww xY w|S )Nplaceholderr	   r
   r7   rJ   r      call_moduleorig_forwardz$orig_forward not set for call_moduleTFget_attr.zExpected Tensor, got r%   z!Dont support composite output yetzCould not compute metadata for z target z: )superr;   	meta_argsrH   orig_fnsr   r2   r8   r9   rn   r-   getrR   rL   r!   _disable_module_getattrrd   get_submodulerm   r{   splitr1   Tensorr&   r3   	Exceptionwarningswarn)r   kindr>   r<   r=   name	type_exprproxy_factory_fnrv
args_metaskwargs_metasmeta_targetmeta_outmodmod_typeattr_itratomsatome	__class__s                      r   r;   zMetaTracer.create_proxy   sf    WW!!	
 	
 =  Vt~%=%=""4>&#9:::IT]"" 6!!#)x .	Y44T?KKJ 8=66vOOL&&377GG&;
ClCC&&%jmV<<&;
122G,GG&&t^44 Q()OPPP/3,
9)11&99C#CyyH#888#8#B$",$ $ $0<$ $ $54#4j#QL#Q#Q38D005D08888##/3,	9#yH"LL--E % ; ;#*8T#:#:%h== W,-UT(^^-U-UVVV'{{&{99H38D005D08888	 b%(.11 J$%HIII""8,,,, 	Y 	Y 	YMWDWW&WWTUWWXXXXXXXX	Y 	sR   -CJ AF% J %	F..J ?B I ?J 	IJ AJ 
K
#KK
c                 p    t          | dd          r|S t                                           |||          S )Nr   F)rR   r~   )r   rb   attr_valparameter_proxy_cacher   s       r   rR   zMetaTracer.getattr   s9    42E:: 	JO77??43HIIIr   c                 Z    || _         t                                          ||||          S r   )r{   r~   rz   )r   mforwardr<   r=   r   s        r   rz   zMetaTracer.call_module  s)    #ww""1gtV<<<r   r   returnc                     d}|j         j                                        }| d| }t          | j        |          r!| d| }|dz  }t          | j        |          !| j                            ||           |S )zb
        Helper method which tries to insert a module that was not declared as submodule.
        r   _ry   )r   r]   lowerrL   rd   
add_module)r   r   idxmod_namepaths        r   _insert_module_as_submodulez&MetaTracer._insert_module_as_submodule  s     =)//11""S""di&& 	&&&&D1HC di&& 	 		T3'''r   c                 |   	 t                                          |          S # t          $ r | j        rt	          t          |                                                    dk    rRt	          t          |                                                    dk    r |                     |          }|| _	        |cY S  w xY w)Nr   )
r~   path_of_module	NameErrorrq   lenlist
parametersbuffersr   prev_module)r   r   r   r   s      r   r   zMetaTracer.path_of_module  s    	77))#... 		 		 		0S^^--..//144S[[]]++,,1177<<#' 		s    $ BB;9B;c                 "    t          ||           S r   )rD   )r   r8   s     r   r5   zMetaTracer.proxy$  s    t$$$r   r   c                    t          |t                    st          dt          |                     || _        d | j        D             | _        t                      | _        | j        	                                D ]8\  }\  }}t          t          ||           | j                            |           9	 t                                          ||          }d|i|_        || j        	                                D ]\  }\  }}t          t          ||           S # | j        	                                D ]\  }\  }}t          t          ||           w xY w)Nz!Expected dict for meta_args, got c           	      T    i | ]%}|t          t          t          |                    &S r   )rB   rR   r   ).0r>   s     r   
<dictcomp>z$MetaTracer.trace.<locals>.<dictcomp>,  s=     &
 &
 &
 +GE6,B,BCC&
 &
 &
r   r   )r1   dictr!   rm   r   _TORCH_METHODS_TO_PATCHpatched_torch_methodssetr   itemssetattrr   addr~   trace_tracer_extras)
r   rd   r   concrete_argsr   r?   origgraphr   r   s
            r   r   zMetaTracer.trace'  sl   )T** 	X !VT)__!V!VWWW"&
 &
6&
 &
 &
" %)%?%E%E%G%G 	$ 	$!D/7DE4)))Md####	+GGMM$66E$/#;E #'#=#C#C#E#E + +iq$tT****+4#=#C#C#E#E + +iq$tT****+s   9,D :E)NNNr   )r]   r^   r_   rq   bool__annotations__r   r;   rR   rz   r   nnModulerj   r   r   r5   r   r   r   __classcell__)r   s   @r   rp   rp      s@        (,,,,MMM R R R R R RhJ J J J J= = = = =ux 3    %(/ c      % % %+ +T#u|*;%< + + + + + + + + + +r   rp   rd   .r   r   r   c                     t                      }|                    | ||          }t          | t          j        j                  r| j        j        n| j        }t          j        	                    |j
        ||          }|S r   )rp   r   r1   r   r   r   r   r]   r2   GraphModulerd   )rd   r   r   r:   r   r   gms          r   symbolic_tracer   ?  sk    
 \\FLLy-88E#-dEHO#D#DW$- 	 
		fk5$	7	7BIr   )F)NN)+rQ   r@   r   collections.abcr   typingr   r   r   r   torch.fxr   r   r   r   r#   r)   r,   r   	Embedding	LayerNormrelu
functionalReLUwhereabsr-   r   r   rB   r2   r3   rD   rZ   rW   rn   Tracerrp   r   rj   r   r   r   r   r   r   <module>r      s         $ $ $ $ $ $ ' ' ' ' ' ' ' ' ' '  K K K         S S S &*      
H*	H-	J#	H6	HM)	K%	I!3 tHh./     *+& +& +& +& +& +& +& +&\
 
 
 
 
I 
 
 
.	 	 	 	 	- 	 	 		 	 	W+ W+ W+ W+ W+ W+ W+ W+x 48.2 
#s(!33
4S%,./0 DcN+ X	     r   