
    a,j+                     b   U d dl Z d dlZd dlZd dlmZ d dl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j        j$        edef         z  dee%ej&        f         dz  dee%ef         dz  dej        j'        fdZ(dS )     N)Callable)Anyc                 X    t          j        g |j        | j        j        d         R ddiS )Ndevicemeta)torchemptyshapeweightselfinputs     a/var/www/html/banglarbhumi/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	   r0   nodemap_aggregatetracercreate_proxy)argskwargsr4   r3   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_wrapperr@   ;   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 )NrD   call_methodsize)hasattrrD   rI   r8   r9   )r   dims     r   rI   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 )NrD   rH   rK   )rJ   rD   rK   r8   r9   r   s    r   rK   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 )NrD   r5   r   )rJ   rD   r   r8   r9   builtinsgetattrrM   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 )NrD   r5   dtype)rJ   rD   rS   r8   r9   rO   rP   rM   s    r   rS   zMetaProxy.dtypeh   rQ   r   c                 "    t          | d          S )Nr   )MetaDeviceAttributerM   s    r   r   zMetaProxy.devicep   s     #4222r   c                 X    |dk    r|                      |          S t          | |          S )NrD   )__getattribute__MetaAttribute)r   ks     r   __getattr__zMetaProxy.__getattr__v   s3    ((+++ T1%%%r   r   )__name__
__module____qualname__rF   rI   rK   propertyr   rS   r   rZ   r   r   r   rB   rB   P   s        ( ( (
 
 
 
K K K
 
 
 X
 
 
 X
 3 3 X3
& & & & &r   rB   c                   6    e Zd ZdefdZed             Zd ZdS )rX   attrc                 H    || _         || _        |j        | _        d | _        d S r   )rootr`   r8   _node)r   rb   r`   s      r   __init__zMetaAttribute.__init__   s$    		k


r   c                     | j         8| 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   sG     :1149di*@"  J zr   c                 X    | j                             d| j        | j        f|z   |          S )NrH   )r8   r9   r`   rb   )r   r:   r;   s      r   __call__zMetaAttribute.__call__   s0    {''49tylT&96
 
 	
r   N)r[   r\   r]   strrd   r^   r6   rg   r   r   r   rX   rX   ~   sY        3       X
 
 
 
 
r   rX   c                       e Zd ZdS )rU   N)r[   r\   r]   r   r   r   rU   rU      s        Dr   rU   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 rD   z*MetaProxy does not have an associated meta)
r/   rU   r	   r0   r1   rB   r   typerJ   rD   )r2   s    r   proxys_to_metasrl      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   r5   rH   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: )superr9   	meta_argsrF   orig_fnsr	   r0   r6   r7   rl   r+   getrP   rJ   r   _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   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)rP   r|   )r   r`   attr_valparameter_proxy_cacher   s       r   rP   zMetaTracer.getattr   s9    42E:: 	JO77??43HIIIr   c                 Z    || _         t                                          ||||          S r   )ry   r|   rx   )r   mforwardr:   r;   r   s        r   rx   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   _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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	NameErrorro   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   )rB   )r   r6   s     r   r3   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   )r@   rP   r	   ).0r<   s     r   
<dictcomp>z$MetaTracer.trace.<locals>.<dictcomp>,  s=     &
 &
 &
 +GE6,B,BCC&
 &
 &
r   r}   )r/   dictr   rk   r}   _TORCH_METHODS_TO_PATCHpatched_torch_methodssetr~   itemssetattrr	   addr|   trace_tracer_extras)
r   rb   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]   ro   bool__annotations__r   r9   rP   rx   r	   nnModulerh   r   r   r3   r   r   r   __classcell__)r   s   @r   rn   rn      s@        (,,,,MMM R R R R R RhJ J J J J= = = = =ux 3    %(/ c      % % %+ +T#u|*;%< + + + + + + + + + +r   rn   rb   .r}   r   r   c                     t                      }|                    | ||          }t          | t          j        j                  r| j        j        n| j        }t          j        	                    |j
        ||          }|S r   )rn   r   r/   r	   r   r   r   r[   r0   GraphModulerb   )rb   r}   r   r8   r   r   gms          r   symbolic_tracer   ?  sk    
 \\FLLy-88E#-dEHO#D#DW$- 	 
		fk5$	7	7BIr   )F)NN))rO   r>   r   collections.abcr   typingr   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         $ $ $ $ $ $        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 15+/ 
(/HS#X.
.C%&- S>D( X	     r   