
    Ph                     D   d dl Z d dl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 G d dej                  j                        Zej                  j"                  j%                         ddeeej                  j&                  gef      fd       Zy)	    N)AnyCallableDictOptionalc                    | j                   }t        | 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)gmnodeconstantgiqualnamenew_input_nodes          kC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_inductor/constant_folding.pyreplace_node_with_constantr   
   s    
A2,-!"
A
"1#&r8$	Q	  UB	
		D	!z8RD"">2""499-	T	 
" x*B(# 
"	!s    AC$$C-c                        e Zd Z	 d fd	Zdej
                  j                  j                  fdZd Z	 fdZ
dej                  defdZdej
                  j                  dej                  dd	fd
Z fdZ xZS )ConstantFolderc                     t         |   |       i | _        t        j                         | _        t               | _        || _        | j                         | _
        y N)super__init__node_replacementscollectionsCounterreplaced_usesobjectunknown_valueskip_constructorsnode_to_last_non_output_useuser_to_last_uses)selfr   r,   	__class__s      r   r%   zConstantFolder.__init__&   sP    
 	;=7B7J7J7L#X'8 "&!A!A!C    r   c                 0   |j                   t        j                  j                  j                  j
                  t        j                  j                  j                  j
                  t        j                  j                  j                  j                  fv ryy)NTF)targettorchopsquantized_decomposeddequantize_per_channeldefaultdequantize_per_tensortensor)r/   r   s     r   	is_impurezConstantFolder.is_impure5   sf    ;;II**AAIIII**@@HHII**@@GG
 
 r1   c                 T   t        j                  t              t               t	        t        t        | j                  j                  j                                    }t        | j                  j                  j                        D ]  j                  dk(  rfd}t        j                  t        j                  j                  |j                   j"                  f       t%        j&                        dk(  sx|j&                  v s   j)                          S )Noutputc                 Z    | v ry j                  |           j                  |        y r#   )addappend)inplast_non_output_user   	seen_usess    r   add_usez;ConstantFolder.node_to_last_non_output_use.<locals>.add_useJ   s-    )#c"#D)005r1   r
   )r'   defaultdictlistsetnextiterreversedmoduler   nodesr3   pytreetree_map_onlyr4   fxNodeargskwargslenusersr@   )r/   output_noderD   rB   r   rC   s      @@@r   r-   z*ConstantFolder.node_to_last_non_output_useA   s    )55d;E	4):):)@)@ ABCT[[..445D{{h&6   $))T[[9QR 4::!#tzz(A#D)006 6" #"r1   c                     |j                   dk(  rM fd}t        j                  t        j                  j
                  ||j                         t        
 !  |      S  j                  |      \  }}t        j                  |i |} j                  |v r j                  S |j                  dk(  r3|j                   t        j                  j                  k(  r j                  S  j                   r-|j                  dk7  rt#        d |D              s j                  S t%        |j                   t        j&                  j(                        r<t        j*                  j,                  |j                   j.                  v r j                  S t        
 !  |      }|j                  dk7  r,t%        |t        j0                        r j3                  |      s|S  j5                  |      r j                  S  j7                  ||       t        j                  |j                  i |j8                  }|D ]>  }t%        |t        j                  j
                        s( j:                  |xx   dz  cc<   @  j<                  j?                  |g       D ]D  }	 j:                  |	   tA        |	jB                        k(  s) jD                  jG                  |	d        F |S )Nr=   c                 8    j                   j                  | <   y r#   )r+   env)argr/   s    r   set_envz(ConstantFolder.run_node.<locals>.set_env]   s     $ 2 2r1   call_functionr   c              3   P   K   | ]  }t        |t        j                           y wr#   )
isinstancer4   Tensor).0es     r   	<genexpr>z*ConstantFolder.run_node.<locals>.<genexpr>v   s     N=M
1ell3=Ms   $&r
   )$r3   rM   rN   r4   rO   rP   rQ   r$   run_nodefetch_args_kwargs_from_envarg_tree_leavesr+   opaten_efficientzerotensorr8   r,   anyr]   _ops
OpOverloadTagnondeterministic_seededtagsr^   insertable_tensor_checkr;   add_node_replacementrR   r)   r.   getrS   rT   r&   pop)r/   r   rZ   rQ   rR   flattened_inputsoutflattened_node_inpsn	to_deleter0   s   `         r   rb   zConstantFolder.run_nodeY   s>   ;;("3   C7#D))66t<f!114B6B!11%%% GG&t88@@@%%% "":%N=MNN%%% t{{EJJ$9$9:		11T[[5E5EE%%%gt$77j ZU\\%B//4
~~d#)))%%dC0"("8"8$))"St{{"S(!!UXX]]3""1%*%	 ) "3377bA	%%i0C	4HH**..y$? B 
r1   r:   returnc                      y)NTr   )r/   r:   s     r   rn   z&ConstantFolder.insertable_tensor_check   s    r1   Nc                 "    || j                   |<   y r#   )r&   )r/   r   r:   s      r   ro   z#ConstantFolder.add_node_replacement   s    '-t$r1   c                     i }| j                   j                  j                  D ]!  }|j                  dk(  s| j                  ||<   # t
        |   |      S )Nplaceholder)initial_env)rK   r   rL   re   r+   r$   run)r/   rX   ru   r0   s      r   r}   zConstantFolder.run   sP    ""((Att}$++A ) w{s{++r1   )F)__name__
__module____qualname__r%   r4   rO   r   rP   r;   r-   rb   r^   boolrn   ro   r}   __classcell__)r0   s   @r   r!   r!   %   s{      D
ehhmm00 
#0?Bell t . . .QU ., ,r1   r!   constraint_fnc                    t        | d      }|j                          |j                  j                         D ]  \  }}|	 ||      st	        | ||        g }| j
                  j                  D ]h  }|j                  dk(  st        |j                        dk(  s,t        | |j                        rt        | |j                         |j                  |       j |D ]  }| j
                  j                  |        | j
                  j                          | j
                  j!                          | j#                          y )NT)r,   r   r   )r!   r}   r&   itemsr   r   rL   re   rS   rT   r   r3   delattrr@   r   eliminate_dead_codelint	recompile)r   r   cfr   r   erased_paramss         r   constant_foldr      s    	d	3BFFH..446h$]4-@"2tX6 7
 M77j S_%9r4;;'DKK(  &	  
D!  HH  "HHMMOLLNr1   r#   )r'   typingr   r   r   r   r4   torch.utils._pytreeutils_pytreerM   r5   rf   r   rO   Interpreterr!   _python_dispatch_disable_current_modesrP   r   r   r   r1   r   <module>r      s     0 0  $ $yy~~$6@,UXX)) @,F 446Xh7L.M%N  7r1   