
    9j+                        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j8                  j:                        Z G d de      Z G d de      Z d Z! G d dej8                  jD                        Z#	 	 ddej                   jH                  edef   z  dee%ejL                  f   dz  dee%ef   dz  dej8                  jN                  fdZ(y)    N)Callable)Anyc                 x    t        j                  g |j                  | j                  j                  d   ddiS )Ndevicemeta)torchemptyshapeweightselfinputs     a/media/conek/DATA/Code/OCR/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	   r0   nodemap_aggregatetracercreate_proxy)argskwargsr4   r3   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_wrapperr@   ;   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 )NrD   call_methodsize)hasattrrD   rI   r8   r9   )r   dims     r   rI   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 )NrD   rH   rK   )rJ   rD   rK   r8   r9   r   s    r   rK   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 )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.dtypeh   rQ   r   c                     t        | d      S )Nr   )MetaDeviceAttributerM   s    r   r   zMetaProxy.devicep   s     #422r   c                 F    |dk(  r| j                  |      S t        | |      S )NrD   )__getattribute__MetaAttribute)r   ks     r   __getattr__zMetaProxy.__getattr__v   s*    ((++ T1%%r   r   )__name__
__module____qualname__rF   rI   rK   propertyr   rS   r   rZ   r   r   r   rB   rB   P   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__   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   ~   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                        rJt        | 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      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   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   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)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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}   )r/   dictr   rk   r}   _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'  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]   ro   bool__annotations__r   r9   rP   rx   r	   nnModulerh   r   r   r3   r   r   r   __classcell__)r   s   @r   rn   rn      s    (,,M Rh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   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S &*  
HH*	HH-	JJ#	HH6	HHMM)	KK%	II!3 tHh./ *+& +&\
I 
.	- 		W+ W+x 15+/
((//HS#X.
.C%&- S>D( XX	r   