
    	i+                        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	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<                  jH                        Z%	 	 ddee	j$                  jL                  edef   f   deee'e	jP                  f      deee'ef      de	j<                  jR                  fdZ*y)    N)Callable)AnyOptionalUnionc                 x    t        j                  g |j                  | j                  j                  d   ddiS )Ndevicemeta)torchemptyshapeweightselfinputs     r/var/www/vps2.regionflexible.com/Desarrollo/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t        d      | S )Nz<dont support inplace functional.relu for metatensor analysisAssertionError)r   inplaces     r   functional_relu_overrider#      s    J
 	
 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                     |t        d      | S )Nz1Dont support in-place abs for MetaTensor analysisr    )r   r*   s     r   torch_abs_overrider,   *   s    
PQQ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   r2   nodemap_aggregatetracercreate_proxy)argskwargsr6   r5   targets      @r   wrapperz(gen_constructor_wrapper.<locals>.wrapper<   sp    	
 	##D/:##FO<<<,,_fdFSS4*6**r   )	functoolswraps)r>   r?   s   ` r   gen_constructor_wrapperrB   ;   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_metaQ   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 )NrF   call_methodsize)hasattrrF   rK   r:   r;   )r   dims     r   rK   zMetaProxy.sizeT   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 )NrF   rJ   rM   )rL   rF   rM   r:   r;   r   s    r   rM   zMetaProxy.dim[   sI    4(T->->-J$$((**{{''utgrJJr   c                     t        | d      r"| j                  | j                  j                  S | j                  j	                  dt
        j                  | dfi       S )NrF   r7   r   )rL   rF   r   r:   r;   builtinsgetattrrO   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 )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2r   c                 F    |dk(  r| j                  |      S t        | |      S )NrF   )__getattribute__MetaAttribute)r   ks     r   __getattr__zMetaProxy.__getattr__v   s*    ((++ T1%%r   r   )__name__
__module____qualname__rH   rK   rM   propertyr   rU   r	   r\   r   r   r   rD   rD   P   sS    (
K
 
 
 
 
 3 3
&r   rD   c                   .    e Zd ZdefdZed        Zd Zy)rZ   attrc                 P    || _         || _        |j                  | _        d | _        y r   )rootrb   r:   _node)r   rd   rb   s      r   __init__zMetaAttribute.__init__   s"    		kk
r   c                     | j                   G| j                  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   sN     ::11499dii*@"d J zzr   c                 n    | j                   j                  d| j                  | j                  f|z   |      S )NrJ   )r:   r;   rb   rd   )r   r<   r=   s      r   __call__zMetaAttribute.__call__   s1    {{''499tyylT&96
 	
r   N)r]   r^   r_   strrf   r`   r8   ri   r   r   r   rZ   rZ   ~   s'    3   
r   rZ   c                       e Zd Zy)rW   N)r]   r^   r_   r   r   r   rW   rW      s    r   rW   c                    t        | t              ryt        | t        j                  j                        rJt        | 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      sh    !()!UXX^^$!Y' #>tAwi!HIIq.) !M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eyec           	      8   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(  rzt        | d	      st        d
      d| _        	 | j                   j#                  |      }t%        |      }|t        v rt        |   |g|	i |
}n | j&                  |	i |
}d| _        n|dk(  rd| _        	 | j                   }|j)                  d      }|D ]  }t        ||      } t+        |t
        j,                        st        dt%        |             |j/                  d      }d| _        n|S t+        |t
        j                  j0                        st        d      |j                  |       |S # d| _        w xY w# d| _        w xY w# t2        $ r)}t5        j6                  d| d| d|        Y d }~|S d }~ww xY w)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   s    W!	
 = 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()OPP/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=,/DT(^DT-UVV'{{&{9H38D0	 b%((..1$%HII""8, 	/ 49D0 49D0  	YMM;D6&QSTUSVWXX		YsR   "CI' (AI ;I' A3I 	I' A I' 	II' 	I$$I' '	J0JJc                 D    t        | dd      r|S t        |   |||      S )Nr   F)rR   r~   )r   rb   attr_valparameter_proxy_cacher   s       r   rR   zMetaTracer.getattr   s)    42E:O7?43HIIr   c                 6    || _         t        | 	  ||||      S r   )r{   r~   rz   )r   mforwardr<   r=   r   s        r   rz   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   _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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	NameErrorrq   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   )rD   )r   r8   s     r   r5   zMetaTracer.proxy$  s    t$$r   r   c           
         t        |t              st        dt        |             || _        | j
                  D ci c]  }|t        t        t        |             c}| _	        t               | _        | j                  j                         D ]4  \  }\  }}t        t        ||       | j                  j                  |       6 	 t        
| A  ||      }d|i|_        || j                  j                         D ]  \  }\  }	}t        t        ||        S c c}w # | j                  j                         D ]  \  }\  }	}t        t        ||        w xY w)Nz!Expected dict for meta_args, got r   )r1   dictr!   rm   r   _TORCH_METHODS_TO_PATCHrB   rR   r   patched_torch_methodssetr   itemssetattraddr~   trace_tracer_extras)r   rd   r   concrete_argsr>   r   r?   origgraphr   r   s             r   r   zMetaTracer.trace'  sC   )T* #DT)_DU!VWW" 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D 8E)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 RhJ=uxx 3 %((// c %+T#u||*;%< + +r   rp   rd   .r   r   r   c                 "   t               }|j                  | ||      }t        | t        j                  j
                        r| j                  j                  n| j                  }t        j                  j                  |j                  ||      }|S r   )rp   r   r1   r   r   r   r   r]   r2   GraphModulerd   )rd   r   r   r:   r   r   gms          r   symbolic_tracer   ?  si    
 \FLLy-8E#-dEHHOO#D$-- 	 
		fkk5$	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S &*  
HH*	HH-	JJ#	HH6	HHMM)	KK%	II!3 tHh./ *+& +&\
I 
.	- 		W+ W+x 48.2
#s(!33
4S%,,./0 DcN+ XX	r   