
    ɯwg&0                     p   d dl Z d dlmZmZmZmZmZmZ d dlZd dl	m
c mZ ej                  j                  ZdZdZdZ	 ddej$                  j&                  dej$                  j(                  dej*                  d	ee   d
df
dZdej$                  j(                  deeeef      d
efdZ G d dej$                  j4                        Z	 ddej$                  j&                  deeej$                  j(                  gef      d
dfdZdej$                  j&                  deeeef      deeej$                  j(                  gef      d
dfdZdej$                  j&                  deeeef      deeej$                  j(                  gef      d
eej$                  j&                  eej*                  df   f   fdZy)    N)AnyCallableDictListOptionalTupleMODULE_TYPE_MAIN_MODULE_CONST_MODULEgmnodeconstantnamereturnc                    | j                   }|r|}nBt        | d      sd| _        | j                  }	 d| }t        | |      sn|dz  }|dz   | _        |j                  |      5  |j	                  d|di       }|j                  |       |j                  j                  |j                         |j                  |       d d d        | j                  ||       t        | ||       y # 1 sw Y   )xY w)N_frozen_param_countr   _frozen_param   get_attr )graphhasattrr   inserting_beforecreate_nodereplace_all_uses_withmetaupdate
erase_noderegister_buffersetattr)r   r   r   r   gqualnameinew_input_nodes           e/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/torch/_inductor/constant_folding.pyreplace_node_with_constantr&      s     	Ar01%&B"""&qc*H2x(FA	  "#Q	
		D	! z8RD"">2""499-	T	 x*B(# s   %AC))C2lifted_constantsc                 n    | j                   dk(  xs% | j                   dk(  xr |d uxr | j                  |v S )Nr   placeholder)opr   )r   r'   s     r%   is_const_sourcer+   4   sE     77j  =  	*D(	*II))    c                       e Zd Z	 	 	 ddej                  j
                  dedeee	ej                  f      deeej                  j                  gef      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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_constructorsr'   skip_folding_node_fnr   c                     t         |   |       i | _        t        j                         | _        t               | _        || _        | j                         | _
        || _        y N)super__init__node_replacementscollectionsCounterreplaced_usesobjectunknown_valuer/   node_to_last_non_output_useuser_to_last_usesr'   )selfr   r/   r'   r0   	__class__s        r%   r4   zConstantFolder.__init__?   sX     	;=7B7J7J7L#X'8 "&!A!A!C 0r,   c                      y)NFr   )r=   s    r%   _support_dynamic_shapez%ConstantFolder._support_dynamic_shapeQ   s    r,   r   c                 "    t         |   |      S r2   )r3   run_node)r=   r   r>   s     r%   _deduce_valuezConstantFolder._deduce_valueU   s    w%%r,   c                    |j                   t        j                  j                  j                  j
                  k(  r{t        |j                  d   | j                        rX|j                  d   j                  d   j                  t        j                  k(  r!|j                  d   t        j                  k(  ry|j                   t        j                  j                  j                  j
                  t        j                  j                  j                  j
                  t        j                  j                  j                  j                   fv ryy)Nr   valr   TF)targettorchopsprimsconvert_element_typedefaultr+   argsr'   r   dtypeint8bfloat16quantized_decomposeddequantize_per_channeldequantize_per_tensortensor)r=   r   s     r%   	is_impurezConstantFolder.is_impureX   s    KK599????GGG		!d.C.CD		!!!%(..%**<		!. ;;II**AAIIII**@@HHII**@@GG
 
 r,   c                    t        j                  t              t               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outputinpr   c                 Z    | v ry j                  |           j                  |        y r2   )addappend)rW   last_non_output_user   	seen_usess    r%   add_usez;ConstantFolder.node_to_last_non_output_use.<locals>.add_useu   s-    )#c"#D)005r,   r   )r6   defaultdictlistsetnextiterreversedmoduler   nodesrF   rG   fxNodepytreetree_map_only_rL   kwargslenusersrZ   )r=   output_noder]   r[   r   r\   s      @@@r%   r;   z*ConstantFolder.node_to_last_non_output_usel   s    )55d;E	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(  r3|j                   t        j                  j                   k(  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  j7                  |      }| j                  k(  r j                  S t'        | j(                        sGt+        |t        j8                        r,|j:                  j<                  d	k(  r|S  j?                  |      s|S  jA                  |      r j                  S  jC                  ||       t	        j                  |j                  i |jD                  }|D ]>  }t+        |t        j                  j                        s( jF                  |xx   d
z  cc<   @  jH                  jK                  |g       D ]D  }	 jF                  |	   tM        |	jN                        k(  s) jP                  jS                  |	d        F |S )NrV   argr   c                 8    j                   j                  | <   y r2   )r:   env)ro   r=   s    r%   set_envz(ConstantFolder.run_node.<locals>.set_env   s     $ 2 2r,   c              3      K   | ]6  }t        j                        t        |      k(  xr j                  |k(   8 y wr2   )typer:   ).0input_r=   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r2   )
isinstancerG   Tensor)ru   es     r%   rw   z*ConstantFolder.run_node.<locals>.<genexpr>   s     N
1ell3Ns   $&r   r   )*rF   rG   rf   rg   rh   ri   rL   r3   rB   fetch_args_kwargs_from_envarg_tree_leavesanyr:   r*   aten_efficientzerotensorrK   r   r/   r+   r'   r{   _ops
OpOverloadTagnondeterministic_seededtagsrC   r|   devicert   insertable_tensor_checkrT   add_node_replacementrj   r8   r<   getrk   rl   r5   pop)r=   r   rr   rL   rj   flattened_inputsoutflattened_node_inpsn	to_deleter>   s   `         r%   rB   zConstantFolder.run_node   s   ;;("3UXX]] 3t 3 !!%((--$))D7#D))66t<f!114B6B
  
*
 
 %%% GG&t88@@@%%% GG&		EE%%% ""#D$*?*?@N=MNN%%% t{{EJJ$9$9:		11T[[5E5EE%%%  &$$$$%%%tT%:%:;
A
 zz&(
//4
~~d#)))%%dC0"("8"8$))"St{{"S( +!!UXX]]3""1%*%	+ "3377bA @	%%i0C	4HH**..y$?@ 
r,   rS   c                      y)NTr   )r=   rS   s     r%   r   z&ConstantFolder.insertable_tensor_check   s    r,   c                 "    || j                   |<   y r2   )r5   )r=   r   rS   s      r%   r   z#ConstantFolder.add_node_replacement   s    '-t$r,   c                 J    i }| j                  |       t        | 	  |      S )N)initial_env)insert_placerholder_valuesr3   run)r=   rq   r>   s     r%   r   zConstantFolder.run   s'    (*'',w{s{++r,   rq   c                     | j                   j                  j                  d      D ]R  }| j                  5|j                  | j                  v r| j                  |j                     ||<   D| j
                  ||<   T y )Nr)   r*   )rd   r   
find_nodesr'   r   r:   )r=   rq   r   s      r%   r   z)ConstantFolder.insert_placerholder_values   sm    ""---? 	,A$$0QVVt?T?T5T..qvv6A++A		,r,   )FNN)__name__
__module____qualname__rG   rf   GraphModuleboolr   r   strr|   r   rg   r4   r@   r   rC   r   rT   r   r;   rB   r   r   r   r   __classcell__)r>   s   @r%   r.   r.   >   sz    #(>BJN1HH  1  1 #4U\\(9#:;	1
 'x0E'FG1 
1$ &%((-- &C &ehhmm00 T (#T%((--ehhmmAT2T-U #2TUXX]] Ts Tlell t . . .QU .,S ,
,d588==#3E.F ,4 ,r,   r.   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)r/   r   r   r   )rG   utils_python_dispatch_disable_current_modesr.   r   r5   itemsr&   r   r   rk   rl   r   rF   delattrrZ   r   eliminate_dead_codelint	recompile)r   r   cfr   r   erased_paramss         r%   constant_foldr      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r0   c                    t         j                  j                  j                         5  t	        | d|      }|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)NT)r/   r'   )rG   r   r   r   r.   r   r   re   
MODULE_TAGr   META_TAGr+   r5   r8   CONST_MODULE_TAG)r   r'   r0   r   r   s        r%   constant_graph_tagr   
  s    
 
	%	%	<	<	> 1$9I
 	HHNN 	1D#/4H4N&0		(#&672///2+++&6		(#&0		(#	11 1 1s   B3C&&C/.c                    t        | ||       dt        j                  j                  dt        fd}g }|nt        | j                  j                  d            }|D ]D  }|j                  t           t        k(  r ||      s'|j                  ||j                            F | j                  j                  d      D ]
  } ||        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)                  | |      } || }||f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)rl   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   r   c                     |    S r2   r   )xnode_remappings    r%   <lambda>z,run_and_get_constant_graph.<locals>.<lambda>O  s    ~a7H r,   )r   rG   rf   rg   r   r_   r   r   r   r   r   rZ   r   Graphre   	node_copyrl   rV   tupler   r   )r   r'   r0   r   
const_argsplaceholdersr   	new_graphoutput_nodesnew_nodeusernew_gmconst_resultr   s                @r%   run_and_get_constant_graphr   #  s    r+-ABEHHMM d  J#BHH//=/AB  	?Dyy"j0T{!!"2499"=>		? ##z#2 d  I9;NL 
99X*,&&t-HI'tJJ 	Dyy"j0##H-	
 U<()NNXX!!"i0F:&L<r,   r2   )r6   typingr   r   r   r   r   r   rG   torch.utils._pytreer   _pytreerh   rH   r   r   r   r   rf   r   rg   r|   r   r&   r   r+   Interpreterr.   r   r   r   r   r,   r%   <module>r      s    = =  $ $ yy~~
 
"  	$$
((--$ ll$ 3-	$
 
$D
((--+3DcN+C	m,UXX)) m,d @DHehhmm_d%:;< 
811tCH~.1 #8UXX]]OT,A#BC1 
	129 9 tCH~.9  #8UXX]]OT,A#BC9  588u||S'8!99:	9 r,   