
    9j=                        U 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mc m	Z
 d dlmZ d dlmZ ej                  j                   ZdZdZdZg aeej,                  j.                  j0                     ed	<   d
ej,                  j.                  j0                  ddfdZddZ	 	 ddej,                  j8                  dej,                  j:                  dej<                  dz  dedz  ddf
dZ dej,                  j:                  dee   dz  de!fdZ" G d dej,                  jF                        Z$	 ddej,                  j8                  deej,                  j:                  ge!f   dz  ddfdZ%	 	 	 d dej,                  j8                  de!dee   dz  deej,                  j:                  ge!f   dz  ddf
dZ&	 	 	 d dej,                  j8                  de!dee   dz  deej,                  j:                  ge!f   dz  dej,                  j8                  f
dZ'y)!    N)Callable)Any)maybe_set_is_frozen_param)
OrderedSetMODULE_TYPE_MAIN_MODULE_CONST_MODULE_dont_constant_foldopreturnc                 .    t         j                  |        y N)r
   appendr   s    `/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/_inductor/constant_folding.pyadd_dont_constant_foldr      s    r"    c                  ,    t         j                          y r   )r
   clear r   r   clear_dont_constant_foldr      s    r   gmnodeconstantnamec                 V   | j                   }|r|}nBt        | d      sd| _        | j                  }	 d| }t        | |      sn|dz  }|dz   | _        |j                  |      5  ||j	                  d|di       }n|j	                  d|di       }|j                  |       |j                  j                  |j                         |j                  |       |j                  |_	        d d d        |+| j                  ||       t        | ||       t        |       y y # 1 sw Y   7xY w)N_frozen_param_countr   _frozen_param   get_attrr   placeholder)graphhasattrr   inserting_beforecreate_nodereplace_all_uses_withmetaupdate
erase_noder   register_buffersetattrr   )r   r   r   r   gqualnameinew_input_nodes           r   replace_node_with_constantr0   "   s-    	Ar01%&B"""&qc*H2x(FA	  "#Q	
		D	! 	(]]:xRHN ]]=(BKN"">2""499-	T"ii	( 
8X.Hh'!(+ 	( 	(s   %BDD(lifted_constant_namesc                 H    | j                   dk(  xs | j                  |xs dv S )Nr    r   )r   r   )r   r1   s     r   is_const_sourcer3   L   s'     77j NDII2G2M2$NNr   c                       e Zd Z	 	 	 ddej                  j
                  dedee   dz  de	ej                  j                  gef   dz  ddf
 fdZdefdZd	ej                  j                  def fd
Zd	ej                  j                  j                  defdZdeej                  j                  eej                  j                     f   fdZej(                  d	ej                  j                  def fd       Zdej,                  defdZd	ej                  j                  dej,                  ddfdZdef fdZdeej                  j                  ef   ddfdZ xZS )ConstantFolderNr   skip_constructorsr1   skip_folding_node_fnr   c                     t         |   |       i | _        t        j                         | _        t               | _        || _        | j                         | _
        || _        t               | _        || _        y r   )super__init__node_replacementscollectionsCounterreplaced_usesobjectunknown_valuer6   node_to_last_non_output_useuser_to_last_usesr1   deferred_valuer7   )selfr   r6   r1   r7   	__class__s        r   r:   zConstantFolder.__init__S   sj     	;=7B7J7J7L#X'8 "&!A!A!C%:"$h$8!r   c                      y)NFr   )rD   s    r   _support_dynamic_shapez%ConstantFolder._support_dynamic_shapeg   s    r   r   c                    | j                   t        | 	  |      S | j                  | j                  |      r| j                  S t        j                  |j                  i |j                  }|D ]m  }t        |t        j                  j                        s(|j                  | j                   xs dvsE| j                  |   | j                  usa| j                  c S  | j                  S )Nr   )r1   r9   run_noder7   r@   pytreearg_tree_leavesargskwargs
isinstancetorchfxNoder   envrC   )rD   r   flattened_node_inpsinprE   s       r   _deduce_valuezConstantFolder._deduce_valuek   s    %%-7#D)) $$0T5N5Nt5T%%%$44diiO4;;O& 	*C3.HHT%?%?%E2FHHSM)<)<<)))	* """r   c                    dt         j                  j                  j                  dt        fd} ||      sv|j
                  t         j                  j                  j                  j                  u r`t        |j                        dk(  rH |t        t        |j                                    r$t        |j                  d   | j                         ryt#        t         j                  j$                  dd       d u}|r|j
                  t         j                  j$                  j&                  j                  t         j                  j$                  j(                  j                  t         j                  j$                  j(                  j*                  t         j                  j$                  j,                  j.                  fv ry|j
                  t0        v ryy)	Nr   r   c                    | j                   t        j                  j                  j                  j
                  u xr t        | j                  d   t        j                  j                        xrv d| j                  d   j                  v xrY | j                  d   j                  d   j                  t        j                  k(  xr  | j                  d   t        j                  k(  S )Nr   valr   )targetrO   opsprimsconvert_element_typedefaultrN   rL   rP   rQ   r'   dtypeint8bfloat16)r   s    r   is_woq_int8_patternz5ConstantFolder.is_impure.<locals>.is_woq_int8_pattern}   s    uyyCCKKK 3tyy|UXX]];3TYYq\...3 IIaL%%e,22ejj@3 IIaLENN2r   r   r   Tdequantize_per_channelF)rO   rP   r   rQ   boolrY   rZ   atenpermuter]   lenusersnextiterr3   rL   r1   getattrquantized_decomposedrb   dequantize_per_tensortensorr\   no_fuser
   )rD   r   ra   quant_registereds       r   	is_impurezConstantFolder.is_impure|   sK   	ehhmm&8&8 	T 	  %uyy~~55===

Oq('T$**-=(>?IIaL&&
  EII224LdS 	 II**AAIIII**@@HHII**@@GGII**??GG	0
 !
 ;;--r   c                    t        j                  t              t        t        j
                  j                            t        t        t        | j                  j                  j                                    }t        | j                  j                  j                        D ]  j                  dk(  rdt        j
                  j                  dd ffd}t        j                  t        j
                  j                  |j                   j"                  f       t%        j&                        dk(  s|j&                  v s   j)                          S )NoutputrT   r   c                 Z    | v ry j                  |           j                  |        y r   )addr   )rT   last_non_output_user   	seen_usess    r   add_usez;ConstantFolder.node_to_last_non_output_use.<locals>.add_use   s-    )#c"#D)005r   r   )r<   defaultdictlistr   rO   rP   rQ   rh   ri   reversedmoduler"   nodesrY   rJ   tree_map_only_rL   rM   rf   rg   r   )rD   output_noderw   ru   r   rv   s      @@@r   rA   z*ConstantFolder.node_to_last_non_output_use   s    )55d;uxx}}-/	4):):)@)@ ABCT[[..445 	7D{{h&6UXX]] 6t 6 !!%((--499dkk:RS 4::!#tzz(A#D)006!	7$ #"r   c                 (    |j                   dk(  rjdt        j                  j                  dd f fd}t	        j
                  t        j                  j                  ||j                         t        
 !  |      S  j                  |      \  }}t	        j                  |i |}t         fd|D              r j                  S |j                  dk(  r2|j                   t        j                  j                   u r j                  S |j                  dk(  r|j"                  dk(  r j                  S  j$                  r4t'        | j(                        st        d |D              s j                  S t+        |j                   t        j,                  j.                        r<t        j0                  j2                  |j                   j4                  v r j                  S |j                  dk(  r:t+        |j                   t        j,                  j6                        r j                  S  j9                  |      }t+        |t        j:                  j<                  t        j>                  j@                  jB                  f      r|S | j                  u r j                  S t'        | j(                        sct+        |t        jD                        s| jF                  u r:| jF                  ur|jH                  jJ                  d	k(  r|S  jM                  |      s|S  jO                  |      r j                  S  jQ                  ||       t	        j                  |j                  i |jR                  }|D ]>  }t+        |t        j                  j                        s( jT                  |xx   d
z  cc<   @  jV                  jY                  |g       D ]D  }	 jT                  |	   t[        |	j\                        k(  s) j^                  ja                  |	d        F |S )Nrr   argr   c                 8    j                   j                  | <   y r   )r@   rR   )r   rD   s    r   set_envz(ConstantFolder.run_node.<locals>.set_env   s     $ 2 2r   c              3      K   | ]5  }t        j                        t        |      u xr j                  |k(   7 y wr   )typer@   ).0input_rD   s     r   	<genexpr>z*ConstantFolder.run_node.<locals>.<genexpr>   s@      
 ##$V4U9K9Kv9UU
s   ;>call_function&triton_kernel_wrapper_functional_proxyc              3   P   K   | ]  }t        |t        j                           y wr   )rN   rO   Tensor)r   es     r   r   z*ConstantFolder.run_node.<locals>.<genexpr>   s     N
1ell3Ns   $&r'   r   )1rY   rO   rP   rQ   rJ   r}   rL   r9   rI   fetch_args_kwargs_from_envrK   anyr@   r   rd   _efficientzerotensorr]   r   r6   r3   r1   rN   _ops
OpOverloadTagnondeterministic_seededtagsHigherOrderOperatorrU   _CScriptObject_libraryfake_class_registryFakeScriptObjectr   rC   devicer   insertable_tensor_checkrp   add_node_replacementrM   r>   rB   getrf   rg   r;   pop)rD   r   r   rL   rM   flattened_inputsoutrS   n	to_deleterE   s   `         r   rI   zConstantFolder.run_node   sV   ;;("3UXX]] 3t 3 !!%((--$))D7#D))66t<f!114B6B
  
*
 
 %%% GG&t88@@@%%% GG&		EE%%% ""#D$*D*DEN=MNN%%% t{{EJJ$9$9:		11T[[5E5EE%%%77o%*KK77+
 %%%  &%%22CC
 J$$$$%%%tT%?%?@sELL)SD4G4G-G 4...JJOOv-
// 
~~d#)))%%dC0"("8"8$))"St{{"S( +!!UXX]]3""1%*%	+ "3377bA @	%%i0C	4HH**..y$?@ 
r   rm   c                      y)NTr   )rD   rm   s     r   r   z&ConstantFolder.insertable_tensor_check,  s    r   c                 "    || j                   |<   y r   )r;   )rD   r   rm   s      r   r   z#ConstantFolder.add_node_replacement/  s    '-t$r   c                 J    i }| j                  |       t        | 	  |      S )N)initial_env)insert_placerholder_valuesr9   run)rD   rR   rE   s     r   r   zConstantFolder.run2  s'    (*'',w{s{++r   rR   c                 4   | j                   j                  j                  d      D ]  }| j                  ||<    | j                  y | j                   j                  j
                  D ].  }|j                  | j                  xs dv s | j                  ||<   0 y )Nr!   r   r   )r{   r"   
find_nodesr@   r1   r|   r   rC   )rD   rR   r   s      r   r   z)ConstantFolder.insert_placerholder_values7  s    ""---? 	(A''CF	(%%-""(( 	-Avv$44:;,,A	-r   )FNN)__name__
__module____qualname__rO   rP   GraphModulerc   ry   strr   rQ   r:   rG   r   rU   r   rp   dictrA   typing_extensionsoverriderI   r   r   r   r   r   __classcell__)rE   s   @r   r5   r5   R   s    #(26GK9HH  9  9  $Cy4/	9
 ''<=D9 
9( #%((-- #C #"*ehhmm00 *T *X#T%((--ehhmmAT2T-U #2 hUXX]] hs h  hTell t . . .QU .,S ,
-d588==#3E.F -4 -r   r5   constraint_fnc                    t         j                  j                  j                         5  t	        | d      }|j                          |j                  j                         D ]  \  }}|	 ||      st        | ||        g }| j                  j                  d      D ]X  }t        |j                        dk(  st        | |j                        rt        | |j                         |j!                  |       Z |D ]  }| j                  j#                  |        | j                  j%                          | j                  j'                          | j)                          d d d        y # 1 sw Y   y xY w)NT)r6   r    r   r   )rO   utils_python_dispatch_disable_current_modesr5   r   r;   itemsr0   r"   r   rf   rg   r#   rY   delattrr   r)   eliminate_dead_codelint	recompile)r   r   cfr   r   erased_paramss         r   constant_foldr   A  s/    
	%	%	<	<	> B$7
 2288: 	;ND((t1D&r4:	;
 HH'':'6 	+D4::!#2t{{+B,$$T*		+ " 	&DHH%	& 	$$&

+  s   BE);B%E))E2r6   r7   c                    t         j                  j                  j                         5  t	        | |||      }|j                          | j                  j                  D ]{  }|  ||      rt        |j                  t        <   %t        ||      s||j                  v s||j                  v rt        |j                  t        <   et        |j                  t        <   } 	 d d d        y # 1 sw Y   y xY w)N)r6   r1   r7   )rO   r   r   r   r5   r   r"   r|   
MODULE_TAGr'   META_TAGr3   r;   r>   CONST_MODULE_TAG)r   r6   r1   r7   r   r   s         r   constant_graph_tagr   ]  s     
	%	%	<	<	> 1/"7!5	
 	HHNN 	1D#/4H4N&0		(#&;<2///2+++&6		(#&0		(#	11 1 1s   B4C''C0c                    t        | |||       dt        j                  j                  dt        fd}| j
                  j                  D ],  }|j                  dk(  s|j                  |xs dv s% ||       . t        j                  j                         }i g }| j
                  j                  D ]u  }|j                  t           t        k(  r|j                  |fd      }||<   |j                  D ]/  }	|	j                  t           t        k(  s|j                  |        u w |j!                  t#        |             |j%                          t        j                  j'                  | |      }
|
S )zr
    Construct a GraphModule which corresponds to the part which could be
    constant folded in provided gm.
    r   r   c                     d}| j                   D ]   }|j                  t           t        k(  sd} n |st        | j                  t        <   |S )NFT)rg   r'   r   r   r   )r   used_to_foldus      r   untagz)run_and_get_constant_graph.<locals>.untag  sM     	Avvh#33#	 ",DIIhr   r    r   c                     |    S r   r   )xnode_remappings    r   <lambda>z,run_and_get_constant_graph.<locals>.<lambda>  s    ~a7H r   )r   rO   rP   rQ   rc   r"   r|   r   r   Graphr'   r   r   	node_copyrg   r   rr   tupler   r   )r   r6   r1   r7   r   r   	new_graphoutput_nodesnew_nodeusernew_gmr   s              @r   run_and_get_constant_graphr   z  sD    
46JEHHMM d   77j TYY3H3NB%O$K  I9;NL 
99X*,&&t-HI'tJJ 	Dyy"j0##H-	
 U<()NNXX!!"i0FMr   )r   N)NNr   )TNN)(r<   r   collections.abcr   typingr   rO   torch.utils._pytreer   _pytreerJ   torch._inductor.freezing_utilsr   torch.utils._ordered_setr   rZ   rd   r   r   r   r
   ry   rP   r   Target__annotations__r   r   r   rQ   r   r   r0   rc   r3   Interpreterr5   r   r   r   r   r   r   <module>r      sQ     $   $ $ D / yy~~
 
" 24 T%((--../ 4#uxx}}33 # #
  %)	',',
((--', llT!', *	',
 
',TO
((--O04S	D0@O	Ol-UXX)) l-b =AUXX]]OT12T9 
< #.2CG	111  9t+1 #EHHMM?D#89D@	1
 
1> #.2CG	333  9t+3 #EHHMM?D#89D@	3
 XX3r   