
    קg'                     |   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 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)AnyCallableDictOptionalUnionc                 X    t          j        g |j        | j        j        d         R ddiS )Ndevicemeta)torchemptyshapeweightselfinputs     ]/var/www/html/ai-engine/env/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
J d            | S )Nz<dont support inplace functional.relu for metatensor analysisr   )r   inplaces     r   functional_relu_overrider"      s    VVVVVV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                    |
J d            | S )Nz1Dont support in-place abs for MetaTensor analysisr   )r   r)   s     r   torch_abs_overrider+   %   s    ;;K;;;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_proxy8   s,    !UX^,,  r   call_function)r   r1   nodemap_aggregatetracercreate_proxy)argskwargsr5   r4   targets      @r   wrapperz(gen_constructor_wrapper.<locals>.wrapper4   s    	 	 	 	 	 	##D/:::##FO<<<<,,_fdFSSS64*6***r   )	functoolswraps)r=   r>   s   ` r   gen_constructor_wrapperrA   3   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_metaF   s    'r   Nc                     t          | d          r| j         | j        j        |r|gng  S | j                            dd|r| |fn| fi           S )NrE   call_methodsize)hasattrrE   rJ   r9   r:   )r   dims     r   rJ   zMetaProxy.sizeI   si    4(( 	AT->-J)4$)C+?C55R@@{''vc?^c{{X\W^`bcccr   c                     t          | d          r | j        | j                                        S | j                            dd| fi           S )NrE   rI   rL   )rK   rE   rL   r9   r:   r   s    r   rL   zMetaProxy.dimN   sO    4(( 	+T->-J$((***{''utgrJJJr   c                     t          | d          r| j        | j        j        S | j                            dt
          j        | dfi           S )NrE   r6   r   )rK   rE   r   r9   r:   builtinsgetattrrN   s    r   r   zMetaProxy.shapeS   M    4(( 	+T->-J$**{''9IDRY?\^___r   c                     t          | d          r| j        | j        j        S | 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22r   c                 X    |dk    r|                      |          S t          | |          S )NrE   )__getattribute__MetaAttribute)r   ks     r   __getattr__zMetaProxy.__getattr__e   s3    ((+++ T1%%%r   r   )__name__
__module____qualname__rG   rJ   rL   propertyr   rT   r
   r[   r   r   r   rC   rC   E   s        ( ( (d d d d
K K K
 ` ` X`
 ` ` X`
 3 3 X3
& & & & &r   rC   c                   6    e Zd ZdefdZed             Zd ZdS )rY   attrc                 H    || _         || _        |j        | _        d | _        d S r   )rootra   r9   _node)r   rc   ra   s      r   __init__zMetaAttribute.__init__m   s$    		k


r   c                     | j         8| 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   s@     :11/7TYX\XaLbdfgglDJzr   c                 X    | j                             d| j        | j        f|z   |          S )NrI   )r9   r:   ra   rc   )r   r;   r<   s      r   __call__zMetaAttribute.__call__|   s+    {''ty49,QUBUW]^^^r   N)r\   r]   r^   strre   r_   r7   rh   r   r   r   rY   rY   l   s^        3       X_ _ _ _ _r   rY   c                       e Zd ZdS )rV   N)r\   r]   r^   r   r   r   rV   rV      s        Dr   rV   c                    t          | t                    rdS t          | t          j        j                  rPt          | 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      s    !()) v!UX^$$ !Y''PP)PtAww)P)PPPPq.))WW+W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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 |
}n=|dk    r& t          |	d         |          |	dd          i |
}n|dk    rt          | d	          sJ d
| _        	 | j                            |          }t#          |          }|t          v rt          |         |g|	R i |
}n | j        |	i |
}d| _        n# d| _        w xY w|dk    rd
| _        	 | j        }|                    d          }|D ]}t          ||          }t)          |t
          j                  sJ |                    d          }d| _        n# d| _        w xY w|S t)          |t
          j        j                  s
J d            |                    |           n4# t0          $ r'}t3          j        d| d| d|            Y d }~nd }~ww xY w|S )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   WW!!$fdIO_``=  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&&97:a=&99:abb>Z\ZZ&&t^44444/3,9)11&99C#CyyH#888#8#B3#d#d#d#dWc#d#d#44#4j#QL#Q#Q38D005D08888##/3,9#yH"LL--E % ; ;#*8T#:#:%h====='{{&{99H38D005D08888	 b%(.11VV3VVVV""8,,,, 	Y 	Y 	YMWDWW&WWTUWWXXXXXXXX	Y 	sQ   -C
I( 8AF I( 	FI( 0A#H I( 	H$$I( )>I( (
J2JJc                 p    t          | dd          r|S t                                           |||          S )Nr   F)rQ   r}   )r   ra   attr_valparameter_proxy_cacher   s       r   rQ   zMetaTracer.getattr   s9    42E:: 	JO77??43HIIIr   c                 Z    || _         t                                          ||||          S r   )rz   r}   ry   )r   mforwardr;   r<   r   s        r   ry   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   _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1""S""di&& 	&&&&D1HC di&& 	 		T3'''r   c                    	 t                                          |          S # t          $ r}| j        rt	          t          |                                                    dk    rUt	          t          |                                                    dk    r#|                     |          }|| _	        |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    	77))#... 	 	 	/ CS^^=M=M8N8N4O4OST4T4TY\]abebmbmbobo]p]pYqYquvYvYv77<<#' 	s!    $ 
CBB=6C<B==Cc                 "    t          ||           S r   )rC   )r   r7   s     r   r4   zMetaTracer.proxy   s    t$$$r   r~   c                 |   t          |t                    sJ || _        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)Nc           	      T    i | ]%}|t          t          t          |                    &S r   )rA   rQ   r   ).0r=   s     r   
<dictcomp>z$MetaTracer.trace.<locals>.<dictcomp>   s:     &
 &
 &
HNF+GE6,B,BCC&
 &
 &
r   r~   )r0   dictr~   _TORCH_METHODS_TO_PATCHpatched_torch_methodssetr   itemssetattrr   addr}   trace_tracer_extras)
r   rc   r~   concrete_argsr   r>   origgraphr   r   s
            r   r   zMetaTracer.trace   sR   )T*****"&
 &
RVRn&
 &
 &
" %)%?%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   ,D :D;)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MM9 9 9 9 9 9vJ J J J J= = = = =ux 3    %(/ c      % % %+ +d3+<&= + + + + + + + + + +r   ro   rc   .r~   r   r   c                     t                      }|                    | ||          }t          | t          j        j                  r| j        j        n| j        }t          j        	                    |j
        ||          }|S r   )ro   r   r0   r   r   r   r   r\   r1   GraphModulerc   )rc   r~   r   r9   r   r   gms          r   symbolic_tracer     sf     \\FLLy-88E&0ux&G&GZ4>""T]D			fk5$	7	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 7 7 7 7 7 7 7 7 7 7 7 7K K K         
S S S &*     
 
H*	H-	J#	H6	HM)	K%	I!4 Xx/0     $%& %& %& %& %& %& %& %&N_ _ _ _ _I _ _ _&	 	 	 	 	- 	 	 	  x+ x+ x+ x+ x+ x+ x+ x+x DH=A %#s(1C CD 'S%,->(?@"*4S>":FKhFZ     r   