
    B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 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          j.        Z/ G d de j0                  Z1 ej2        d           G d de1                      Z3 ej2        d           G d de1                      Z4 ej2        d           G d de1                      Z5 ej2        d           G d d                      Z6ej2         G d d                      Z7 G d  d!e(j8                  Z9 G d" d#e(j:                  Z;d$e<d%e=e%eej>        gej?        f         f         fd&Z@d'eej>                 d$e<d%e=eAeAej?                          e%f         fd(ZBd)d*d'eej>                 d$e<d%e=eAeej>                          e%f         fd+ZCd,d)d-d.d/ed0e
f         d'eej>                 d1eDd$e<d2eeAej>                          d%e7fd3ZE	 dCd/e
d4eAeAej>                          d5e%d1eDd%e9f
d6ZFd7d8d%e=eAej>                 dz  eAej>                 dz  f         fd9ZGd%e<fd:ZH G d; d<e          ZI	 	 dDd/ed0e
f         d=eej>                 d>eej>                 dz  d?eDd%eej?                 f
d@ZJ G dA dBe          ZKdS )E    N)CallableIterableSequence)AnyTypeVar)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     _/var/www/html/Carbon-Document/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   r/   r*   c                     d S r$   r%   r1   s    r(   numbytes_hintzDep.numbytes_hint7   r/   r*   c                     d S r$   r%   r1   s    r(   
numel_hintzDep.numel_hint;   r/   r*   c                     d S r$   r%   r1   s    r(   has_unbacked_symbolszDep.has_unbacked_symbols?   r/   r*   c                     d S r$   r%   r1   s    r(   is_contiguouszDep.is_contiguousC   r/   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   r.   r2   intr4   r6   r8   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dz  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         dz  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    rR   rQ   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())rS   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$   )lenrQ   r1   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%   )ra   irb   s      r(   
<dictcomp>z8MemoryDep.decide_loop_order_to_match.<locals>.<dictcomp>   s    DDDDAq1aDDDr*   c                      g | ]
}|         S r%   r%   )ra   rb   stride_to_indexs     r(   
<listcomp>z8MemoryDep.decide_loop_order_to_match.<locals>.<listcomp>   s    ;;;#;;;r*   )r]   r\   r    r   any	itertoolschainrR   r   graphsizevarsstride_hintsrQ   r   logdebug	enumeraterange)r'   r^   self_stridesother_stridesorderrh   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    rL   fromkeysrQ   r1   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.
        )rP   r   _RecordLoadStoreInner
_normalizer    rX   rS   r1   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%   ra   xadd_vars     r(   ri   z9MemoryDep.normalize_with_stride_order.<locals>.<listcomp>   s!    BBBBBBr*   )torch._inductorr   r   rm   rn   ro   r    rQ   sortedrs   r\   __getitem__same_reorderrR   _simplify_loopsr   var_builderrL   zipr   rF   expandrP   r   tuplekeysvalues)r'   r<   r   stridesrv   stride_reordersizesrQ   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, ...})rL   r   rQ   rR   r1   s    r(   rX   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    rQ   rR   rS   )rP   r   r   rm   rn   simplify_with_rangesr    rX   rQ   rR   rS   r1   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   rm   r2   r   r   r    r   rF   SOner   rQ   rR   )r'   numelvarsvarrR   s        r(   r2   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)rQ   rR   rS   )r   rP   r    rQ   rR   rS   r-   s     r(   r.   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   rm   rn   optimization_hintr2   r   	get_dtyper   NotImplementedErrorr1   s    r(   r4   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   rm   rn   r   r2   r   r1   s    r(   r6   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   r2   r1   s    r(   r8   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    rF   IntegerrK   rQ   r1   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\   rQ   r   r    rF   AddargsMulrM   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    rF   rK   rQ   r   rM   r   r1   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   ra   vs     r(   rc   z(MemoryDep.is_indirect.<locals>.<genexpr><  s,      HH1;qv&&HHHHHHr*   )rj   r    r   r1   s    r(   r   zMemoryDep.is_indirect;  s$    HH
0GHHHHHHr*   r?   )r"   rP   r@   T)"rA   rB   rC   rD   rE   rF   rG   r   rK   rS   rJ   r   r)   rZ   propertyrM   r]   listrw   rz   r~   r>   rL   rX   r   r2   r.   r4   r6   r8   r:   r   r   r   r%   r*   r(   rP   rP   K   s         III:U\3&''''

C
    D#* %*
 
!
	EL	!
 
 
 
T# T T T T ## # # # X#7 7S	D@P 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*   rP   c                       e Zd ZU eed<   dZedz  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   NrS   r"   c                      t          d          )NzStarDep does not have an indexr   r1   s    r(   r    zStarDep.indexF       ""BCCCr*   c                 J    t           j                            | j                  S r$   )r   rm   r2   r   r1   s    r(   r2   zStarDep.get_numelK  s    w  +++r*   r+   c                 X    | j         |v r t          || j                  | j                  S | S r$   )r   r   rS   r-   s     r(   r.   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   r1   s    r(   r4   zStarDep.numbytes_hintX  r   r   c                     	 t           j        j                            |                                 d          S # t
          $ r Y dS w xY wr   r   r1   s    r(   r6   zStarDep.numel_hint`  r   r   c                 f    t          t          |                                                     dk    S r   r   r1   s    r(   r8   zStarDep.has_unbacked_symbolsf  r   r*   c                     dS NFr%   r1   s    r(   r:   zStarDep.is_contiguousi      ur*   c                     dS r   r%   r1   s    r(   r   zStarDep.is_scalarl  r   r*   c                     dS r   r%   r1   s    r(   r   zStarDep.is_indirecto  r   r*   r?   )rA   rB   rC   rD   rE   rS   r   rF   rG   r    r2   rL   r.   rJ   r   rK   r)   rM   r4   r6   r8   r:   r   r   r%   r*   r(   r   r   ?  s         IIID#* 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   r1   s    r(   r    zWeakDep.index  r   r*   c                 $    t           j        j        S r$   )rF   r   r   r1   s    r(   r2   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(   r.   zWeakDep.rename  s2    9749-t/@$,OOOr*   c                     dS Nr   r%   r1   s    r(   r4   zWeakDep.numbytes_hint      qr*   c                     dS r   r%   r1   s    r(   r6   zWeakDep.numel_hint  r   r*   c                     dS r   r%   r1   s    r(   r8   zWeakDep.has_unbacked_symbols  r   r*   c                     dS r   r%   r1   s    r(   r:   zWeakDep.is_contiguous  r   r*   Nr?   )rA   rB   rC   rD   rE   r   rJ   r   rF   rK   r)   r   rG   r    r2   rL   r.   rM   r4   r6   r8   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    .rQ   rR   N)rA   rB   rC   rF   rG   rE   r   rK   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	j
                 dz  ed<   dZedz  ed<   deeef         dd fd	Zd
eee         z  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$   r.   ra   depr+   s     r(   rc   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(   rc   z$ReadWrites.rename.<locals>.<genexpr>  s/      BBsszz'**BBBBBBr*   )r   r   r   r   r   r   r   r-   s    `r(   r.   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   ra   rws     r(   ri   z)ReadWrites.merge_list.<locals>.<listcomp>  s    'H'H'Hb	'H'H'Hr*   c                     g | ]	}|j         
S r%   )r   r  s     r(   ri   z)ReadWrites.merge_list.<locals>.<listcomp>  s    &F&F&FBrx&F&F&Fr*   c                     g | ]	}|j         
S r%   )r   r  s     r(   ri   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$   )rk   rl   r   r   r1   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   rP   r    rM   rF   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?   )rA   rB   rC   r   r   rE   r   r   r   rF   rG   r   r   rL   rD   r.   r   r  staticmethodr  r  r   r  rJ   r  rK   r)   r%   r*   r(   r   r     s        c?sOL))))*.JUZ 4'...#'J	D '''
d38n 
 
 
 
 


S:c?2 

| 

 

 

 

? ? ? ? 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j	        z  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dz  ddf
dZdedej	        deddfdZdej	        dej        dz  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j	        f         dz  dedz  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    rQ   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   rF   rG   r   pop)r    rQ   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(   ri   z4_RecordLoadStoreInner._normalize.<locals>.<listcomp>*  s!    3R3R3R1GGAJJ3R3R3Rr*   )r   r   r   r   rm   rn   r   r   r   canonicalization_prefixrL   r   r   rF   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   rm   rn   simplify)ra   r   s     r(   ri   z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>6  s+    UUUaQW%..q11UUUr*   c                 $    g | ]\  }}|d k    |S r   r%   ra   kr   s      r(   ri   z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>7  s"    UUUtq!aSTfffffr*   c                     g | ]
}|d k    |S r4  r%   r   s     r(   ri   z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>8  s    0001aQr*   c                 ^    i | ]*\  }}|t           j        j                            |          +S r%   r1  r5  s      r(   rf   z6_RecordLoadStoreInner.canonicalize.<locals>.<dictcomp>=  sA     
 
 
1 qw((++
 
 
r*   )	r#  r"  r   r   r   r'  r   itemsr}   )r'   r    r   rQ   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  rP   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   rM   r=  rF   r   r<  s      r(   	load_seedz_RecordLoadStoreInner.load_seedH  s<    %%%%%%		$e,,-----r*   valuerS   c                 |    | j                             t          |g|                     |          R d|i           d S )NrS   )r   r  rP   r:  )r'   r   r    r@  rS   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(rW   )rB  )r'   r   r    r@  s       r(   store_reductionz%_RecordLoadStoreInner.store_reductionQ  s*    

4 ;5 ; ; ;<<<<<r*   dtypec                 n    | j                             t          |                     |                      d S r$   )r!  r  r   r:  )r'   r    rE  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   rH  rI  rJ  rK  rL  rM  s           r(   	bucketizez_RecordLoadStoreInner.bucketizeW  sX     	
1..///KOOGF1I..///// r*   r$   NN)rA   rB   rC   r   rJ   r  r  rM   rF   rG   r   r'  classmethodr   rK   r}   r:  rD   r=  r?  rB  rD  torchrE  rG  r   rO  __classcell__r$  s   @r(   r|   r|     s       19 1 1$ 1 1 1 1 1 1 UZ
# 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 .# .$ . . . .
 LPP PP %
P36P>ADjP	P P P P
=C =
 =3 =4 = = = =G
 G5;3E G$ G G G G 15#'0 00 #uz5:uzAB0 	0
 0 0 c5:o&-0 D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~   rY  r$  s       r(   r  zRecordLoadStore.__init__h  s?    .!Y
 
 
 	77777r*   )rA   rB   rC   r   rJ   r  rS  rT  s   @r(   rV  rV  g  sR        89 8 8$ 8 8 8 8 8 8 8 8 8 8r*   rV  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*   )rk   countrF   rG   rK   )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)ra   rR   r   s     r(   ri   z)index_vars_no_squeeze.<locals>.<listcomp>  s+    %T%T%T4d3w+=+=&>&>%T%T%Tr*   )r   )r<   r`  r   r   r   s       @r(   index_vars_no_squeezerd  |  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   rg  r   squeezerappendr   rc  )
r<   r`  rg  r   r   r   r-  rR   new_sizer   s
             r(   index_vars_squeezerk    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~   rl  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~   )rk  	loop_bodyro  r   extract_loop_body_with_argsrV  r   set_ops_handlerrY  rk   rl   from_iterabler   r   r  r   r!  )rm  r~   r<   rl  r`  r   r   ro  innerr  r   s              r(   extract_read_writesru    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   )MemoryUsageTyperX  c                 J    i | ] \  }}|t          t          j        |          !S r%   )r   r   TMP)ra   re   r   s      r(   rf   z/extract_loop_body_with_args.<locals>.<dictcomp>  s*    TTT1;tx++TTTr*   c                 8    i | ]\  }}|t          |          S r%   )r   )ra   r6  r   repls      r(   rf   z/extract_loop_body_with_args.<locals>.<dictcomp>  s)    RRRDAqJq$//RRRr*   )rp  rw  r|   indexing_from_argsindirect_varsrr   r9  memory_usageLOADr=  buffer_name
index_name	LOAD_SEEDr?  rM   STORErB  rS   STORE_REDUCTIONrD  
INDEX_EXPRrG  	BUCKETIZErO  )	rm  r   r   r~   rw  rt  name_to_indexentryr{  s	           @r(   rq  rq    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   rP  N)r   r  r  r  r   get_defining_opget_sizeget_reduction_sizer\   data	get_readsr   rP   r   r  r   rm   try_get_bufferextend)r  r  r  r  rR   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 |
   ""E.2N$(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j        z  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de
d         z  dde
d         z  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$   )rk   rl   r   r   rF   rG   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_varrR   checkwrap_negc                     t          |t          j        t          j        j        j        f          rJ | xj        |                     |          z  c_        t          dt          |           d          S )N(rW   )
r   rF   rG   r  r  r  r  r  r   rD   )r'   r  rR   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 )NrP  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*   rE  	src_dtypereduction_typer@  c                 :    t          |          }|dk    rd|z  nd S )Nr   r$   )r   )r'   rE  r  r  r@  
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)rA   rB   rC   r   rF   rK   rE   rJ   r  rD   r   r   rL   r  rM   rG   r  r  r   r  r  rR  rE  r   r  r   r  r%   r*   r(   r  r  5  s9        %%%%T Td Td T T T T4S 4c3h 4c3h 4TW 4 4 4 4 	9 	9	9 EJ	9 		9
 	9 
	9 	9 	9 	9s uY/    %%'*%4<SM%	y	% % % %
%%#+C=%:=%KN%	y	% % % %
@{@ ;@ &	@
 eI&&@ 
i 	 @ @ @ @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   rr  r	   objectr  )rm  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c                   x    e Zd ZU ee         ed<   dej        ddfdZdede	e
df         d	eee
f         de
fd
ZdS )SymbolUsageCollectorOpsHandlerusagessymbolr"   Nc                 :    || _         t                      | _        d S r$   )r  r   r  )r'   r  s     r(   r  z'SymbolUsageCollectorOpsHandler.__init__  s     llr*   r   r   .r  c                     | j         |v p| j         |                                v }|r| j                            |           d S d S r$   )r  r   r  r  )r'   r   r   r  	used_heres        r(   r  z'SymbolUsageCollectorOpsHandler._default  sN    K4'I4;&--//+I	 	"KOOD!!!!!	" 	"r*   )rA   rB   rC   r   rD   rE   rF   rK   r  r   r   rL   r  r%   r*   r(   r  r  }  s         sO#u| # # # # #"S "c3h "c3h "TW " " " " " "r*   r  r?   r   )LrH   dataclassesrk   loggingrecollections.abcr   r   r   typingr   r   typing_extensionsr   unittest.mockr	   rF   rR  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   	getLoggerrA   rp   compilesearchr   ABCr   	dataclassrP   r   r   r   r   MockHandlerr|   KernelFormatterHandlerrV  rD   r   rG   rK   r   r   rd  rk  rJ   ru  rq  r  r*  r  r  r  r%   r*   r(   <module>r     s   



          				 8 8 8 8 8 8 8 8 8 8         " " " " " "         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
 - - 	-
 - - - -`@"+@"
4
d"D$4t$;;<@" @" @" @"F    
1 1 1 1 1N 1 1 1n +/	 cEJ UZ 4' 	
    (
" 
" 
" 
" 
"^ 
" 
" 
" 
" 
"r*   