
    rhp;                        U d dl Z d dlmZmZ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,                  j.                     ed<   d	ej*                  j,                  j.                  d
dfdZddZ	 	 ddej*                  j6                  dej*                  j8                  deej:                     dee   d
df
dZdej*                  j8                  deee      d
e fdZ! G d dej*                  jD                        Z#	 ddej*                  j6                  deeej*                  j8                  ge f      d
dfdZ$	 	 	 ddej*                  j6                  de deee      deeej*                  j8                  ge f      d
df
dZ%	 	 	 ddej*                  j6                  de deee      deeej*                  j8                  ge f      d
ej*                  j6                  f
dZ&y)     N)AnyCallableOptional)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    s/var/www/html/ai-insurance-compliance-backend/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_constantr1       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   r2   s     r   is_const_sourcer4   J   s'     77j NDII2G2M2$NNr   c                       e Zd Z	 	 	 ddej                  j
                  dedeee	      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_constructorsr2   skip_folding_node_fnr   c                     t         |   |       i | _        t        j                         | _        t               | _        || _        | j                         | _
        || _        t               | _        || _        y r   )super__init__node_replacementscollectionsCounterreplaced_usesobjectunknown_valuer7   node_to_last_non_output_useuser_to_last_usesr2   deferred_valuer8   )selfr   r7   r2   r8   	__class__s        r   r;   zConstantFolder.__init__Q   sj     	;=7B7J7J7L#X'8 "&!A!A!C%:"$h$8!r   c                      y)NFr   )rE   s    r   _support_dynamic_shapez%ConstantFolder._support_dynamic_shapee   s    r   r   c                    | j                   t        | 	  |      S | j                  | j                  |      r| j                  S t        j                  |j                  i |j                  }|D ]n  }t        |t        j                  j                        s(|j                  | j                   xs dvsE| j                  |   | j                  k7  sb| j                  c S  | j                  S )Nr   )r2   r:   run_noder8   rA   pytreearg_tree_leavesargskwargs
isinstancetorchfxNoder   envrD   )rE   r   flattened_node_inpsinprF   s       r   _deduce_valuezConstantFolder._deduce_valuei   s    %%-7#D)) $$0T5N5Nt5T%%%$44diiO4;;O& 	*C3.HHT%?%?%E2FHHSMT%8%88)))	* """r   c                    dt         j                  j                  j                  dt        fd} ||      sw|j
                  t         j                  j                  j                  j                  k(  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
                  k(  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    )targetrP   opsprimsconvert_element_typedefaultrO   rM   rQ   rR   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)rP   rQ   r   rR   boolrZ   r[   atenpermuter^   lenusersnextiterr4   rM   r2   getattrquantized_decomposedrc   dequantize_per_tensortensorr]   no_fuser   )rE   r   rb   quant_registereds       r   	is_impurezConstantFolder.is_impurez   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outputrU   r   c                 Z    | v ry j                  |           j                  |        y r   )addr   )rU   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   rP   rQ   rR   ri   rj   reversedmoduler#   nodesrZ   rK   tree_map_only_rM   rN   rg   rh   r   )rE   output_noderx   rv   r   rw   s      @@@r   rB   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(  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 |j                  dk(  r:t+        |j                   t        j,                  j6                        r j                  S  j9                  |      }t+        |t        j:                  j<                        r|S | j                  k(  r j                  S t'        | j(                        set+        |t        j>                        s| j@                  k(  r;| j@                  k7  r|jB                  jD                  d	k(  r|S  jG                  |      s|S  jI                  |      r j                  S  jK                  ||       t	        j                  |j                  i |jL                  }|D ]>  }t+        |t        j                  j                        s( jN                  |xx   d
z  cc<   @  jP                  jS                  |g       D ]D  }	 jN                  |	   tU        |	jV                        k(  s) jX                  j[                  |	d        F |S )Nrs   argr   c                 8    j                   j                  | <   y r   )rA   rS   )r   rE   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r   )typerA   ).0input_rE   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   )rO   rP   Tensor)r   es     r   r   z*ConstantFolder.run_node.<locals>.<genexpr>   s     N
1ell3Ns   $&r(   r    ).rZ   rP   rQ   rR   rK   r~   rM   r:   rJ   fetch_args_kwargs_from_envrL   anyrA   r   re   _efficientzerotensorr^   r   r7   r4   r2   rO   _ops
OpOverloadTagnondeterministic_seededtagsHigherOrderOperatorrV   _CScriptObjectr   rD   devicer   insertable_tensor_checkrq   add_node_replacementrN   r?   rC   getrg   rh   r<   pop)rE   r   r   rM   rN   flattened_inputsoutrT   n	to_deleterF   s   `         r   rJ   zConstantFolder.run_node   s0   ;;("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+
 %%%  &c588001J$$$$%%%tT%?%?@sELL)SD4G4G-Gd)))cjjoo.G
//4
~~d#)))%%dC0"("8"8$))"St{{"S( +!!UXX]]3""1%*%	+ "3377bA @	%%i0C	4HH**..y$?@ 
r   rn   c                      y)NTr   )rE   rn   s     r   r   z&ConstantFolder.insertable_tensor_check  s    r   c                 "    || j                   |<   y r   )r<   )rE   r   rn   s      r   r   z#ConstantFolder.add_node_replacement!  s    '-t$r   c                 J    i }| j                  |       t        | 	  |      S )N)initial_env)insert_placerholder_valuesr:   run)rE   rS   rF   s     r   r   zConstantFolder.run$  s'    (*'',w{s{++r   rS   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_nodesrA   r2   r}   r   rD   )rE   rS   r   s      r   r   z)ConstantFolder.insert_placerholder_values)  s    ""---? 	(A''CF	(%%-""(( 	-Avv$44:;,,A	-r   )FNN)__name__
__module____qualname__rP   rQ   GraphModulerd   r   rz   strr   rR   r;   rH   r   rV   r   rq   dictrB   rJ   r   r   r   r   r   __classcell__)rF   s   @r   r6   r6   P   sq    #(59JN9HH  9  9  (S	2	9
 'x0E'FG9 
9( #%((-- #C #"*ehhmm00 *T *X#T%((--ehhmmAT2T-U #2]UXX]] ]s ]~ell t . . .QU .,S ,
-d588==#3E.F -4 -r   r6   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)r7   r!   r   r   )rP   utils_python_dispatch_disable_current_modesr6   r   r<   itemsr1   r#   r   rg   rh   r$   rZ   delattrr   r*   eliminate_dead_codelint	recompile)r   r   cfr   r   erased_paramss         r   constant_foldr   3  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r7   r8   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)r7   r2   r8   )rP   r   r   r   r6   r   r#   r}   
MODULE_TAGr(   META_TAGr4   r<   r?   CONST_MODULE_TAG)r   r7   r2   r8   r   r   s         r   constant_graph_tagr   O  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)rh   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   rP   rQ   rR   rd   r#   r}   r   r   Graphr(   r   r   	node_copyrh   r   rs   tupler   r   )r   r7   r2   r8   r   r   	new_graphoutput_nodesnew_nodeusernew_gmr   s              @r   run_and_get_constant_graphr   l  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=   typingr   r   r   rP   torch.utils._pytreer   _pytreerK   torch._inductor.freezing_utilsr   torch.utils._ordered_setr   r[   re   r   r   r   r   rz   rQ   r   Target__annotations__r   r   r   rR   r   r   r1   rd   r4   Interpreterr6   r   r   r   r   r   r   <module>r      sO    * *  $ $ D / yy~~
 
" 24 T%((--../ 4#uxx}}33 # #
  (,	',',
((--', u||$', 3-	',
 
',TO
((--O08c0CO	O`-UXX)) `-J @DHehhmm_d%:;< 
< #15FJ	111 $DI.1 #8UXX]]OT,A#BC	1
 
1> #15FJ	333 $DI.3 #8UXX]]OT,A#BC	3
 XX3r   