
    Vh7)                        U d dl Z d dlZd dlZd dlmZ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j0                  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:                  jF                        Z$	 	 ddeej"                  jJ                  edef   f   deee&ejN                  f      deee&ef      dej:                  jP                  fdZ)y)    N)AnyCallableOptionalUnionc                 x    t        j                  g |j                  | j                  j                  d   ddiS )Ndevicemeta)torchemptyshapeweightselfinputs     Q/home/dcms/DCMS/lib/python3.12/site-packages/torch/fx/experimental/meta_tracer.pyembedding_overrider      s1    ;;JJT[[%6%6r%:J6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   c                     |rJ d       | S )Nz<dont support inplace functional.relu for metatensor analysisr   )r   inplaces     r   functional_relu_overrider!      s    VVV;Hr   c                 r    | j                  d      |j                  d      z   |j                  d      z   S )Nr
   r	   )to)	conditionr   ys      r   torch_where_overrider'       s5     <<v<&V)<<qtt6t?RRRr   )outc                    |J d       | S )Nz1Dont support in-place abs for MetaTensor analysisr   )r   r(   s     r   torch_abs_overrider*   &   s    ;KKK;Lr   manual_meta_overridesc                 F     t        j                          fd       }| fS )Nc                     d fd}t         j                  j                  j                  | |       t         j                  j                  j                  ||       j                  j                  d| |      S  | i |S )Nc                 T    t        | t        j                  j                        r| y y r   )
isinstancer   fxProxy)vproxys    r   check_has_proxyzAgen_constructor_wrapper.<locals>.wrapper.<locals>.check_has_proxy;   s    !UXX^^, -r   call_function)r   r0   nodemap_aggregatetracercreate_proxy)argskwargsr4   r3   targets      @r   wrapperz(gen_constructor_wrapper.<locals>.wrapper7   sp    	
 	##D/:##FO<<<,,_fdFSS4*6**r   )	functoolswraps)r<   r=   s   ` r   gen_constructor_wrapperr@   6   s*    __V+ +  F?r   c                   V    e Zd Zd Zd	dZd Zed        Zed        Zed        Z	d Z
y)
	MetaProxyc                     || _         y r   )_tensor_meta)r   tensor_metas     r   install_tensor_metazMetaProxy.install_tensor_metaL   s
    'r   Nc                     t        | d      r+| j                   | j                  j                  |r|g S g  S | j                  j	                  dd|r	| |fi       S | fi       S )NrD   call_methodsize)hasattrrD   rI   r8   r9   )r   dims     r   rI   zMetaProxy.sizeO   ss    4(T->->-J)4$$))CC5@@R@@{{''6#D#;B
 	
<@7B
 	
r   c                     t        | d      r&| j                  | j                  j                         S | j                  j	                  dd| fi       S )NrD   rH   rK   )rJ   rD   rK   r8   r9   r   s    r   rK   zMetaProxy.dimV   sI    4(T->->-J$$((**{{''utgrJJr   c                     t        | d      r"| j                  | j                  j                  S | j                  j	                  dt
        j                  | dfi       S )NrD   r5   r   )rJ   rD   r   r8   r9   builtinsgetattrrM   s    r   r   zMetaProxy.shape[   S    4(T->->-J$$***{{''X--g
 	
r   c                     t        | d      r"| j                  | j                  j                  S | j                  j	                  dt
        j                  | dfi       S )NrD   r5   dtype)rJ   rD   rS   r8   r9   rO   rP   rM   s    r   rS   zMetaProxy.dtypec   rQ   r   c                     t        | d      S )Nr	   )MetaDeviceAttributerM   s    r   r	   zMetaProxy.devicek   s     #422r   c                 F    |dk(  r| j                  |      S t        | |      S )NrD   )__getattribute__MetaAttribute)r   ks     r   __getattr__zMetaProxy.__getattr__q   s*    ((++ T1%%r   r   )__name__
__module____qualname__rF   rI   rK   propertyr   rS   r	   rZ   r   r   r   rB   rB   K   sS    (
K
 
 
 
 
 3 3
&r   rB   c                   .    e Zd ZdefdZed        Zd Zy)rX   attrc                 P    || _         || _        |j                  | _        d | _        y r   )rootr`   r8   _node)r   rb   r`   s      r   __init__zMetaAttribute.__init__z   s"    		kk
r   c                     | j                   G| j                  j                  dt        | j                  | j
                  fi       j                  | _         | j                   S )Nr5   )rc   r8   r9   rP   rb   r`   r6   rM   s    r   r6   zMetaAttribute.node   sN     ::11499dii*@"d J zzr   c                 n    | j                   j                  d| j                  | j                  f|z   |      S )NrH   )r8   r9   r`   rb   )r   r:   r;   s      r   __call__zMetaAttribute.__call__   s1    {{''499tyylT&96
 	
r   N)r[   r\   r]   strrd   r^   r6   rg   r   r   r   rX   rX   y   s'    3   
r   rX   c                       e Zd Zy)rU   N)r[   r\   r]   r   r   r   rU   rU      s    r   rU   c                     t        | t              ryt        | t        j                  j                        rBt        | t
              sJ dt        |               t        | d      sJ d       | j                  S | S )Nr
   zExpected MetaProxy but got rD   z*MetaProxy does not have an associated meta)	r/   rU   r   r0   r1   rB   typerJ   rD   )r2   s    r   proxys_to_metasrl      sh    !()!UXX^^$!Y'P+FtAwi)PP'q.)W+WW)~~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eyec           	         t         |   |||||||      }|dk(  r.|| j                  v r |j                  | j                  |          |S || j                  v r	d|v rd|d<   	 t
        j                  j                  j                  |t              }	t
        j                  j                  j                  |t              }
|dk(  r t        j                  ||      } ||	i |
}n|dk(  rt        |	d   |      } ||	dd  i |
}n|dk(  rqt        | d	      sJ d
| _        	 | j                  j!                  |      }t#        |      }|t        v rt        |   |g|	i |
}n | j$                  |	i |
}d| _        nu|dk(  rnd
| _        	 | j                  }|j'                  d      }|D ]  }t        ||      } t)        |t
        j*                        sJ |j-                  d      }d| _        n|S t)        |t
        j                  j.                        sJ d       |j                  |       |S # d| _        w xY w# d| _        w xY w# t0        $ r)}t3        j4                  d| d| d|        Y d }~|S d }~ww xY w)Nplaceholderr	   r
   r5   rH   r      call_moduleorig_forwardTFget_attr.r#   z!Dont support composite output yetzCould not compute metadata for z target z: )superr9   	meta_argsrF   orig_fnsr   r0   r6   r7   rl   r+   getrP   rJ   _disable_module_getattrrb   get_submodulerk   ry   splitr/   Tensorr$   r1   	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   r9   zMetaTracer.create_proxy   s    W!&$i9I
 = Vt~~%=""4>>&#9:IT]]" 6!#)x *	Y44T?KJ 88==66vOL&377G&
ClC&%jmV<&
12G,G&t^444/3,
9))11&9C#CyH#88#8#B$",$0<$ $54#4#4j#QL#Q38D0#/3,9#yyH"LL-E % ;#*8T#:;%h==='{{&{9H38D0	 b%((..1V3VV1""8, 	+ 49D0 49D0  	YMM;D6&QSTUSVWXX		YsQ   "B;I AH, 1I AH8 $	I .<I ,	H55I 8	II 	I6I11I6c                 D    t        | dd      r|S t        |   |||      S )Nr   F)rP   r|   )r   r`   attr_valparameter_proxy_cacher   s       r   rP   zMetaTracer.getattr   s)    42E:O7?43HIIr   c                 6    || _         t        | 	  ||||      S r   )ry   r|   rx   )r   mforwardr:   r;   r   s        r   rx   zMetaTracer.call_module   s!    #w"1gtV<<r   r   returnc                 
   d}|j                   j                  j                         }| d| }t        | j                  |      r#| d| }|dz  }t        | j                  |      r#| j                  j                  ||       |S )zb
        Helper method which tries to insert a module that was not declared as submodule.
        r   _rw   )r   r[   lowerrJ   rb   
add_module)r   r   idxmod_namepaths        r   _insert_module_as_submodulez&MetaTracer._insert_module_as_submodule   s     ==))//11SE"dii&Zq&D1HC dii& 			T3'r   c                 $   	 t         |   |      S # t        $ rt | j                  rft	        t        |j                                     dk(  rAt	        t        |j                                     dk(  r| j                  |      }|| _	        |cY S  w xY w)Nr   )
r|   path_of_module	NameErrorro   lenlist
parametersbuffersr   prev_module)r   r   r   r   s      r   r   zMetaTracer.path_of_module  s    	7)#.. 		00S^^-./14S[[]+,177<#' 		s    A9BBc                     t        ||       S r   )rB   )r   r6   s     r   r3   zMetaTracer.proxy  s    t$$r   r}   c           
         t        |t              sJ || _        | j                  D ci c]  }|t	        t        t        |             c}| _        t               | _	        | j                  j                         D ]4  \  }\  }}t        t        ||       | j                  j                  |       6 	 t        
| 9  ||      }d|i|_        || j                  j                         D ]  \  }\  }	}t        t        ||        S c c}w # | j                  j                         D ]  \  }\  }	}t        t        ||        w xY w)Nr}   )r/   dictr}   _TORCH_METHODS_TO_PATCHr@   rP   r   patched_torch_methodssetr~   itemssetattraddr|   trace_tracer_extras)r   rb   r}   concrete_argsr<   r   r=   origgraphr   r   s             r   r   zMetaTracer.trace  s1   )T***" 66&
 +GE6,BCC&
" %)%?%?%E%E%G 	$!D/7DE4)MMd#	$	+GM$6E$/#;E #'#=#=#C#C#E +iq$tT*+&
 $(#=#=#C#C#E +iq$tT*+s   !D3D	 	8E)NNNr   )r[   r\   r]   ro   bool__annotations__r   r9   rP   rx   r   nnModulerh   r   r   r3   r   r   r   __classcell__)r   s   @r   rn   rn      s    (,,M GRJ=uxx 3 %((// c %+T#u||*;%< + +r   rn   rb   .r}   r   r   c                 "   t               }|j                  | ||      }t        | t        j                  j
                        r| j                  j                  n| j                  }t        j                  j                  |j                  ||      }|S r   )rn   r   r/   r   r   r   r   r[   r0   GraphModulerb   )rb   r}   r   r8   r   r   gms          r   symbolic_tracer   ,  si    
 \FLLy-8E#-dEHHOO#D$-- 	 
		fkk5$	7BIr   )F)NN)*rO   r>   r   typingr   r   r   r   r   torch.fxr   r   r   r   r!   r'   r*   r   	Embedding	LayerNormrelu
functionalReLUwhereabsr+   r   r   r@   r0   r1   rB   rX   rU   rl   Tracerrn   r   rh   r   r   r   r   r   r   <module>r      s      1 1  K
S &*  
HH*	HH-	JJ#	HH6	HHMM)	KK%	II!3 tHh./ *+& +&\
I 
.	- 	K+ K+` 48.2
#s(!33
4S%,,./0 DcN+ XX	r   