
    sg'                     
   U d dl Z d dlZ d dlZd dlZd dlZd dlmZmZmZm	Z	m
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 j0                  ee j2                  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DictOptionalUnionc                 x    t        j                  g |j                  | j                  j                  d   ddiS )Ndevicemeta)torchemptyshapeweightselfinputs     T/var/www/html/venv/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_proxy8   s    !UXX^^, -r   call_function)r   r1   nodemap_aggregatetracercreate_proxy)argskwargsr5   r4   targets      @r   wrapperz(gen_constructor_wrapper.<locals>.wrapper4   sp    	 	##D/:##FO<<<,,_fdFSS4*6**r   )	functoolswraps)r=   r>   s   ` r   gen_constructor_wrapperrA   3   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_metaF   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 )NrE   call_methodsize)hasattrrE   rJ   r9   r:   )r   dims     r   rJ   zMetaProxy.sizeI   sm    4(T->->-J)4$$))CC5@@R@@{{''vcc{`bccX\W^`bccr   c                     t        | d      r&| j                  | j                  j                         S | j                  j	                  dd| fi       S )NrE   rI   rL   )rK   rE   rL   r9   r:   r   s    r   rL   zMetaProxy.dimN   sI    4(T->->-J$$((**{{''utgrJJr   c                     t        | d      r"| j                  | j                  j                  S | j                  j	                  dt
        j                  | dfi       S )NrE   r6   r   )rK   rE   r   r9   r:   builtinsgetattrrN   s    r   r   zMetaProxy.shapeS   P    4(T->->-J$$***{{''9I9IDRY?\^__r   c                     t        | d      r"| j                  | j                  j                  S | j                  j	                  dt
        j                  | dfi       S )NrE   r6   dtype)rK   rE   rT   r9   r:   rP   rQ   rN   s    r   rT   zMetaProxy.dtypeY   rR   r   c                     t        | d      S )Nr
   )MetaDeviceAttributerN   s    r   r
   zMetaProxy.device_   s     #422r   c                 F    |dk(  r| j                  |      S t        | |      S )NrE   )__getattribute__MetaAttribute)r   ks     r   __getattr__zMetaProxy.__getattr__e   s*    ((++ T1%%r   r   )__name__
__module____qualname__rG   rJ   rL   propertyr   rT   r
   r[   r   r   r   rC   rC   E   sX    (d
K
 ` `
 ` `
 3 3
&r   rC   c                   .    e Zd ZdefdZed        Zd Zy)rY   attrc                 P    || _         || _        |j                  | _        d | _        y r   )rootra   r9   _node)r   rc   ra   s      r   __init__zMetaAttribute.__init__m   s"    		kk
r   c                     | j                   G| j                  j                  dt        | j                  | j
                  fi       j                  | _         | j                   S )Nr6   )rd   r9   r:   rQ   rc   ra   r7   rN   s    r   r7   zMetaAttribute.nodet   sK     ::11/7TYYX\XaXaLbdfgllDJzzr   c                 n    | j                   j                  d| j                  | j                  f|z   |      S )NrI   )r9   r:   ra   rc   )r   r;   r<   s      r   __call__zMetaAttribute.__call__|   s.    {{''tyy499,QUBUW]^^r   N)r\   r]   r^   strre   r_   r7   rh   r   r   r   rY   rY   l   s(    3   _r   rY   c                       e Zd Zy)rV   N)r\   r]   r^   r   r   r   rV   rV      s    r   rV   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 rE   z*MetaProxy does not have an associated meta)	r0   rV   r   r1   r2   rC   typerK   rE   )r3   s    r   proxys_to_metasrm      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   r6   rI   r      call_moduleorig_forwardTFget_attr.r$   z!Dont support composite output yetzCould not compute metadata for z target z: )superr:   	meta_argsrG   orig_fnsr   r1   r7   r8   rm   r,   getrQ   rK   _disable_module_getattrrc   get_submodulerl   rz   splitr0   Tensorr%   r2   	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   s   W!$fdIO_`= Vt~~%=""4>>&#9:IT]]" 6!#)x '	Y44T?KJ 88==66vOL&377G&
ClC&97:a=&9:ab>Z\Z&t^444/3,9))11&9C#CyH#88#8#B3#d#dWc#d#44#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   "B9I AH* /I AH6 "	I ,<I *	H33I 6	H??I 	I4I//I4c                 D    t        | dd      r|S t        |   |||      S )Nr   F)rQ   r}   )r   ra   attr_valparameter_proxy_cacher   s       r   rQ   zMetaTracer.getattr   s)    42E:O7?43HIIr   c                 6    || _         t        | 	  ||||      S r   )rz   r}   ry   )r   mforwardr;   r<   r   s        r   ry   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   _rx   )r   r\   lowerrK   rc   
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                 2   	 t         |   |      S # t        $ r{}| j                  rit	        t        |j                                     dk(  rDt	        t        |j                                     dk(  r| j                  |      }|| _	        |cY d }~S  d }~ww xY w)Nr   )
r}   path_of_module	NameErrorrp   lenlist
parametersbuffersr   prev_module)r   r   r   r   r   s       r   r   zMetaTracer.path_of_module   s    	7)#.. 	//CS^^=M8N4OST4TY\]abebmbmbo]pYquvYv77<#' 	s!    	BA/B
BBBc                     t        ||       S r   )rC   )r   r7   s     r   r4   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~   )r0   dictr~   _TORCH_METHODS_TO_PATCHrA   rQ   r   patched_torch_methodssetr   itemssetattraddr}   trace_tracer_extras)r   rc   r~   concrete_argsr=   r   r>   origgraphr   r   s             r   r   zMetaTracer.trace   s0   )T***" SWRnRn&
HNF+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^   rp   bool__annotations__r   r:   rQ   ry   r   nnModuleri   r   r   r4   r   r   r   __classcell__)r   s   @r   ro   ro      s    )-$-M9vJ=uxx 3 %((// c %+d3+<&= + +r   ro   rc   .r~   r   r   c                 "   t               }|j                  | ||      }t        | t        j                  j
                        r| j                  j                  n| j                  }t        j                  j                  |j                  ||      }|S r   )ro   r   r0   r   r   r   r   r\   r1   GraphModulerc   )rc   r~   r   r9   r   r   gms          r   symbolic_tracer     sd     \FLLy-8E&0uxx&G4>>""T]]D			fkk5$	7BIr   )F)NN)*r   torch.fxr   r?   rP   typingr   r   r   r   r   r   r   r   r   r"   r(   r+   r   	Embedding	LayerNormrelu
functionalReLUwhereabsr,   r   rA   r1   r2   rC   rY   rV   rm   Tracerro   r   ri   r   r   r   r   r   r   <module>r      s        7 7K
S &* 
 
HH*	HH-	JJ#	HH6	HHMM)	KK%	II!4 Xx/0 $%& %&N_I _&	- 	x+ x+x DH=A%#s(1C CD 'S%,,->(?@"*4S>":FKhhFZFZr   