
    `iy                        d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dlm	Z	m
Z
mZmZmZ d dlmZ d dlmZ d dlZd dlZd dlmZ d dlmZmZ d dlmZ d	d
lmZ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'm(Z( ddl)m*Z*m+Z+  ed          Z, ej-        e.          Z/ ej0        d          j1        Z2 G d de j3                  Z4 ej5        d           G d de4                      Z6 ej5        d           G d de4                      Z7 ej5        d           G d de4                      Z8 ej5        d           G d d                      Z9ej5         G d d                      Z: G d  d!e+j;                  Z< G d" d#e+j=                  Z>d$e?d%e@e(e
ejA        gejB        f         f         fd&ZCd'eejA                 d$e?d%e@eDeDejB                          e(f         fd(ZEd)d*d'eejA                 d$e?d%e@eDeejA                          e(f         fd+ZFd,d)d-d.d/e
d0e	f         d'eejA                 d1eGd$e?d2eeDejA                          d%e:fd3ZH	 dAd/e	d4eDeDejA                          d5e(d1eGd%e<f
d6ZId7d8d%e@eeDejA                          eeDejA                          f         fd9ZJd%e?fd:ZK G d; d<e!          ZL	 	 dBd/e
d0e	f         d=eejA                 d>eeejA                          d?eGd%eejB                 f
d@ZMdS )C    N)IterableSequence)AnyCallableOptionalTypeVarUnion)Self)patch)get_free_symbols)free_symbolsfree_unbacked_symbols
OrderedSet   )make_symbolSymT   )index_prevent_reordering)DefaultHandler)get_dtype_sizereduction_num_outputssympy_index_symbol	sympy_str
sympy_subs	VarRanges)ReductionTypeVTzindirect|tmpc                   `   e Zd ZU eed<   ej        ed<   ej        	 dde	de
ej                 fd            Zej        deeef         defd            Zej        dej        fd	            Zej        defd
            Zej        de	fd            Zej        de	fd            ZddedefdZdS )DepnameindexFunbacked_onlyreturnc                     d S N selfr$   s     p/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torch/_inductor/dependencies.pyget_free_symbol_useszDep.get_free_symbol_uses*   s	     	    renamesc                     d S r'   r(   r*   r.   s     r+   renamez
Dep.rename0       r-   c                     d S r'   r(   r*   s    r+   	get_numelzDep.get_numel4   r2   r-   c                     d S r'   r(   r4   s    r+   numbytes_hintzDep.numbytes_hint8   r2   r-   c                     d S r'   r(   r4   s    r+   has_unbacked_symbolszDep.has_unbacked_symbols<   r2   r-   c                     d S r'   r(   r4   s    r+   is_contiguouszDep.is_contiguous@   r2   r-   tprefixc                     | S r'   r(   )r*   r=   s     r+   normalize_with_stride_orderzDep.normalize_with_stride_orderD   s    r-   NFr<   )__name__
__module____qualname__str__annotations__sympyExprabcabstractmethodboolr   Symbolr,   dictr
   r1   r5   intr7   r9   r;   r?   r(   r-   r+   r!   r!   &   s}        
III:$) !	EL	!   
 	d38n      	5:     	s     	d     	t     #       r-   r!   T)frozenc                      e Zd ZU eed<   ej        ed<   eej        df         ed<   eej        df         ed<   dZ	e
e         ed<   	 d"d	ed
eej                 fdZd
efdZed
efd            Zdd d
e
ee                  fdZd
ej        fdZd#dZd$ded
d fdZed
eej        ej        f         fd            Zd#dZd
ej        fdZdeeef         d
d fdZd
efdZd
efdZd
efdZd%ded
efdZd
efd Z d
efd!Z!dS )&	MemoryDepr"   r#   .	var_namessizeNmodeFr$   r%   c                     t          | j        |          t          | j        |          z  t          | j        |          z  S r'   )r   r#   rS   rR   r)   s     r+   r,   zMemoryDep.get_free_symbol_usesP   s@     TZ77ty-889t~}==>	
r-   c                 b    d}| j         
d| j          }d| j        d| j         d| j         | dS )N , z
MemoryDep())rT   r"   r#   ranges)r*   
maybe_modes     r+   __repr__zMemoryDep.__repr__Y   sJ    
9 )di))JSDISS4:SSSjSSSSr-   c                 *    t          | j                  S r'   )lenrR   r4   s    r+   num_varszMemoryDep.num_vars_   s    4>"""r-   otherc                    | j         |j         k    sJ | j         t          | j        j                  k    rdS |j         t          |j        j                  k    rdS t	          d t          j        | j        |j                  D                       rdS t          j	        j
                            | j        | j                  }t          j	        j
                            |j        |j                  }t          t          |                    t          |          k    s-t          t          |                    t          |          k    r t                              d| |||           dS t          |          t          |          k    rdS d t!          |          D             fd|D             }t          |          t          t#          d| j                             k    sJ |S )zD
        Can return None if not able to decide loop orders.
        Nc              3   .   K   | ]}|d k    p|dk    V  dS )r   r   Nr(   ).0ss     r+   	<genexpr>z7MemoryDep.decide_loop_order_to_match.<locals>.<genexpr>x   s/      PPAqAvaPPPPPPr-   zaunable to decide loop order. self_dep=%s v.s. other_dep=%s, self_strides=%s v.s. other_strides=%sc                     i | ]\  }}||	S r(   r(   )rc   ird   s      r+   
<dictcomp>z8MemoryDep.decide_loop_order_to_match.<locals>.<dictcomp>   s    DDDDAq1aDDDr-   c                      g | ]
}|         S r(   r(   )rc   rd   stride_to_indexs     r+   
<listcomp>z8MemoryDep.decide_loop_order_to_match.<locals>.<listcomp>   s    ;;;#;;;r-   r   )r_   r^   r#   r   any	itertoolschainrS   r   graphsizevarsstride_hintsrR   r   logdebug	enumeraterange)r*   r`   self_stridesother_stridesorderrj   s        @r+   decide_loop_order_to_matchz$MemoryDep.decide_loop_order_to_matchc   s    }.... =C
 788884>S!9::::4 PPEJ)O)OPPPPP 	4 w'44TZPP(55ek5?SS z,''((C,=,===}%%B
 B
B  B  IIs   4
 l##z-'@'@@@4DDIl,C,CDDD;;;;];;;%  JuQ/F/F$G$GGGGGr-   c                 h    t          | j        t                              | j        d                    S )zF
        Return the offset by setting every variable to be 0.
        r   )r   r#   rM   fromkeysrR   r4   s    r+   
get_offsetzMemoryDep.get_offset   s&     $*dmmDNA&F&FGGGr-   c                 z    t          | j        gt                              | j        | j                  | j        R  S )z
        Normalize by merging loops. The different to normalize_with_stride_order is,
        this method does not reorder loops while normalize_with_stride_order reorder
        loops based on stride order.
        )rQ   r"   _RecordLoadStoreInner
_normalizer#   rZ   rT   r4   s    r+   	normalizezMemoryDep.normalize   sH     I
"--dj$+FF
 I
 
 
 	
r-   r<   r=   c           	      D   ddl m} t          j        j                            | j        | j                  }t          t          t          |                    |j        d          }|                    |          }| j        }| j        } ||          } ||          }	t          j        j                            |	|t          | j        g|	|                    \  }
}}t!          |          \  }t#          t%          |	 |fd|
D                                           }t'          t)          j        | j                  |          }t-          | j        |t1          |                                          t1          |                                                    }|S )a'  
        Used to decide if two MemoryDep does not equal due to different loop orders.
        More specifically, when dep1 and dep2 are not equal, we can normalize
        both and check if they are equal after that. If yes, then the mismatch is
        caused by different loop orders.
        r   )irT)keyreversec                 &    g | ]} |          S r(   r(   rc   xadd_vars     r+   rk   z9MemoryDep.normalize_with_stride_order.<locals>.<listcomp>   s!    BBBBBBr-   )torch._inductorr   r   ro   rp   rq   r#   rR   sortedru   r^   __getitem__same_reorderrS   _simplify_loopsr   var_builderrM   zipr   rG   expandrQ   r"   tuplekeysvalues)r*   r=   r   stridesrx   stride_reordersizesrR   new_reordered_sizesnew_reordered_var_namesnew_simplified_sizesreindex_prune
var_rangesreplacement	new_indexoutr   s                    @r+   r?   z%MemoryDep.normalize_with_stride_order   s    	'&&&&&'"//
DNKK uS\\**0CTRRR//	N	,nU33"0.";";010@0P0P#$57J 1
 1
-gv *&11
G'BBBB-ABBBCC 
 
 u|DJ77EE	Iy%
(9(9":":E*BSBSBUBU<V<V
 
 
r-   c                 P    t          t          | j        | j                            S )z{c0: 128, c1: 512, ...})rM   r   rR   rS   r4   s    r+   rZ   zMemoryDep.ranges   s      C	22333r-   c                     t          | j        t          j        j                            | j        | j                  | j        | j	        | j
                  S )N)r"   r#   rR   rS   rT   )rQ   r"   r   ro   rp   simplify_with_rangesr#   rZ   rR   rS   rT   r4   s    r+   r   zMemoryDep.simplify_with_ranges   sI    '"77
DKPPn
 
 
 	
r-   c                    |                                  r%t          j                            | j                  }nSt          | j        j                  }t          j	        j
        }t          | j        | j                  D ]\  }}||v r||z  }|S r'   )is_indirectr   ro   r5   r"   r   r#   r   rG   SOner   rR   rS   )r*   numelvarsvarrS   s        r+   r5   zMemoryDep.get_numel   s     	)G%%di00EE,6tz7N,O,ODGKE ;; ) )	T$;;!DLEr-   r.   c                 ~    | j         |v r3t          || j                  | j        | j        | j        | j                  S | S )N)rR   rS   rT   )r"   rQ   r#   rR   rS   rT   r0   s     r+   r1   zMemoryDep.rename   sK    9	"
.YY    r-   c                     	 t           j        j                            |                                           t          t           j                            | j                            z  S # t          $ r Y dS w xY wNr   	r   ro   rp   	size_hintr5   r   	get_dtyper"   NotImplementedErrorr4   s    r+   r7   zMemoryDep.numbytes_hint   x    	7#--dnn.>.>??.!!$),,C C   # 	 	 	11	   A'A* *
A87A8c                 f    t          t          |                                                     dk    S r   r^   r   r5   r4   s    r+   r9   zMemoryDep.has_unbacked_symbols  (    ()9)9::;;a??r-   c                     t          | j        t          j                  rdS t          | j        t          j                  o| j        | j        v S NT)
isinstancer#   rG   IntegerrL   rR   r4   s    r+   r;   zMemoryDep.is_contiguous	  s?    dj%-00 	4$*el33T
dn8TTr-   Tresult_for_complex_expressionc                    t          | j                  dk    rdS t          | j        t          j                  r| j        j        n| j        g}| j        d         }|D ]}||k    r dS t          |t          j                  rit          |j                  dk    rQ|j        d         |k    r@t          |j        d         t          t          j	        f          r|j        d         dk    r dS |S )zA
        Whether the stride for the last dimension is 1.
        r   Tr   r   F)
r^   rR   r   r#   rG   AddargsMulrN   r   )r*   r   termslast_symterms        r+   stride1_for_last_dimzMemoryDep.stride1_for_last_dim  s     t~!##4#-dj%)#D#DV
4:,>"% 	 	Dxtt
 4++	NNa''IaLH,,ty|c5=-ABB -IaL1$$uu,,r-   c                     t          | j        t          j                  r#| j        | j        vo|                                  S t          | j        t          t          j        f          S r'   )r   r#   rG   rL   rR   r   rN   r   r4   s    r+   	is_scalarzMemoryDep.is_scalar+  sU    dj%,// 	O:T^3ND<L<L<N<N8NN$*sEM&:;;;r-   c                 H    t          d | j        j        D                       S )Nc              3   >   K   | ]}t          |j                  V  d S r'   )r   r"   rc   vs     r+   re   z(MemoryDep.is_indirect.<locals>.<genexpr>1  s,      HH1;qv&&HHHHHHr-   )rl   r#   r   r4   s    r+   r   zMemoryDep.is_indirect0  s$    HH
0GHHHHHHr-   r@   )r%   rQ   rA   T)"rB   rC   rD   rE   rF   rG   rH   r   rL   rT   r   rK   r   r,   r\   propertyrN   r_   listry   r|   r   r?   rM   rZ   r   r5   r1   r7   r9   r;   r   r   r   r(   r-   r+   rQ   rQ   H   s        
III:U\3&''''

C
    D(3- %*
 
!
	EL	!
 
 
 
T# T T T T ## # # # X#7 7c@S 7 7 7 7rHEJ H H H H

 

 

 

* *# * * * * *X 4U\5:56 4 4 4 X4
 
 
 
	5: 	 	 	 		d38n 	 	 	 	 	s    @d @ @ @ @Ut U U U U
- -$ -RV - - - -:<4 < < < <
IT I I I I I Ir-   rQ   c                       e Zd ZU eed<   dZee         ed<   edej	        fd            Z
dej	        fdZdeeef         dd fdZ	 dd
edeej                 fdZdefdZdefdZdefdZdefdZdefdZdS )StarDepr"   NrT   r%   c                      t          d          )NzStarDep does not have an indexr   r4   s    r+   r#   zStarDep.index:      !"BCCCr-   c                 J    t           j                            | j                  S r'   )r   ro   r5   r"   r4   s    r+   r5   zStarDep.get_numel>  s    w  +++r-   r.   c                 X    | j         |v r t          || j                  | j                  S | S r'   )r"   r   rT   r0   s     r+   r1   zStarDep.renameA  s-    9749-ty999r-   Fr$   c                     t                      S r'   r   r)   s     r+   r,   zStarDep.get_free_symbol_usesF       ||r-   c                     	 t           j        j                            |                                           t          t           j                            | j                            z  S # t          $ r Y dS w xY wr   r   r4   s    r+   r7   zStarDep.numbytes_hintK  r   r   c                 f    t          t          |                                                     dk    S r   r   r4   s    r+   r9   zStarDep.has_unbacked_symbolsS  r   r-   c                     dS NFr(   r4   s    r+   r;   zStarDep.is_contiguousV      ur-   c                     dS r   r(   r4   s    r+   r   zStarDep.is_scalarY  r   r-   c                     dS r   r(   r4   s    r+   r   zStarDep.is_indirect\  r   r-   r@   )rB   rC   rD   rE   rF   rT   r   r   rG   rH   r#   r5   rM   r1   rK   r   rL   r,   rN   r7   r9   r;   r   r   r(   r-   r+   r   r   4  si        
IIID(3- Duz D D D XD,5: , , , ,d38n      %* !	EL	!   
s    @d @ @ @ @t    4    T      r-   r   c                       e Zd ZU eed<   eed<   dZeed<   	 ddedeej	                 fdZ
edej        fd            Zdej        fd	Zd
eeef         dd fdZdefdZdefdZdefdZdS )WeakDepr"   mutating_bufFis_faker$   r%   c                     t                      S r'   r   r)   s     r+   r,   zWeakDep.get_free_symbol_usesu  r   r-   c                      t          d          )NzWeakDep does not have an indexr   r4   s    r+   r#   zWeakDep.indexz  r   r-   c                 $    t           j        j        S r'   )rG   r   r   r4   s    r+   r5   zWeakDep.get_numel~  s    w{r-   r.   c                 d    | j         |v r&t          || j                  | j        | j                  S | S r'   )r"   r   r   r   r0   s     r+   r1   zWeakDep.rename  s2    9749-t/@$,OOOr-   c                     dS )Nr   r(   r4   s    r+   r7   zWeakDep.numbytes_hint  s    qr-   c                     dS r   r(   r4   s    r+   r9   zWeakDep.has_unbacked_symbols  r   r-   c                     dS r   r(   r4   s    r+   r;   zWeakDep.is_contiguous  r   r-   Nr@   )rB   rC   rD   rE   rF   r   rK   r   rG   rL   r,   r   rH   r#   r5   rM   r1   rN   r7   r9   r;   r(   r-   r+   r   r   h  s:         III GT %* !	EL	!   
 Duz D D D XD5:    d38n     
s    d    t      r-   r   c                   l    e Zd ZU ej        ed<   eej        df         ed<   eej        df         ed<   dS )IndexExprDepr#   .rR   rS   N)rB   rC   rD   rG   rH   rF   r   rL   r(   r-   r+   r   r     sO         :U\3&''''

C
      r-   r   c                      e Zd ZU ee         ed<   ee         ed<   ee         ed<   dZee	e
j                          ed<   dZee         ed<   deeef         dd fd	Zd
eeee         f         dd fdZddZede	d          dd fd            Zdee         dd fdZdee         fdZddedee         fdZ	 ddedee
j                 fdZdS )
ReadWritesreadswritesindex_exprsN
range_varsr   r.   r%   c                     t          t          fd| j        D                       t          fd| j        D                       | j        | j        | j                  S )Nc              3   B   K   | ]}|                               V  d S r'   r1   rc   depr.   s     r+   re   z$ReadWrites.rename.<locals>.<genexpr>  s/      AAsszz'**AAAAAAr-   c              3   B   K   | ]}|                               V  d S r'   r   r   s     r+   re   z$ReadWrites.rename.<locals>.<genexpr>  s/      BBsszz'**BBBBBBr-   )r   r   r   r   r   r   r   r0   s    `r+   r1   zReadWrites.rename  si    AAAAdjAAAAABBBBdkBBBBBOO
 
 	
r-   r   c                    t          |t          t          t          f          sJ t          |t                    st          |g          }t	          t          j        | j        |          | j        | j        | j	        | j
                  S r'   )r   r   r   r   r   unionr   r   r   r   r   )r*   r   s     r+   	with_readzReadWrites.with_read  sy    #*=>>>>>#z** 	$cU##CTZ--KOO
 
 	
r-   r`   c                     t          j        | j        |j                  }t          j        | j        |j                  }t          j        | j        |j                  }t          ||z
  ||          S r'   )r   r   r   r   r   r   )r*   r`   r   r   r   s        r+   mergezReadWrites.merge  s\     U[99!$+u|<< &t'79JKK%&.&+>>>r-   read_writesc                     t          j        d | D              }t          j        d | D              |z
  }t          j        d | D              }t          |||          S )Nc                     g | ]	}|j         
S r(   )r   rc   rws     r+   rk   z)ReadWrites.merge_list.<locals>.<listcomp>  s    'H'H'Hb	'H'H'Hr-   c                     g | ]	}|j         
S r(   )r   r   s     r+   rk   z)ReadWrites.merge_list.<locals>.<listcomp>  s    &F&F&FBrx&F&F&Fr-   c                     g | ]	}|j         
S r(   )r   r   s     r+   rk   z)ReadWrites.merge_list.<locals>.<listcomp>  s    ,R,R,RR^,R,R,Rr-   )r   r   r   )r   
all_writes	all_readsall_index_exprss       r+   
merge_listzReadWrites.merge_list  sm    %'H'HK'H'H'HI
$&F&F+&F&F&FG*T	$*,R,Rk,R,R,RS)ZAAAr-   	rem_readsc                 `    t          | j        |z
  | j        | j        | j        | j                  S r'   )r   r   r   r   r   r   )r*   r  s     r+   remove_readszReadWrites.remove_reads  s3    J"KOO
 
 	
r-   c                 @    t          j        | j        | j                  S r'   )rm   rn   r   r   r4   s    r+   reads_and_writeszReadWrites.reads_and_writes  s    tz4;777r-   Tignore_integer_indexc                     t                      }|                                 D ]Z}t          |t                    s|r&t          |j        t
          t          j        f          s|                    |j	                   [|S )z6
        Integer index is used for load_seed.
        )
r   r
  r   rQ   r#   rN   rG   r   addr"   )r*   r  namesr   s       r+   buffer_nameszReadWrites.buffer_names  s     ",((** 	$ 	$Cc9-- ' $z	C/0 0 $ 		#(###r-   Fr$   c                     t                      }|                                 D ]}||                    |          z  }|S r'   )r   r
  r,   )r*   r$   resultr   s       r+   r,   zReadWrites.get_free_symbol_uses  sG     ,6<<((** 	> 	>Cc..}===FFr-   )r`   r   r%   r   r   r@   )rB   rC   rD   r   r!   rF   r   r   r   r   rG   rH   r   r   rM   rE   r1   r	   r   r   staticmethodr  r  r   r
  rK   r  rL   r,   r(   r-   r+   r   r     s        c?sOL))))-1Jej)*111&*J#***
d38n 
 
 
 
 


U3
3#78 

\ 

 

 

 

? ? ? ? B\ 2 B| B B B \B
jo 
, 
 
 
 
8(3- 8 8 8 8  C     %* !	EL	!     r-   r   c                       e Zd Zdededdf fdZedeee	j
        f         dee	j
                 dee	j
                 ddfd	            Zede	j
        dedee	j
        ee	j        d
f         ee	j
        d
f         f         fd            Zde	j
        dee	j
        ee	j        d
f         ee	j
        d
f         f         fdZdede	j
        defdZdededefdZ	 ddede	j
        dedee         def
dZdede	j
        dedefdZde	j
        deej                 defdZ	 	 ddedeee	j
        e	j
        e	j
        f         dedej        dedeeee	j
        f                  dee         ddfdZ xZS ) r~   r   r   r%   Nc                     t                                                       t                      | _        t                      | _        t                      | _        || _        || _        d S r'   )super__init__r   _reads_writes_index_exprs_var_ranges_should_normalize)r*   r   r   	__class__s      r+   r  z_RecordLoadStoreInner.__init__  sQ    '1||.8ll6@ll&0'0r-   r#   rR   r   c                     t          | t          j                  sdS | j        }|r@|d         |vr:|                                 |                                 |r|d         |v4dS dS dS dS )zz
        Reduction has last (reduced) dim in its sizes, but
        downstream users won't.  Normalize this away.
        Nr   )r   rG   rH   r   pop)r#   rR   r   r   s       r+   drop_unused_symbolsz)_RecordLoadStoreInner.drop_unused_symbols  s     %,, 	F) 	IbM==MMOOOIIKKK  	IbM==== 	 	 	 	==r-   .c           	      j  
 g |                                 }t          |                                          }t          j        j                            ||t          |g||                    \  }}}t          t                                \  }
t          t          | |
fd|D                                           }	t          t          j        |          |	          }g |                                 }g |}|                     |||           |t          |          t          |          fS )Nc                 &    g | ]} |          S r(   r(   r   s     r+   rk   z4_RecordLoadStoreInner._normalize.<locals>.<listcomp>  s!    3R3R3R1GGAJJ3R3R3Rr-   )r   r   r   r   ro   rp   r   r   r   canonicalization_prefixrM   r   r   rG   r   r  )clsr#   r   
index_varsr   	new_sizesr   r   new_varsr   r   s             @r+   r   z _RecordLoadStoreInner._normalize   s"    *z(()
j''))**%&W%5%E%E$eWj%@@&
 &
"	7F ((?(A(ABB'3z773R3R3R3R	3R3R3R+S+STTUU5<..<<%X]]__% iL	x;;;eHoouY'7'777r-   c                    | j         sd | j                                        D             }d t          | j                                        |          D             }d |D             }|                     |||           |t          |          t          |          fS d | j                                        D             }|                     ||          S )Nc                 V    g | ]&}t           j        j                            |          'S r(   r   ro   rp   simplify)rc   r   s     r+   rk   z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>  s+    UUUaQW%..q11UUUr-   c                 $    g | ]\  }}|d k    |S r   r(   rc   kr   s      r+   rk   z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>  s"    UUUtq!aSTfffffr-   c                     g | ]
}|d k    |S r,  r(   r   s     r+   rk   z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>   s    0001aQr-   c                 ^    i | ]*\  }}|t           j        j                            |          +S r(   r)  r-  s      r+   rh   z6_RecordLoadStoreInner.canonicalize.<locals>.<dictcomp>%  sA     
 
 
1 qw((++
 
 
r-   )	r  r  r   r   r   r  r   itemsr   )r*   r#   r   rR   r   s        r+   canonicalizez"_RecordLoadStoreInner.canonicalize  s     % 	9UU4;K;R;R;T;TUUUEUUs4+;+@+@+B+BE'J'JUUUI00000E$$UIu===%	**E%LL88
 
(..00
 
 

 uj111r-   r"   c                     | j                             t          |g|                     |          R             d| dt	          |           dS )Nzload(rX   rY   )r  r  rQ   r2  r   r*   r"   r#   s      r+   loadz_RecordLoadStoreInner.load-  sU    	$B):):5)A)ABBBCCC2t22y//2222r-   c                     t          |t                    sJ |                     |t          j        |                    S r'   )r   rN   r5  rG   r   r4  s      r+   	load_seedz_RecordLoadStoreInner.load_seed1  s6    %%%%%%yyu}U33444r-   valuerT   c           	          | j                             t          |g|                     |          R d|i           d| dt	          |           d| d| d	S )NrT   zstore(rX   rY   )r  r  rQ   r2  r   )r*   r"   r#   r8  rT   s        r+   storez_RecordLoadStoreInner.store5  sq     	4N$*;*;E*B*BNNNNNOOODDD	% 0 0DDEDDTDDDDr-   c                 8    |                      ||d| d          S )Nzstore_reduction(rY   )r:  )r*   r"   r#   r8  s       r+   store_reductionz%_RecordLoadStoreInner.store_reduction;  s$    zz$'B%'B'B'BCCCr-   dtypec                     | j                             t          |                     |                      dt	          |           d| dS )Nzindex_expr(rX   rY   )r  r  r   r2  r   )r*   r#   r=  s      r+   
index_exprz _RecordLoadStoreInner.index_expr>  sM    lD,=,=e,D,DEFFF9Yu--999999r-   r   
boundariesboundary_indicesindexing_dtyperightsortersorter_indicesc                     | j                             t          |d                              |/| j                             t          |d                              dS dS )z?Records the names of the buffers that bucketize will read from.r   N)r  r  r   )r*   r   r@  rA  rB  rC  rD  rE  s           r+   	bucketizez_RecordLoadStoreInner.bucketizeB  sX     	
1..///KOOGF1I..///// r-   r'   NN)rB   rC   rD   r   rK   r  r  r	   rN   rG   rH   r   r  classmethodr   rL   r   r2  rE   r5  r7  r   r:  r<  torchr=  r?  r   rG  __classcell__r  s   @r+   r~   r~     s
       19 1 1$ 1 1 1 1 1 1 S%*_%
# EJ 
	   \" 8J8,58	uz5s!23U5:s?5KK	L8 8 8 [822Z2	uz5s!23U5:s?5KK	L2 2 2 2&3 3UZ 3C 3 3 3 35c 5# 5# 5 5 5 5
 OSE EE %
E36E>FsmE	E E E EDC D
 D3 D3 D D D D:
 :8EK3H :S : : : : 48&*0 00 #uz5:uzAB0 	0
 0 0 sEJ/00 !0 
0 0 0 0 0 0 0 0r-   r~   c                   ,     e Zd Zdededdf fdZ xZS )RecordLoadStorer   r   r%   Nc                 n    t          ||          }t                                          |           d S )Nr   r   )parent_handler)r~   r  r  )r*   r   r   rQ  r  s       r+   r  zRecordLoadStore.__init__S  s?    .!Y
 
 
 	77777r-   )rB   rC   rD   r   rK   r  rK  rL  s   @r+   rN  rN  R  sR        89 8 8$ 8 8 8 8 8 8 8 8 8 8r-   rN  r=   r%   c                 z     t          j                    i dt          j        dt          j        f fd}|fS )Nlengthr%   c                 R    t           t                               }| |<   |S r'   )r   next)rS  r   cntr=   r   s     r+   r   zvar_builder.<locals>.add_var_  s/    &5$s))5566
1r-   )rm   countrG   rH   rL   )r=   r   rV  r   s   ` @@r+   r   r   [  s^    
/

CJ
 u|        
 wr-   argsizesc                 L    t          |           \  }fd|D             }||fS )Nc                 J    g | ]}t          t          |                     S r(   )r   map)rc   rS   r   s     r+   rk   z)index_vars_no_squeeze.<locals>.<listcomp>k  s+    %T%T%T4d3w+=+=&>&>%T%T%Tr-   )r   )r=   rX  r   r   r   s       @r+   index_vars_no_squeezer\  g  s;     &f--J%T%T%T%T8%T%T%TDr-   d)r=   c                    ddl m} t          |           \  }}g }g }|D ]h}|                    |          \  }}	|                    |           |                     |	t          t          ||                                         i||fS )Nr   )SqueezeView)r   r_  r   squeezerappendr   r[  )
r=   rX  r_  r   r   r   r%  rS   new_sizer   s
             r+   index_vars_squeezerc  o  s      %f--J')D,.I ; ;'0066'"""GGDWh!7!78899::::r-   Fr(   )r   r=   hidden_argsfn.r   rd  c                   t          |d|i\  }}ddlm} t          | |          rt	          | g ||||          }nNt          ||          }	t          j        |	          5   | g ||R   d d d            n# 1 swxY w Y   |	j        }|rg }
n!g t          j
                            |          }
t          t          |j                  t          |j                  |j        |
|          S )Nr=   r   )LoopBody)r   )rc  	loop_bodyrg  r   extract_loop_body_with_argsrN  r   set_ops_handlerrQ  rm   rn   from_iterabler   r   r  r  r  )re  r   r=   rd  rX  r   r   rg  innerr   r   s              r+   extract_read_writesrm  ~  sd    *8CFCCD*######"h "+!d![!	
 
 Z9===r"" 	$ 	$B##{####	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$! <

;y44T::;
5<  5=!!  s   "A99A= A=r   r   c                    ddl m} t          ||          }|                     |          }| j        r>d t          | j                  D             fd|                                D             }| j        |j                 D ](}|	                    |j
        ||j                            )| j        |j                 D ]5}|                    |j
        t          ||j                                      6| j        |j                 D ]/}|                    |j
        ||j                 d |j                   0| j        |j                 D ])}|                    |j
        ||j                 d            *| j        |j                 D ]#}|                    ||j                 d            $| j        |j                 D ]$}|                    d |j
        d d d fd d d            %|S )Nr   )MemoryUsageTyperP  c                 J    i | ] \  }}|t          t          j        |          !S r(   )r   r   TMP)rc   rg   r   s      r+   rh   z/extract_loop_body_with_args.<locals>.<dictcomp>  s*    TTT1;tx++TTTr-   c                 8    i | ]\  }}|t          |          S r(   )r   )rc   r.  r   repls      r+   rh   z/extract_loop_body_with_args.<locals>.<dictcomp>  s)    RRRDAqJq$//RRRr-   )rh  ro  r~   indexing_from_argsindirect_varsrt   r1  memory_usageLOADr5  buffer_name
index_name	LOAD_SEEDr7  rN   STOREr:  rT   STORE_REDUCTIONr<  
INDEX_EXPRr?  	BUCKETIZErG  )	re  r   r   r   ro  rl  name_to_indexentryrs  s	           @r+   ri  ri    s>    +***** "Z9MMME))$//M	 STT	"BR8S8STTTRRRRM<O<O<Q<QRRR!56 G G

5$mE4D&EFFFF!:; Q Q)3}U=M/N+O+OPPPP!67 
 
%*+J		
 	
 	
 	
 !@A 
 
%*+	
 	
 	
 	

 !;< @ @u'78$????!:; 	
 	
 	dD1	
 	
 	
 	
 Lr-   
input_nodeztorch._inductor.ir.IRNodec                    ddl m}m}m} t	          |                                 |          rEg |                                 }g |                                 }t          |          dk    r||fS dS t	          | j	        j	        |          sdS | 
                                }d}d}|t          |          dk    rt                      }g }|D ]O}	t	          |	t                    s|	j        |v r#|                    |	j                   t          j                            |	j                  }
|
d|
                                }|t	          ||          rt	          ||          rt          |                                          dk    rh|-g |                                }g |                                }|g |                                k    s|g |                                k    r dS (|                    |
                                           Q||k    r||fS t          |          }|t          |          dk    ||fS )aX  
    Returns the size and reduction size of all inputs, if the sizes and reduction_sizes (if exist) are all the same.
    It's possible that a node has multiple inputs, some are Reduction nodes and others are Pointwise nodes.
    In this case, reduction_sizes of the Reduction nodes need to be the same.
    Otherwise returns (None, None).
    r   )ComputedBufferExternKernelLoopsr   rH  N)r   r  r  r  r   get_defining_opget_sizeget_reduction_sizer^   data	get_readsr   rQ   r"   r  r   ro   try_get_bufferextend)r  r  r  r  rS   reduction_sizer   seen	new_readsreadbufferops               r+   #extract_input_node_reduction_rangesr    s    8777777777
 *,,..??  '$$&&';:88::;~"".))<jo*E22 |
   ""E15N'+D

 SZZ!^^ *!	 	1 	1DdI.. yD  HHTYW++DI66F~''))BzZL99z"n-- 	1#b6K6K6M6M2N2NQR2R2R!)%?r'<'<'>'>%?N+R[[]]+DD#'A)>)>)@)@'AAAT N[[]]N F F (<<F
   0000I.))y))E; 
 SZZ!^^< .!!r-   c                      dS )Ncr(   r(   r-   r+   r"  r"    s    3r-   c                      e Zd ZU eej                 ed<   d$deddfdZde	de
ed	f         d
ee	ef         defdZ	 	 d%dedeeej        f         dededej        f
dZdede
d         fdZdededee         de
d         fdZdedee         dedede
d         f
dZdej        dej        dedede
d         f         dede
d         f         f
dZd ed!ed	ef         d"eddfd#ZdS )&FreeSymbolsOpsHandlersymbolsTr$   r%   Nc                 V    t                      | _        |rt          nt          | _        d S r'   )r   r  r   r   get_symbolsr)   s     r+   r  zFreeSymbolsOpsHandler.__init__   s&    !||4AS00|r-   r"   r   .kwargsc                     t          j        ||                                          D ]U}t          |t          j        t          j        j        j        f          r#| xj	        | 
                    |          z  c_	        Vd S r'   )rm   rn   r   r   rG   rH   logicboolalgBooleanr  r  )r*   r"   r   r  as        r+   _defaultzFreeSymbolsOpsHandler._default$  so    v}}77 	4 	4A!ej%+*=*EFGG 4 0 0 3 33	4 	4r-   	index_varrS   checkwrap_negc                     t          |t          j        t          j        j        j        f          rJ | xj        |                     |          z  c_        t          dt          |           d          S )N(rY   )
r   rG   rH   r  r  r  r  r  r   rE   )r*   r  rS   r  r  s        r+   indirect_indexingz'FreeSymbolsOpsHandler.indirect_indexing)  sg     i%*ek6I6Q)RSSSSS((...!"7c)nn"7"7"7888r-   r   )N.c                     dS )NrH  r(   )r*   r   s     r+   frexpzFreeSymbolsOpsHandler.frexp4  s    {r-   dtypes
combine_fnr   c                 &    dt          |          z  S Nr'   r^   )r*   r  r  r   s       r+   scanzFreeSymbolsOpsHandler.scan7       V$$r-   stable
descendingc                 &    dt          |          z  S r  r  )r*   r  r   r  r  s        r+   sortzFreeSymbolsOpsHandler.sort<  r  r-   r=  	src_dtypereduction_typer8  c                 :    t          |          }|dk    rd|z  nd S )Nr   r'   )r   )r*   r=  r  r  r8  
num_valuess         r+   	reductionzFreeSymbolsOpsHandler.reductionA  s)     +>::
'1A~~w##4?r-   maskbodyr`   c                 L    t          |          s
J d             |             d S )Nz$masked body must always be callable.)callable)r*   r  r  r`   s       r+   maskedzFreeSymbolsOpsHandler.maskedK  s+    ~~EEEEE~r-   r   )TT)rB   rC   rD   r   rG   rL   rF   rK   r  rE   r   r   rM   r  r	   rN   rH   r  r  r   r  r  rJ  r=  r   r  r   r  r(   r-   r+   r  r    sG        %%%%T Td Td T T T T4S 4c3h 4c3h 4TW 4 4 4 4 	9 	9	9 CO$	9 		9
 	9 
	9 	9 	9 	9s uY/    %%'*%4<SM%	y	% % % %
%%#+C=%:=%KN%	y	% % % %
@{@ ;@ &	@
 T5++,@ 
tU9%%	&@ @ @ @3 hsCx&8        r-   r  r#   rindexr$   c                 
   ddl m} |||gn|g}t          |          }t          j        |          5  t          j        |dd          5   | |  d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j        S )Nr   )FlexibleLayoutallow_indexingT)r   r  r  r   rj  r   objectr  )re  r#   r  r$   r  r   handlers          r+   extract_free_symbolsr  Q  s     #"""""$0E6??ugD#M22G 	
'"" ^%5t<<  	D			                             
 ?s5   A3
AA3A 	 A3#A 	$A33A7:A7r@   r   )NrI   dataclassesrm   loggingrecollections.abcr   r   typingr   r   r   r   r	   typing_extensionsr
   unittest.mockr   rG   rJ  torch._inductor.utilsr   %torch.fx.experimental.symbolic_shapesr   r   torch.utils._ordered_setr   utils._sympy.symbolr   r   codegen.commonr   ops_handlerr   utilsr   r   r   r   r   r   virtualizedr   r   r   	getLoggerrB   rr   compilesearchr   ABCr!   	dataclassrQ   r   r   r   r   MockHandlerr~   KernelFormatterHandlerrN  rE   r   rH   rL   r   r   r\  rc  rK   rm  ri  r  r"  r  r  r(   r-   r+   <module>r     s   



          				 . . . . . . . . : : : : : : : : : : : : : : " " " " " "         2 2 2 2 2 2 U U U U U U U U / / / / / / 3 3 3 3 3 3 3 3 4 4 4 4 4 4 ' ' ' ' ' '                * ) ) ) ) ) ) ) GCLLg!!bj))0    #'   D d###hI hI hI hI hI hI hI $#hIV d###( ( ( ( (c ( ( $#(f d###$ $ $ $ $c $ $ $#$N d###! ! ! ! ! ! ! $#! J J J J J J J JZj0 j0 j0 j0 j0AM j0 j0 j0Z8 8 8 8 8a. 8 8 8	 	i5:,:T1U&U V 	 	 	 	
#-0
4U\"#Y./    47  
#-0
4$%y01   $ .0$ $ $c$
#$ $ 	$
 $uz*+$ $ $ $ $V 	- --
tEJ
 - - 	-
 - - - -`@"+@"
8D$%xUZ0@'AAB@" @" @" @"F    
1 1 1 1 1N 1 1 1n .2	 cEJ Xej)* 	
      r-   