
    ɯwg+                     t   d Z ddlZddlZddlmZ ddlmZmZmZ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mZmZ  ed      Z ed      Z G d dej>                  j@                        Z!e G d d             Z" G d dee         Z#dejH                  de	e"   deeef   fdZ%y)zAUtilities for lowering subgraphs used by higher order operators

    N)	dataclass)AnyCallableDictListOptionalTupleTypeVarUnion)	ParamSpec   )irSubgraphLoweringException)SimpleCSEHandler)SizeVarAllocator)opsVWrapperHandlerT_Pc                   $    e Zd ZU eeej                        ed<   dej                  j                  ddddf fdZedefd       Zd	eddfd
Zdej"                  defdZdeegef   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 )PointwiseSubgraphLoweringgraph_outputsgmroot_graph_loweringz#torch._inductor.graph.GraphLoweringreturnNc                 @    t         |   |       d | _        || _        y N)super__init__r   
root_graph)selfr   r   	__class__s      f/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/torch/_inductor/subgraph_lowering.pyr!   z"PointwiseSubgraphLowering.__init__   s!    
 	!-    c                 .    | j                   j                  S r   )r"   sizevars)r#   s    r%   r(   z"PointwiseSubgraphLowering.sizevars$   s    '''r&   namec                     t        d      )Nz+Mutations are not supported in this contextr   )r#   r)   s     r%   mark_buffer_mutatedz-PointwiseSubgraphLowering.mark_buffer_mutated(   s    '(UVVr&   bufferc                     t        d      )Nz0Buffer creation is not supported in this contextr   )r#   r,   s     r%   register_bufferz)PointwiseSubgraphLowering.register_buffer+   s    '>
 	
r&   targetargskwargsc                    ddl m} |t        j                  u r/t	        |d   t
        t        t        f      rt        | %  |||      S t	        |t        j                  j                        sJ ||vrt        | d      t        j                  j                  |j                   vrt        d|        ||   |i |S )Nr   )	loweringsr   z. not supported in subgraph, (missing lowering)z@Only pointwise operators are supported in this context, but got )loweringr3   operatorgetitem
isinstancelisttupledictr    call_functiontorch_ops
OpOverloadr   Tag	pointwisetags)r#   r/   r0   r1   r3   r$   s        r%   r;   z'PointwiseSubgraphLowering.call_function0   s     	(X%%%*T!WtUD>Q*R7(v>>&%**"7"7888"+(HI  99fkk1+RSYRZ[  !y $1&11r&   c                 8    t        |      dk(  sJ |d   | _        y )Nr   r   )lenr   )r#   r/   r0   r1   s       r%   outputz PointwiseSubgraphLowering.outputI   s    4yA~~!!Wr&   )__name__
__module____qualname__r   r   r   IRNode__annotations__r<   fxGraphModuler!   propertyr   r(   strr+   Bufferr.   r   r   r   r;   r	   rD   __classcell__r$   s   @r%   r   r      s    DO,,.HH  . C. 
	. (* ( (W W W
bii 
C 

2#$2 2 S#X	2
 
22%S %c
 %DcN %t %r&   r   c                   J    e Zd ZU ej                  ed<   ej                  ed<   y)InputDescriptordtypedeviceN)rE   rF   rG   r<   rS   rI   rT    r&   r%   rR   rR   N   s    ;;LLr&   rR   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ej                  j                  fd	Z xZS )
TracingOpsHandlertracer
num_inputsr   Nc           	          |j                  dddi       }t        | 	  |       || _        t	        |      D cg c]#  }| j                  j                  dd| di       % c}| _        y c c}w )Nplaceholderr   rU   input)create_proxyr    r!   rX   rangeplaceholders)r#   rX   rY   parentir$   s        r%   r!   zTracingOpsHandler.__init__U   so    $$]E2rB  :&
 KK$$]eA3KRH
 
s   (A*idxc                      | j                   |   S r   )r_   )r#   rb   s     r%   r[   zTracingOpsHandler.placeholder_   s      %%r&   r0   c                 f      j                   j                  ddt         fd|D              fi       S )NrD   c              3   T   K   | ]  }j                   j                  |       ! y wr   )rX   
create_arg).0ar#   s     r%   	<genexpr>z+TracingOpsHandler.output.<locals>.<genexpr>d   s      &OQt{{'='=a'@&Os   %()rX   create_noder9   )r#   r0   s   ` r%   rD   zTracingOpsHandler.outputb   s2    {{&&h&O$&O!O QSU
 	
r&   )rE   rF   rG   r<   rJ   Tracerintr!   Proxyr[   r	   objectNoderD   rO   rP   s   @r%   rW   rW   T   s_    
uxx 
C 
D 
&s &uxx~~ &
E&M 
ehhmm 
r&   rW   subgraphinputsr   c                    dt         dt         dt        t        j                  t        j                  d f   fd}t        |      D cg c]Q  \  }}t        j                  j                  |j                  |j                  t        j                  ||      g       S }}}| j                  }t        |t        j                        }t        j                   |      5   |j"                  |  d d d        t$        j&                  j)                         }t$        j&                  j+                  |j,                        |_        t/        t1        |t3        |                  }	|j4                  J t        j6                  |	      5  g }
|j4                  D ]  }t9        |t        j                        sJ t;        |             |j=                         g k(  sJ t9        |j>                  t        j@                        sJ t9        |j>                  j>                  t        j                        sJ d	}|j>                  j>                  jC                  |      }|
jE                  |        tG        jH                  |
  d d d        t$        j&                  jK                  i |j                        d
tL        jN                  dtL        jP                  dtR        ffd}|S c c}}w # 1 sw Y   xY w# 1 sw Y   txY w)Nloop_idx	input_idxr   c                 ,    t        j                  |      S r   )r   r[   )rs   rt   s     r%   fake_inner_fnz/lower_pointwise_subgraph.<locals>.fake_inner_fnl   s     y))r&   )rt   )rT   rS   inner_fnranges)r   )
tracer_clsrU   r0   r1   c                  @     t        j                         g| i |S r   )r   get_ops_handler)r0   r1   
lowered_gms     r%   rw   z*lower_pointwise_subgraph.<locals>.inner_fn   s!    !++-????r&   )*rl   r   r   Expr	TensorBox	enumerate	PointwisecreaterT   rS   	functoolspartialgraph_moduler   r   graphset_graph_handlerrunr<   rJ   rk   Graphr$   r   rW   rC   r   set_ops_handlerr7   typeget_sizedata
StorageBoxrw   appendr   rD   rK   r   r0   r1   r   )rp   rq   rv   ra   descgraph_inputsr   pw_subgraphrX   	trace_ops
output_irsout_varrb   ir_outrw   r|   s                  @r%   lower_pointwise_subgraphr   h   sh   **"%*	rwwd*	+* !( At 	;;**&&}B	 	 	
L  
		B+BAGGLK	
		[	) '&'
 XX__F88>>V-=-=>>FL !263v;!GHI$$000	
		9	%  
"00 		&Ggr||4Cd7mC4##%+++gllBMM:::gll//>>>C\\&&//4Ff%		& 	

J   %%b&,,7J@ @299 @ @ OU' '   s    AKKC3K)K&)K2)&__doc__r   r5   dataclassesr   typingr   r   r   r   r   r	   r
   r   typing_extensionsr   r<    r   excr   ops_handlerr   r(   r   virtualizedr   r   r   r   r   rJ   Interpreterr   rR   rW   Subgraphr   rU   r&   r%   <module>r      s      ! M M M '   * ) & / / CLt_3% 4 4 3%l   

q) 
(3kk3#'#83b#g3r&   