
    sh9                     z   S SK r S SKJrJrJr  S SKrS SKJs  Jr	  S SK
Jr  S SKJr  \R                  R                  rSrSrSr  SS\R&                  R(                  S	\R&                  R*                  S
\\R,                     S\\   SS4
S jjrS	\R&                  R*                  S\\\      S\4S jr " S S\R&                  R8                  5      r SS\R&                  R(                  S\\\R&                  R*                  /\4      SS4S jjr   SS\R&                  R(                  S\S\\\      S\\\R&                  R*                  /\4      SS4
S jjr   SS\R&                  R(                  S\S\\\      S\\\R&                  R*                  /\4      S\R&                  R(                  4
S jjr g)    N)AnyCallableOptional)maybe_set_is_frozen_param)
OrderedSetMODULE_TYPE_MAIN_MODULE_CONST_MODULEgmnodeconstantnamereturnc                 ~   U R                   nU(       a  UnOL[        U S5      (       d  SU l        U R                  n SU 3n[        X5      (       d  OUS-  nM  US-   U l        UR                  U5         Ub  UR	                  SUS0 5      nOUR	                  SUS0 5      nUR                  U5        UR                  R                  UR                  5        UR                  U5        UR                  Ul	        S S S 5        Ub)  U R                  XR5        [        XU5        [        U5        g g ! , (       d  f       N;= f)N_frozen_param_countr   _frozen_param   get_attr 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           t/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/_inductor/constant_folding.pyreplace_node_with_constantr&      s&    	Ar011%&B"""&qc*H2((FA	  "#Q	
		D	!]]:xRHN ]]=(BKN"">2""499-	T"ii 
" 
8.h'!(+  
"	!s   4BD..
D<lifted_constant_namesc                 ^    U R                   S:H  =(       d    U R                  U=(       d    S;   $ )Nr   r   )opr   )r   r'   s     r%   is_const_sourcer*   >   s'     77j NDII2G2M2$NN    c                     ^  \ rS rSr   SS\R
                  R                  S\S\\	\
      S\\\R
                  R                  /\4      SS4
U 4S jjjrS\4S	 jrS
\R
                  R                  S\4U 4S jjrS
\R
                  R"                  R                  S\4S jrS\\R
                  R                  \	\R
                  R                     4   4S jrS
\R
                  R                  S\4U 4S jjrS\R,                  S\4S jrS
\R
                  R                  S\R,                  SS4S jrS\4U 4S jjrS\\R
                  R                  \4   SS4S jrSrU =r$ )ConstantFolderD   Nr   skip_constructorsr'   skip_folding_node_fnr   c                    > [         TU ]  U5        0 U l        [        R                  " 5       U l        [        5       U l        X l        U R                  5       U l
        X0l        [        5       U l        X@l        g N)super__init__node_replacementscollectionsCounterreplaced_usesobjectunknown_valuer/   node_to_last_non_output_useuser_to_last_usesr'   deferred_valuer0   )selfr   r/   r'   r0   	__class__s        r%   r4   ConstantFolder.__init__E   sd     	;=7B7J7J7L#X'8 "&!A!A!C%:"$h$8!r+   c                     g)NFr   )r>   s    r%   _support_dynamic_shape%ConstantFolder._support_dynamic_shapeY   s    r+   r   c                   > U R                   c  [        TU ]	  U5      $ U R                  b"  U R                  U5      (       a  U R                  $ [
        R                  " UR                  0 UR                  D6nU H~  n[        U[        R                  R                  5      (       d  M.  UR                  U R                   =(       d    S;  d  MS  U R                  U   U R                  :w  d  Mr  U R                  s  $    U R                  $ )Nr   )r'   r3   run_noder0   r:   pytreearg_tree_leavesargskwargs
isinstancetorchfxNoder   envr=   )r>   r   flattened_node_inpsinpr?   s       r%   _deduce_valueConstantFolder._deduce_value]   s    %%-7#D)) $$0T5N5Nt5T5T%%%$44diiO4;;O&C3..HHT%?%?%E2FHHSMT%8%88))) ' """r+   c                    S[         R                  R                  R                  S[        4S jnU" U5      (       d~  UR
                  [         R                  R                  R                  R                  :X  ak  [        UR                  5      S:X  aR  U" [        [        UR                  5      5      5      (       a)  [        UR                  S   U R                   5      (       a  g[#        [         R                  R$                  SS 5      S LnU(       a  UR
                  [         R                  R$                  R&                  R                  [         R                  R$                  R(                  R                  [         R                  R$                  R(                  R*                  [         R                  R$                  R,                  R.                  4;   a  gg)	Nr   r   c                    U R                   [        R                  R                  R                  R
                  :H  =(       a    [        U R                  S   [        R                  R                  5      =(       a    SU R                  S   R                  ;   =(       a^    U R                  S   R                  S   R                  [        R                  :H  =(       a     U R                  S   [        R                  :H  $ )Nr   valr   )targetrK   opsprimsconvert_element_typedefaultrJ   rH   rL   rM   r   dtypeint8bfloat16)r   s    r%   is_woq_int8_pattern5ConstantFolder.is_impure.<locals>.is_woq_int8_patterno   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)rK   rL   r   rM   boolrV   rW   atenpermuterZ   lenusersnextiterr*   rH   r'   getattrquantized_decomposedr`   dequantize_per_tensortensorrY   no_fuse)r>   r   r^   quant_registereds       r%   	is_impureConstantFolder.is_impuren   sF   	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                   ^^^ [         R                  " [        5      m[        [        R
                  R                     " 5       m[        [        [        U R                  R                  R                  5      5      5      n[        U R                  R                  R                  5       H  mTR                  S:X  a  M  S[        R
                  R                  SS 4UUU4S jjn[        R                  " [        R
                  R                  UTR                   TR"                  45        [%        TR&                  5      S:X  d  M  UTR&                  ;   d  M  TT   R)                  T5        M     T$ )NoutputrP   r   c                 ^   > U T;   a  g TR                  U 5        TT   R                  U 5        g r2   )addappend)rP   last_non_output_user   	seen_usess    r%   add_use;ConstantFolder.node_to_last_non_output_use.<locals>.add_use   s-    )#c"#D)005r+   r   )r6   defaultdictlistr   rK   rL   rM   rf   rg   reversedmoduler   nodesrV   rF   tree_map_only_rH   rI   rd   re   rt   )r>   output_noderw   ru   r   rv   s      @@@r%   r;   *ConstantFolder.node_to_last_non_output_use   s    )55d;uxx}}-/	4):):)@)@ ABCT[[..445D{{h&6UXX]] 6t 6 6 !!%((--499dkk:RS 4::!#tzz(A#D)006! 6$ #"r+   c                 6  >^  UR                   S:X  al  S[        R                  R                  SS 4U 4S jjn[        R
                  " [        R                  R                  X!R                  5        [        T
T ]!  U5      $ T R                  U5      u  p4[        R                  " U0 UD6n[        U 4S jU 5       5      (       a  T R                  $ UR                  S:X  a4  UR                   [        R                  R                   :X  a  T R                  $ UR                  S:X  a  UR"                  S:X  a  T R                  $ T R$                  (       a>  ['        UT R(                  5      (       d#  [        S U 5       5      (       d  T R                  $ [+        UR                   [        R,                  R.                  5      (       a>  [        R0                  R2                  UR                   R4                  ;   a  T R                  $ UR                  S:X  a?  [+        UR                   [        R,                  R6                  5      (       a  T R                  $ T R9                  U5      nUT R                  :X  a  T R                  $ ['        UT R(                  5      (       Gd  [+        U[        R:                  5      (       d  UT R<                  :X  GaS  UT R<                  :w  a  UR>                  R@                  S	:X  a  U$ T RC                  U5      (       d  U$ T RE                  U5      (       a  T R                  $ T RG                  X5        [        R                  " UR                  0 URH                  D6nU HE  n[+        U[        R                  R                  5      (       d  M.  T RJ                  U==   S
-  ss'   MG     T RL                  RO                  U/ 5       HG  n	T RJ                  U	   [Q        U	RR                  5      :X  d  M+  T RT                  RW                  U	S 5        MI     U$ )Nrq   argr   c                 8   > TR                   TR                  U '   g r2   )r:   rN   )r   r>   s    r%   set_env(ConstantFolder.run_node.<locals>.set_env   s     $ 2 2r+   c              3      >#    U  H<  n[        TR                  5      [        U5      :H  =(       a    TR                  U:H  v   M>     g 7fr2   )typer:   ).0input_r>   s     r%   	<genexpr>*ConstantFolder.run_node.<locals>.<genexpr>   s?      
* ##$V4U9K9Kv9UU*s   AAcall_function&triton_kernel_wrapper_functional_proxyc              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7fr2   )rJ   rK   Tensor)r   es     r%   r   r      s      N=M
1ell33=Ms   ')r   r   ),rV   rK   rL   rM   rF   r~   rH   r3   rE   fetch_args_kwargs_from_envrG   anyr:   r)   rb   _efficientzerotensorrZ   r   r/   r*   r'   rJ   _ops
OpOverloadTagnondeterministic_seededtagsHigherOrderOperatorrQ   r   r=   devicer   insertable_tensor_checkrn   add_node_replacementrI   r8   r<   getrd   re   r5   pop)r>   r   r   rH   rI   flattened_inputsoutrO   n	to_deleter?   s   `         r%   rE   ConstantFolder.run_node   s(   ;;("3UXX]] 3t 3 !!%((--))D7#D))66t<!114B6B
  
*
 
 
 %%% GG&t88@@@%%% GG&		EE%%% ""#D$*D*DEEN=MNNN%%% t{{EJJ$9$9::		11T[[5E5EE%%%77o%*KK77+
 +
 %%%  &$$$$%%%tT%?%?@@sELL))SD4G4G-Gd)))cjjoo.G
//44
~~d##)))%%d0"("8"8$))"St{{"S(!!UXX]]33""1%*%	 ) "3377bA	%%i0C	4HH**..y$? B 
r+   rk   c                     g)NTr   )r>   rk   s     r%   r   &ConstantFolder.insertable_tensor_check  s    r+   c                      X R                   U'   g r2   )r5   )r>   r   rk   s      r%   r   #ConstantFolder.add_node_replacement  s    '-t$r+   c                 D   > 0 nU R                  U5        [        TU ]	  US9$ )N)initial_env)insert_placerholder_valuesr3   run)r>   rN   r?   s     r%   r   ConstantFolder.run  s'    (*'',w{s{++r+   rN   c                 D   U R                   R                  R                  SS9 H  nU R                  X'   M     U R                  c  g U R                   R                  R
                   H6  nUR                  U R                  =(       d    S;   d  M(  U R                  X'   M8     g )Nr   r)   r   )r|   r   
find_nodesr:   r'   r}   r   r=   )r>   rN   r   s      r%   r   )ConstantFolder.insert_placerholder_values  s    ""---?A''CF @%%-""((Avv$44:;,, )r+   )r=   r'   r5   r8   r/   r0   r:   r<   )FNN)__name__
__module____qualname____firstlineno__rK   rL   GraphModulera   r   rz   strr   rM   r4   rB   r   rQ   r   rn   dictr;   rE   r   r   r   r   r   __static_attributes____classcell__)r?   s   @r%   r-   r-   D   s{    #(59JN9HH  9  9  (S	2	9
 'x0E'FG9 
9 9( #%((-- #C #"'ehhmm00 'T 'R#T%((--ehhmmAT2T-U #2YUXX]] Ys Yvell t . . .QU .,S ,
-d588==#3E.F -4 - -r+   r-   constraint_fnc                    [         R                  R                  R                  5          [	        U SS9nUR                  5         UR                  R                  5        H#  u  p4Ub  U" U5      (       d  M  [        XU5        M%     / nU R                  R                  SS9 H^  n[        UR                  5      S:X  d  M  [        XR                  5      (       a  [        XR                  5        UR!                  U5        M`     U H  nU R                  R#                  U5        M      U R                  R%                  5         U R                  R'                  5         U R)                  5         S S S 5        g ! , (       d  f       g = f)NT)r/   r   r   r   )rK   utils_python_dispatch_disable_current_modesr-   r   r5   itemsr&   r   r   rd   re   r   rV   delattrrt   r   eliminate_dead_codelint	recompile)r   r   cfr   r   erased_paramss         r%   constant_foldr      s    
	%	%	<	<	>B$7
 2288:ND(t1D1D&r: ;
 HH'':'6D4::!#2{{++B,$$T*	 7 "DHH% " 	$$&

+ 
?	>	>s   BE3>B,E33
Fr/   r0   c                    [         R                  R                  R                  5          [	        U UUUS9nUR                  5         U R                  R                   H  nUb&  U" U5      (       a  [        UR                  [        '   M,  [        XR5      (       d  XTR                  ;   d  XTR                  ;   a  [        UR                  [        '   Ms  [        UR                  [        '   M     S S S 5        g ! , (       d  f       g = f)N)r/   r'   r0   )rK   r   r   r   r-   r   r   r}   
MODULE_TAGr   META_TAGr*   r5   r8   CONST_MODULE_TAG)r   r/   r'   r0   r   r   s         r%   constant_graph_tagr   <  s     
	%	%	<	<	>/"7!5	
 	HHNND#/4H4N4N&0		(#<<///+++&6		(#&0		(# # 
?	>	>s   CC33
Dc                   ^ [        XX#5        S[        R                  R                  S[        4S jnU R
                  R                   H6  nUR                  S:X  d  UR                  U=(       d    S;   d  M.  U" U5        M8     [        R                  R                  5       n0 m/ nU R
                  R                   H}  nUR                  [           [        :X  a  M   UR                  UU4S j5      nUTU'   UR                   H2  n	U	R                  [           [        :X  d  M   UR                  U5          M{     M     UR!                  [#        U5      5        UR%                  5         [        R                  R'                  X5      n
U
$ )zf
Construct a GraphModule which corresponds to the part which could be
constant folded in provided gm.
r   r   c                     SnU R                    H"  nUR                  [           [        :X  d  M   Sn  O   U(       d  [        U R                  [        '   U$ )NFT)re   r   r   r   r   )r   used_to_foldus      r%   untag)run_and_get_constant_graph.<locals>.untagh  sH    Avvh#33#  ",DIIhr+   rh   r   c                    > TU    $ r2   r   )xnode_remappings    r%   <lambda>,run_and_get_constant_graph.<locals>.<lambda>  s
    ~a7Hr+   )r   rK   rL   rM   ra   r   r}   r)   r   Graphr   r   r   	node_copyre   rt   rq   tupler   r   )r   r/   r'   r0   r   r   	new_graphoutput_nodesnew_nodeusernew_gmr   s              @r%   run_and_get_constant_graphr   Y  s-    
4EHHMM d  77iDII2G2M2$N$K   I9;NL99X*,&&t-HI'tJJDyy"j0##H-   U<()NNXX!!"0FMr+   )NNr2   )TNN)!r6   typingr   r   r   rK   torch.utils._pytreer   _pytreerF   torch._inductor.freezing_utilsr   torch.utils._ordered_setr   rW   rb   r   r   r   rL   r   rM   r   r   r&   rz   ra   r*   Interpreterr-   r   r   r   r   r+   r%   <module>r      s    * *  $ $ D / yy~~
 
"  (,	',',
((--', u||$', 3-	',
 
',TO
((--O08c0CO	OY-UXX)) Y-| @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+   