
    Wj|                        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mZ d dl	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' ddl(m)Z)m*Z*  ed          Z+ ej,        e-          Z. ej/        d          j0        Z1 G d de j2                  Z3 ej4        d           G d de3                      Z5 ej4        d           G d de3                      Z6 ej4        d           G d de3                      Z7 ej4        d           G d d                      Z8ej4         G d d                      Z9 G d  d!e*j:                  Z; G d" d#e*j<                  Z=d$e>d%e?e'eej@        gejA        f         f         fd&ZBd'eej@                 d$e>d%e?eCeCejA                          e'f         fd(ZDd)d*d'eej@                 d$e>d%e?eCeej@                          e'f         fd+ZEd,d)d-d.d/ed0e
f         d'eej@                 d1eFd$e>d2eeCej@                          d%e9fd3ZG	 dAd/e
d4eCeCej@                          d5e'd1eFd%e;f
d6ZHd7d8d%e?eeCej@                          eeCej@                          f         fd9ZId%e>fd:ZJ G d; d<e!          ZK	 	 dBd/ed0e
f         d=eej@                 d>eeej@                          d?eFd%eejA                 f
d@ZLdS )C    N)CallableIterableSequence)Any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_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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     a/home/longshao/multi-rider-rag/.venv/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.rename/       r,   c                     d S r&   r'   r)   s    r*   	get_numelzDep.get_numel3   r1   r,   c                     d S r&   r'   r3   s    r*   numbytes_hintzDep.numbytes_hint7   r1   r,   c                     d S r&   r'   r3   s    r*   
numel_hintzDep.numel_hint;   r1   r,   c                     d S r&   r'   r3   s    r*   has_unbacked_symbolszDep.has_unbacked_symbols?   r1   r,   c                     d S r&   r'   r3   s    r*   is_contiguouszDep.is_contiguousC   r1   r,   tprefixc                     | S r&   r'   )r)   r>   s     r*   normalize_with_stride_orderzDep.normalize_with_stride_orderG   s    r,   NFr=   )__name__
__module____qualname__str__annotations__sympyExprabcabstractmethodboolr   Symbolr+   dictr
   r0   r4   intr6   r8   r:   r<   r@   r'   r,   r*   r    r    %   s        
III:$) !	EL	!   
 	d38n      	5:     	s     	C     	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
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"   rT   rS   r(   s     r*   r+   zMemoryDep.get_free_symbol_usesU   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, z
MemoryDep())rU   r!   r"   ranges)r)   
maybe_modes     r*   __repr__zMemoryDep.__repr__^   sJ    
9 )di))JSDISS4:SSSjSSSSr,   c                 *    t          | j                  S r&   )lenrS   r3   s    r*   num_varszMemoryDep.num_varsd   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#          | 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>}   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   any	itertoolschainrT   r   graphsizevarsstride_hintsrS   r   logdebug	enumeraterange)r)   r`   self_stridesother_stridesorderrj   s        @r*   decide_loop_order_to_matchz$MemoryDep.decide_loop_order_to_matchh   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;;;;];;;%  JuT]/C/C$D$DDDDDr,   c                 h    t          | j        t                              | j        d                    S )zF
        Return the offset by setting every variable to be 0.
        r   )r   r"   rN   fromkeysrS   r3   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.
        )rR   r!   _RecordLoadStoreInner
_normalizer"   rZ   rU   r3   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"   rS   sortedru   r^   __getitem__same_reorderrT   _simplify_loopsr   var_builderrN   zipr   rH   expandrR   r!   tuplekeysvalues)r)   r>   r   stridesrx   stride_reordersizesrS   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, ...})rN   r   rS   rT   r3   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"   rS   rT   rU   )rR   r!   r   ro   rp   simplify_with_rangesr"   rZ   rS   rT   rU   r3   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   r4   r!   r   r"   r   rH   SOner   rS   rT   )r)   numelvarsvarrT   s        r*   r4   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)rS   rT   rU   )r!   rR   r"   rS   rT   rU   r/   s     r*   r0   zMemoryDep.rename   sK    9	"
.YY    r,   c                     	 t           j        j                            |                                 d          t          t           j                            | j                            z  S # t          $ r Y dS w xY wNr   )fallback	r   ro   rp   optimization_hintr4   r   	get_dtyper!   NotImplementedErrorr3   s    r*   r6   zMemoryDep.numbytes_hint  ~    	7#55  1 6  qw00;;<<= = # 	 	 	11	   A)A, ,
A:9A:c                     	 t           j        j                            |                                 d          S # t
          $ r Y dS w xY wr   r   ro   rp   r   r4   r   r3   s    r*   r8   zMemoryDep.numel_hint  R    	7#55dnn6F6FQR5SSS" 	 	 	11	   7: 
AAc                 f    t          t          |                                                     dk    S Nr   r^   r   r4   r3   s    r*   r:   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"   rH   IntegerrM   rS   r3   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^   rS   r   r"   rH   AddargsMulrO   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"   rH   rM   rS   r   rO   r   r3   s    r*   	is_scalarzMemoryDep.is_scalar6  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><  s,      HH1;qv&&HHHHHHr,   )rl   r"   r   r3   s    r*   r   zMemoryDep.is_indirect;  s$    HH
0GHHHHHHr,   rA   )r$   rR   rB   T)#rC   rD   rE   rF   rG   rH   rI   r   rM   rU   r   rL   r   r+   r\   propertyrO   r_   listry   r|   r   r@   rN   rZ   r   r4   r0   r6   r8   r:   r<   r   r   r   r'   r,   r*   rR   rR   K   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    C    @d @ @ @ @Ut U U U U
- -$ -RV - - - -:<4 < < < <
IT I I I I I Ir,   rR   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efdZdS )StarDepr!   NrU   r$   c                      t          d          )NzStarDep does not have an indexr   r3   s    r*   r"   zStarDep.indexF       ""BCCCr,   c                 J    t           j                            | j                  S r&   )r   ro   r4   r!   r3   s    r*   r4   zStarDep.get_numelK  s    w  +++r,   r-   c                 X    | j         |v r t          || j                  | j                  S | S r&   )r!   r   rU   r/   s     r*   r0   zStarDep.renameN  s-    9749-ty999r,   Fr#   c                     t                      S r&   r   r(   s     r*   r+   zStarDep.get_free_symbol_usesS       ||r,   c                     	 t           j        j                            |                                 d          t          t           j                            | j                            z  S # t          $ r Y dS w xY wr   r   r3   s    r*   r6   zStarDep.numbytes_hintX  r   r   c                     	 t           j        j                            |                                 d          S # t
          $ r Y dS w xY wr   r   r3   s    r*   r8   zStarDep.numel_hint`  r   r   c                 f    t          t          |                                                     dk    S r   r   r3   s    r*   r:   zStarDep.has_unbacked_symbolsf  r   r,   c                     dS NFr'   r3   s    r*   r<   zStarDep.is_contiguousi      ur,   c                     dS r   r'   r3   s    r*   r   zStarDep.is_scalarl  r   r,   c                     dS r   r'   r3   s    r*   r   zStarDep.is_indirecto  r   r,   rA   )rC   rD   rE   rF   rG   rU   r   r   rH   rI   r"   r4   rN   r0   rL   r   rM   r+   rO   r6   r8   r:   r<   r   r   r'   r,   r*   r   r   ?  s         IIID(3- Duz D D D XD,5: , , , ,d38n      %* !	EL	!   
s    C    @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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_uses  r   r,   c                      t          d          )NzWeakDep does not have an indexr   r3   s    r*   r"   zWeakDep.index  r   r,   c                 $    t           j        j        S r&   )rH   r   r   r3   s    r*   r4   zWeakDep.get_numel  s    w{r,   r-   c                 d    | j         |v r&t          || j                  | j        | j                  S | S r&   )r!   r   r   r   r/   s     r*   r0   zWeakDep.rename  s2    9749-t/@$,OOOr,   c                     dS Nr   r'   r3   s    r*   r6   zWeakDep.numbytes_hint      qr,   c                     dS r   r'   r3   s    r*   r8   zWeakDep.numel_hint  r   r,   c                     dS r   r'   r3   s    r*   r:   zWeakDep.has_unbacked_symbols  r   r,   c                     dS r   r'   r3   s    r*   r<   zWeakDep.is_contiguous  r   r,   NrA   )rC   rD   rE   rF   rG   r   rL   r   rH   rM   r+   r   rI   r"   r4   rN   r0   rO   r6   r8   r:   r<   r'   r,   r*   r   r   {  sU         III GT %* !	EL	!   
 Duz D D D XD5:    d38n     
s    C    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"   .rS   rT   N)rC   rD   rE   rH   rI   rG   r   rM   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&   r0   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   r/   s    `r*   r0   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   r3   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   rR   r"   rO   rH   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   rA   )rC   rD   rE   r   r    rG   r   r   r   r   rH   rI   r   r   rN   rF   r0   r	   r  r  staticmethodr  r  r   r  rL   r  rM   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dfdZdededdfdZ	 ddede	j
        dedee         ddf
dZdede	j
        deddfdZde	j
        deej                 dd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"   rS   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   rH   rI   r   pop)r"   rS   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_prefixrN   r   r   rH   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>6  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>7  s"    UUUtq!aSTfffffr,   c                     g | ]
}|d k    |S r6  r'   r   s     r*   rk   z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>8  s    0001aQr,   c                 ^    i | ]*\  }}|t           j        j                            |          +S r'   r3  r7  s      r*   rh   z6_RecordLoadStoreInner.canonicalize.<locals>.<dictcomp>=  sA     
 
 
1 qw((++
 
 
r,   )	r%  r$  r   r   r   r)  r   itemsr   )r)   r"   r   rS   r   s        r*   canonicalizez"_RecordLoadStoreInner.canonicalize2  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                 v    | j                             t          |g|                     |          R             d S r&   )r!  r  rR   r<  r)   r!   r"   s      r*   loadz_RecordLoadStoreInner.loadE  s:    	$B):):5)A)ABBBCCCCCr,   c                     t          |t                    sJ |                     |t          j        |                     d S r&   )r   rO   r?  rH   r   r>  s      r*   	load_seedz_RecordLoadStoreInner.load_seedH  s<    %%%%%%		$e,,-----r,   valuerU   c                 |    | j                             t          |g|                     |          R d|i           d S )NrU   )r"  r  rR   r<  )r)   r!   r"   rB  rU   s        r*   storez_RecordLoadStoreInner.storeL  sF     	4N$*;*;E*B*BNNNNNOOOOOr,   c                 <    |                      ||d| d           d S )Nzstore_reduction(rY   )rD  )r)   r!   r"   rB  s       r*   store_reductionz%_RecordLoadStoreInner.store_reductionQ  s*    

4 ;5 ; ; ;<<<<<r,   dtypec                 n    | j                             t          |                     |                      d S r&   )r#  r  r   r<  )r)   r"   rG  s      r*   
index_exprz _RecordLoadStoreInner.index_exprT  s2    lD,=,=e,D,DEFFFFFr,   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   rJ  rK  rL  rM  rN  rO  s           r*   	bucketizez_RecordLoadStoreInner.bucketizeW  sX     	
1..///KOOGF1I..///// r,   r&   NN)rC   rD   rE   r   rL   r   r  r	   rO   rH   rI   r   r)  classmethodr   rM   r   r<  rF   r?  rA  r   rD  rF  torchrG  rI  r   rQ  __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&D DUZ DD D D D D.c .# .$ . . . .
 OSP PP %
P36P>FsmP	P P P P
=C =
 =3 =4 = = = =G
 G8EK3H GT G G G G 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   r[  r&  s       r*   r   zRecordLoadStore.__init__h  s?    .!Y
 
 
 	77777r,   )rC   rD   rE   r   rL   r   rU  rV  s   @r*   rX  rX  g  sR        89 8 8$ 8 8 8 8 8 8 8 8 8 8r,   rX  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)r]  r   cntr>   r   s     r*   r   zvar_builder.<locals>.add_vart  s/    &5$s))5566
1r,   )rm   countrH   rI   rM   )r>   r   r`  r   s   ` @@r*   r   r   p  s^    
/

CJ
 u|        
 wr,   argsizesc                 L    t          |           \  }fd|D             }||fS )Nc                 J    g | ]}t          t          |                     S r'   )r   map)rc   rT   r   s     r*   rk   z)index_vars_no_squeeze.<locals>.<listcomp>  s+    %T%T%T4d3w+=+=&>&>%T%T%Tr,   )r   )r>   rb  r   r   r   s       @r*   index_vars_no_squeezerf  |  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   ri  r   squeezerappendr   re  )
r>   rb  ri  r   r   r   r/  rT   new_sizer   s
             r*   index_vars_squeezerm    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   rn  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   )rm  	loop_bodyrq  r   extract_loop_body_with_argsrX  r   set_ops_handlerr[  rm   rn   from_iterabler   r   r!  r"  r#  )ro  r   r>   rn  rb  r   r   rq  innerr	  r   s              r*   extract_read_writesrw    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   )MemoryUsageTyperZ  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   r8  r   repls      r*   rh   z/extract_loop_body_with_args.<locals>.<dictcomp>  s)    RRRDAqJq$//RRRr,   )rr  ry  r~   indexing_from_argsindirect_varsrt   r;  memory_usageLOADr?  buffer_name
index_name	LOAD_SEEDrA  rO   STORErD  rU   STORE_REDUCTIONrF  
INDEX_EXPRrI  	BUCKETIZErQ  )	ro  r   r   r   ry  rv  name_to_indexentryr}  s	           @r*   rs  rs    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   rR  N)r   r  r  r  r   get_defining_opget_sizeget_reduction_sizer^   data	get_readsr   rR   r!   r  r   ro   try_get_bufferextend)r  r  r  r  rT   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,  0  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__8  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   rH   rI   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_varrT   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   rH   rI   r  r  r  r  r  r   rF   )r)   r  rT   r  r  s        r*   indirect_indexingz'FreeSymbolsOpsHandler.indirect_indexingA  sg     i%*ek6I6Q)RSSSSS((...!"7c)nn"7"7"7888r,   r   )N.c                     dS )NrR  r'   )r)   r   s     r*   frexpzFreeSymbolsOpsHandler.frexpL  s    {r,   dtypes
combine_fnr   c                 &    dt          |          z  S Nr&   r^   )r)   r  r  r   s       r*   scanzFreeSymbolsOpsHandler.scanO       V$$r,   stable
descendingc                 &    dt          |          z  S r  r  )r)   r  r   r  r  s        r*   sortzFreeSymbolsOpsHandler.sortT  r  r,   rG  	src_dtypereduction_typerB  c                 :    t          |          }|dk    rd|z  nd S )Nr   r&   )r   )r)   rG  r  r  rB  
num_valuess         r*   	reductionzFreeSymbolsOpsHandler.reductionY  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.maskedc  s+    ~~EEEEE~r,   r   )TT)rC   rD   rE   r   rH   rM   rG   rL   r   rF   r   r   rN   r  r	   rO   rI   r  r  r   r  r  rT  rG  r   r  r   r  r'   r,   r*   r  r  5  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   rt  r   objectr  )ro  r"   r  r#   r  r   handlers          r*   extract_free_symbolsr  i  s     #"""""$0E6??ugD#M22G 	
'"" ^%5t<<  	D			                             
 ?s5   A3
AA3A 	 A3#A 	$A33A7:A7rA   r   )MrJ   dataclassesrm   loggingrecollections.abcr   r   r   typingr   r   r   r	   typing_extensionsr
   unittest.mockr   rH   rT  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   virtualizedr   r   r   	getLoggerrC   rr   compilesearchr   ABCr    	dataclassrR   r   r   r   r   MockHandlerr~   KernelFormatterHandlerrX  rF   r   rI   rM   r   r   rf  rm  rL   rw  rs  r  r,  r  r  r'   r,   r*   <module>r     s}   



          				 8 8 8 8 8 8 8 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 " " " " " "         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# # # # ##' # # #L d###pI pI pI pI pI pI pI $#pIf d###0 0 0 0 0c 0 0 $#0v d###) ) ) ) )c ) ) $#)X d###! ! ! ! ! ! ! $#! J J J J J J J JZg0 g0 g0 g0 g0AM g0 g0 g0T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*+' ' ' ' '\ 	- --
tEJ
 - - 	-
 - - - -`@"+@"
8D$%xUZ0@'AAB@" @" @" @"F    
1 1 1 1 1N 1 1 1n .2	 cEJ Xej)* 	
      r,   