
    `i                     
   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZmZ ddlmZ ddlZddlmZ d	d
lmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZmZmZ  ed          Z  ed          Z!ej"        j#        Z#e$ee#e%f         ede
f         f         Z&eede
f         e%f         Z' G d dej(        j)                  Z*e G d d                      Z+ G d de          Z,dej-        de.e+         dee!e
f         fdZ/dS )z?Utilities for lowering subgraphs used by higher order operators    N)	Generator)contextmanager)	dataclass)AnyCallableOptionalTypeVarUnion)	ParamSpec)
OrderedSet   )ir)SubgraphLoweringException)GraphLowering)SimpleCSEHandler)opsVWrapperHandlerT_P.c                       e Zd ZU dZeeej                          ed<   e	ed<   ee
         ed<   eee                  ed<   ee         ed<   eej                 ed<   ee         ed<   	 	 dd
ej        j        de	deee                  dee         dd	f
 fdZede
ded         fd            ZdefdZdedd	fdZdddej        dedefdZdedefdZde
dedeeef         def fdZdedee         deeef         dd	fdZ  xZ!S ) PointwiseSubgraphLoweringz
    Lowers a pointwise subgraph to a single set of buffers with a separate
    lowering object. Errors if buffers are created unexpectedly
    graph_outputs
root_graph_current_opallowed_mutationsadditional_loweringsbuffersmutated_buffersNgmroot_graph_loweringreturnc                     t                                          |           d | _        || _        || _        || _        d | _        t                      | _        g | _	        d S N)
super__init__r   r   r   r   r   r   r   r   )selfr    r!   r   r   	__class__s        u/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torch/_inductor/subgraph_lowering.pyr&   z"PointwiseSubgraphLowering.__init__,   s]     	!-!2$8!  *||    op)NNNc              #   V   K   | j         }|| _         	 dV  || _         dS # || _         w xY w)zQSet which op is being processed in call function to know if we can mutate buffersN)r   )r'   r+   previouss      r)   _op_contextz%PointwiseSubgraphLowering._op_context>   sH       #	(EEE'DxD''''s    	(c                 0    | j         d uo| j        | j         v S r$   )r   r   )r'   s    r)   _approved_mutatorz+PointwiseSubgraphLowering._approved_mutatorH   s%    "$. ; D$::	
r*   namec                     |                                  r| j                            |           d S t          d| j         d          )Nz,Buffer mutation detected during lowering of z. Buffer mutations are only allowed in approved mutation ops. This is an error in the lowering of the subgraph, please file a bug report.)r0   r   addr   r   r'   r1   s     r)   mark_buffer_mutatedz-PointwiseSubgraphLowering.mark_buffer_mutatedN   sb    !!## 	 $$T*****+^t?O ^ ^ ^  r*   Fset_namebufferr7   c                    |                                  r| j                            ||          }|S t          d          )Nr6   zBuffers cannot be created while lowering a pointwise subgraph. This could be for a good reason (e.g. you're calling an op we can't codegen as a pointwise op), but it could also be a bug. Please file a bug report if you think this should be supportable.)r0   r   register_bufferr   )r'   r8   r7   r1   s       r)   r:   z)PointwiseSubgraphLowering.register_bufferX   sM    !!## 	?226H2MMDK+p  r*   c                 ,    t          | j        |          S r$   )getattrr   r4   s     r)   __getattr__z%PointwiseSubgraphLowering.__getattr__c   s    t---r*   targetargskwargsc                    ddl m} |                     |          5  |t          j        u rWt          |d         t          t          t          f          r/t                      
                    |||          cd d d            S | j        ?|| j        v r6t          |t                    sJ  | j        |         |i |cd d d            S ||vrt          | d           ||         |i |cd d d            S # 1 swxY w Y   d S )Nr   )	loweringsr   z. not supported in subgraph, (missing lowering))loweringrB   r.   operatorgetitem
isinstancelisttupledictr%   call_functionr   
OpOverloadr   )r'   r>   r?   r@   rB   r(   s        r)   rJ   z'PointwiseSubgraphLowering.call_functionf   s    	('''''f%% 	6 	6)))ja4PTBU.V.V)ww,,VT6BB	6 	6 	6 	6 	6 	6 	6 	6
 (4T666%fj99999<44V<dMfMM	6 	6 	6 	6 	6 	6 	6 	6 Y&&/MMM   %9V$d5f55	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   AC99C9	#C99C= C=c                 J    t          |          dk    sJ |d         | _        d S )Nr   r   )lenr   )r'   r>   r?   r@   s       r)   outputz PointwiseSubgraphLowering.output   s'    4yyA~~~~!!Wr*   )NN)"__name__
__module____qualname____doc__r   rG   r   IRNode__annotations__r   
TargetTyper   rK   LoweringDictBufferstrtorchfxGraphModuler&   r   r   r.   boolr0   r5   r:   r   r=   rI   rJ   rH   rN   __classcell__r(   s   @r)   r   r      sq         
 DO,,,,*%%%%
: 67777"<0000")__$$$ ?C7; H  + $Jz$:;	
 '|4 
     $ (j (Y7G-H ( ( ( ^(
4 
 
 
 
      FK 	 	 	bi 	d 	s 	 	 	 	. . . . . .66 6 S#X	6
 
6 6 6 6 6 62%S %c
 %DcN %t % % % % % % % %r*   r   c                   8    e Zd ZU ej        ed<   ej        ed<   dS )InputDescriptordtypedeviceN)rO   rP   rQ   rY   ra   rT   rb    r*   r)   r`   r`      s.         ;Lr*   r`   c                        e Zd Zdej        j        deddf fdZdedej        j        fdZ	de
e         ddfd	Z xZS )
TracingOpsHandlertracer
num_inputsr"   Nc                      |                     dddi           }t                                          |           | _         fdt	          |          D              _        d S )Nplaceholderr   rc   c                 P    g | ]"}j                             d d| di           #S )ri   inputrc   )rf   create_proxy).0ir'   s     r)   
<listcomp>z.TracingOpsHandler.__init__.<locals>.<listcomp>   sE     
 
 
 K$$]KAKKRHH
 
 
r*   )rl   r%   r&   rf   rangeplaceholders)r'   rf   rg   parentr(   s   `   r)   r&   zTracingOpsHandler.__init__   su    $$]E2rBB   
 
 
 
:&&
 
 
r*   idxc                     | j         |         S r$   )rq   )r'   rs   s     r)   ri   zTracingOpsHandler.placeholder   s     %%r*   r?   c                 v      j                             ddt           fd|D                       fi            d S )NrN   c              3   L   K   | ]}j                             |          V  d S r$   )rf   
create_arg)rm   ar'   s     r)   	<genexpr>z+TracingOpsHandler.output.<locals>.<genexpr>   s3      &O&OQt{'='=a'@'@&O&O&O&O&O&Or*   )rf   create_noderH   )r'   r?   s   ` r)   rN   zTracingOpsHandler.output   sQ    h&O&O&O&O$&O&O&O!O!O QSU	
 	
 	
 	
 	
r*   )rO   rP   rQ   rY   rZ   Tracerintr&   Proxyri   rH   objectrN   r]   r^   s   @r)   re   re      s        
ux 
C 
D 
 
 
 
 
 
&s &ux~ & & & &
E&M 
d 
 
 
 
 
 
 
 
r*   re   subgraphinputsr"   c           	         dt           dt           dt          t          j        t          j        d f         fdfdt          |          D             }| j        }t          |t          j	                  }t          j
        |          5   |j        |  d d d            n# 1 swxY w Y   t          j                                        }t          j                            |j                  |_	        t#          t%          |t'          |                              }|j        J t          j        |          5  g }|j        D ]}t-          |t          j                  sJ t/          |                      |                                g k    sJ t-          |j        t          j                  sJ t-          |j        j        t          j                  sJ d}	|j        j                            |	          }
|                    |
           t=          j        |  d d d            n# 1 swxY w Y   t          j                             i |j	                  d	tB          j"        d
tB          j#        dtH          ffd}|S )Nloop_idx	input_idxr"   c                 *    t          j        |          S r$   )r   ri   )r   r   s     r)   fake_inner_fnz/lower_pointwise_subgraph.<locals>.fake_inner_fn   s     y)))r*   c           
          g | ]F\  }}t           j                            |j        |j        t          j        |           g           GS ))r   )rb   ra   inner_fnranges)r   	Pointwisecreaterb   ra   	functoolspartial)rm   rn   descr   s      r)   ro   z,lower_pointwise_subgraph.<locals>.<listcomp>   sf        At 	;*&}BBB	 	 	
 	
  r*   )r!   )
tracer_clsrc   r?   r@   c                  >     t          j                    g| R i |S r$   )r   get_ops_handler)r?   r@   
lowered_gms     r)   r   z*lower_pointwise_subgraph.<locals>.inner_fn   s,    z!+--???????r*   )%r|   r
   r   Expr	TensorBox	enumerategraph_moduler   r   graphset_graph_handlerrunrY   rZ   r{   Graphr(   r   re   rM   r   set_ops_handlerrF   typeget_sizedata
StorageBoxr   r   appendr   rN   r[   r   r?   r@   r   )r   r   graph_inputsr    pw_subgraphrf   	trace_ops
output_irsout_varrs   ir_outr   r   r   s               @@r)   lower_pointwise_subgraphr      s   **"%*	rwd*	+* * * *
    !((  L 
	B+BAGLLLK	
	[	)	) ' '&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '
 X__F8>>V-=>>>FL !263v;;!G!GHHI$000	
	9	%	%    
"0 		& 		&Ggr|44CCd7mmCC4##%%++++glBM:::::gl/>>>>>C\&//44Ff%%%%
J                               %%b&,77J@ @29 @ @ @ @ @ @ @ Os%   
B!!B%(B%;C#H**H.1H.)0rR   r   rD   collections.abcr   
contextlibr   dataclassesr   typingr   r   r   r	   r
   typing_extensionsr   rY   torch.utils._ordered_setr    r   excr   r   r   ops_handlerr   virtualizedr   r   r   r   r   _opsrK   rI   rX   rV   rU   rZ   Interpreterr   r`   re   SubgraphrG   r   rc   r*   r)   <module>r      sN   E E      % % % % % % % % % % % % ! ! ! ! ! ! : : : : : : : : : : : : : : ' ' ' ' ' '  / / / / / /       * * * * * *             ) ) ) ) ) ) / / / / / / / / / / GCLLYt__Z"
E*c/*HS#X,>>?8CH%s*+
d% d% d% d% d% 4 d% d% d%N        

 
 
 
 
 
 
 
(3k3#'#83b#g3 3 3 3 3 3r*   