
    קgg              	          d dl Z 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m	Z	m
Z
mZmZ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 ddlmZ ddlmZmZmZmZmZmZ dd	lm Z m!Z!m"Z"  ej#        e$          Z% ej&        d
          j'        Z( G d de j)                  Z* ej+        d           G d de*                      Z, ej+        d           G d de*                      Z- ej+        d           G d de*                      Z. ej+        d           G d d                      Z/ej+         G d d                      Z0 G d de"j1                  Z2 G d de"j3                  Z4de5deeeej6        gej7        f         f         fdZ8d eej6        d!f         de5fd"Z9d#d$d eej6        d!f         de5fd%Z:d&d#d'd(d)ed!ef         d eej6        d!f         d*e;de5fd+Z<d,d-dee
e	ej6                          e
e	ej6                          f         fd.Z=d/ Z> G d0 d1          Z?d2e?de d         fd3Z@d5d)ed!ef         fd4ZAdS )6    N)AnyCallableDictListOptionalSetTupleUnion)patch)free_unbacked_symbols)
OrderedSet   )index_prevent_reordering)get_dtype_sizereduction_num_outputssympy_index_symbol	sympy_str
sympy_subs	VarRanges)
OpsHandlerReductionTypeVzindirect|tmpc                      e Zd ZU eed<   ej        ed<   ej        de	eef         dd fd            Z
ej        dej        fd            Zej        d             Zej        defd            Zej        defd	            ZddZdS )Depnameindexrenamesreturnc                     d S N selfr   s     X/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/_inductor/dependencies.pyrenamez
Dep.rename%           c                     d S r    r!   r#   s    r$   	get_numelzDep.get_numel)   r&   r'   c                     d S r    r!   r)   s    r$   numbytes_hintzDep.numbytes_hint-   r&   r'   c                     d S r    r!   r)   s    r$   has_unbacked_symbolszDep.has_unbacked_symbols1   r&   r'   c                     d S r    r!   r)   s    r$   is_contiguouszDep.is_contiguous5   r&   r'   tc                     | S r    r!   )r#   prefixs     r$   normalize_with_stride_orderzDep.normalize_with_stride_order9   s    r'   Nr1   )__name__
__module____qualname__str__annotations__sympyExprabcabstractmethodr   r%   r*   r,   boolr.   r0   r4   r!   r'   r$   r   r   !   s        
III:d38n      	5:     	   	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efd	Zed
             Zd Zd ZddZddZedeej        ej        f         fd            Zdej        fdZdeeef         dd fdZd Zd ZdefdZddefdZdefdZdefdZdS )	MemoryDepr   r   .	var_namessizeNmoder   c           	      H    d| j         d| j         d| j         d| j         d	S )Nz
MemoryDep(, ))r   r   rangesrE   r)   s    r$   __repr__zMemoryDep.__repr__E   s3    TDITT4:TTTT	TTTTr'   c                 *    t          | j                  S r    )lenrC   r)   s    r$   num_varszMemoryDep.num_varsH   s    4>"""r'   c                    | 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             }g }|D ]}|                    ||                    t          |          t          t%          d| j                             k    sJ |S )zD
        Can return None if not able to decide loop orders.
        Nc              3   .   K   | ]}|d k    p|dk    V  dS )r   r   Nr!   ).0ss     r$   	<genexpr>z7MemoryDep.decide_loop_order_to_match.<locals>.<genexpr>a   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!   )rP   irQ   s      r$   
<dictcomp>z8MemoryDep.decide_loop_order_to_match.<locals>.<dictcomp>   s    DDDDAq1aDDDr'   r   )rM   rL   r   free_symbolsany	itertoolschainrD   r   graphsizevarsstride_hintsrC   setlogdebug	enumerateappendrange)r#   otherself_stridesother_stridesstride_to_indexorderrQ   s          r$   decide_loop_order_to_matchz$MemoryDep.decide_loop_order_to_matchL   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 s<  !!S%6%666#;
 ;
;  ;  IIs   4
 |M 2 2224DDIl,C,CDDD 	- 	-ALL+,,,,5zzSq$-!8!8999999r'   c                 h    t          | j        t                              | j        d                    S )zF
        Return the offset by setting every variable to be 0.
        r   )r   r   dictfromkeysrC   r)   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.
        )rB   r   _RecordLoadStoreInner
_normalizer   rI   rE   r)   s    r$   	normalizezMemoryDep.normalize   sH     I
"--dj$+FF
 I
 
 
 	
r'   r1   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!   rP   xadd_vars     r$   
<listcomp>z9MemoryDep.normalize_with_stride_order.<locals>.<listcomp>   s!    BBBBBBr'   )torch._inductorrr   r   rZ   r[   r\   r   rC   sortedrb   rL   __getitem__same_reorderrD   _simplify_loopsr   var_builderrj   zipr   r;   expandrB   r   tuplekeysvalues)r#   r3   rr   stridesrg   stride_reordersizesrC   new_reordered_sizesnew_reordered_var_namesnew_simplified_sizesreindexprune
var_rangesreplacement	new_indexoutrx   s                    @r$   r4   z%MemoryDep.normalize_with_stride_order   s    	'&&&&&'"//
DNKK uS\\**0CTRRR//	N	,nU33"0.";";/0w/?/O/O#$57J 0
 0
,gu *&11
G'BBBB-ABBBCC 
 
 u|DJ77EE		9eJOO4E4E.F.FjN_N_NaNaHbHbcc
r'   c                 P    t          t          | j        | j                            S )z{c0: 128, c1: 512, ...})rj   r   rC   rD   r)   s    r$   rI   zMemoryDep.ranges   s      C	22333r'   c                 $   |                                  r%t          j                            | j                  }nVt          | j        j                  }t          j	        d          }t          | j        | j                  D ]\  }}||v r||z  }|S Nr   )is_indirectr   rZ   r*   r   r   r   rV   r;   Integerr   rC   rD   )r#   numelvarsvarrD   s        r$   r*   zMemoryDep.get_numel   s     	)G%%di00EE,6tz7N,O,ODM!$$E ;; ) )	T$;;!DLEr'   r   c                 ~    | j         |v r3t          || j                  | j        | j        | j        | j                  S | S )N)rC   rD   rE   )r   rB   r   rC   rD   rE   r"   s     r$   r%   zMemoryDep.rename   sK    9	"
.YY    r'   c                     t           j        j                            |                                           t          t           j                            | j                            z  S r    r   rZ   r[   	size_hintr*   r   	get_dtyper   r)   s    r$   r,   zMemoryDep.numbytes_hint   M    w))$..*:*:;;nGdi((?
 ?
 
 	
r'   c                 f    t          t          |                                                     dk    S Nr   rL   r   r*   r)   s    r$   r.   zMemoryDep.has_unbacked_symbols   (    ()9)9::;;a??r'   c                 \    t          | j        t          j                  o| j        | j        v S r    )
isinstancer   r;   SymbolrC   r)   s    r$   r0   zMemoryDep.is_contiguous   s$    $*el33T
dn8TTr'   Tc                    t          | j                  dk    rdS t          | j        t          j                  r| j        j        n| j        g}| j        d         }|D ]}||u r dS t          |t          j                  rgt          |j                  dk    rO|j        d         |u 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   T   r   F)
rL   rC   r   r   r;   AddargsMulintr   )r#   result_for_complex_expression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   r;   r   rC   r   r   r   r)   s    r$   	is_scalarzMemoryDep.is_scalar  sU    dj%,// 	O:T^3ND<L<L<N<N8NN$*sEM&:;;;r'   c                 H    t          d | j        j        D                       S )Nc              3   >   K   | ]}t          |j                  V  d S r    )r   r   rP   vs     r$   rR   z(MemoryDep.is_indirect.<locals>.<genexpr>  s,      HH1;qv&&HHHHHHr'   )rW   r   rV   r)   s    r$   r   zMemoryDep.is_indirect  s$    HH
0GHHHHHHr'   )r   rB   r5   T)r6   r7   r8   r9   r:   r;   r<   r	   r   rE   r   rJ   propertyrM   rh   rl   rp   r4   r   rI   r*   r%   r,   r.   r?   r0   r   r   r   r!   r'   r$   rB   rB   =   s        
III:U\3&''''

C
    D(3-U# U U U U # # X#9 9 9vH H H

 

 

 

( ( ( (T 4U\5:56 4 4 4 X4	5: 	 	 	 		d38n 	 	 	 	 	
 
 

@ @ @Ut U U U U- -$ - - - -:<4 < < < <
IT I I I I I Ir'   rB   c                       e Zd ZU eed<   dZee         ed<   ed             Zde	j
        fdZdeeef         dd fdZd	 Zd
 ZdefdZdefdZdefdZdS )StarDepr   NrE   c                      t          d          )NzStarDep does not have an indexNotImplementedErrorr)   s    r$   r   zStarDep.index      !"BCCCr'   r   c                 J    t           j                            | j                  S r    )r   rZ   r*   r   r)   s    r$   r*   zStarDep.get_numel  s    w  +++r'   r   c                 X    | j         |v r t          || j                  | j                  S | S r    )r   r   rE   r"   s     r$   r%   zStarDep.rename  s-    9749-ty999r'   c                     t           j        j                            |                                           t          t           j                            | j                            z  S r    r   r)   s    r$   r,   zStarDep.numbytes_hint!  r   r'   c                 f    t          t          |                                                     dk    S r   r   r)   s    r$   r.   zStarDep.has_unbacked_symbols&  r   r'   c                     dS NFr!   r)   s    r$   r0   zStarDep.is_contiguous)      ur'   c                     dS r   r!   r)   s    r$   r   zStarDep.is_scalar,  r   r'   c                     dS r   r!   r)   s    r$   r   zStarDep.is_indirect/  r   r'   )r6   r7   r8   r9   r:   rE   r   r   r   r;   r<   r*   r   r%   r,   r.   r?   r0   r   r   r!   r'   r$   r   r     s
        
IIID(3- D D XD,5: , , , ,d38n     

 
 

@ @ @t    4    T      r'   r   c                       e Zd ZU eed<   eed<   ed             Zdej        fdZ	de
eef         dd fdZd Zd	 Zdefd
ZdS )WeakDepr   mutating_bufc                      t          d          )NzWeakDep does not have an indexr   r)   s    r$   r   zWeakDep.indexB  r   r'   r   c                 *    t          j        d          S r   )r;   r   r)   s    r$   r*   zWeakDep.get_numelF  s    }Qr'   r   c                 X    | j         |v r t          || j                  | j                  S | S r    )r   r   r   r"   s     r$   r%   zWeakDep.renameI  s.    9749-t/@AAAr'   c                     dS r   r!   r)   s    r$   r,   zWeakDep.numbytes_hintN  s    qr'   c                     dS r   r!   r)   s    r$   r.   zWeakDep.has_unbacked_symbolsQ  r   r'   c                     dS r   r!   r)   s    r$   r0   zWeakDep.is_contiguousT  r   r'   N)r6   r7   r8   r9   r:   r   r   r;   r<   r*   r   r%   r,   r.   r?   r0   r!   r'   r$   r   r   ;  s          IIID D XD 5:        d38n     
    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   .rC   rD   N)r6   r7   r8   r;   r<   r:   r	   r   r!   r'   r$   r   r   X  sO         :U\3&''''

C
      r'   r   c                   6   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j        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          fd            Zd Zd Zd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%   rP   depr   s     r$   rR   z$ReadWrites.rename.<locals>.<genexpr>i  s/      AAsszz'**AAAAAAr'   c              3   B   K   | ]}|                               V  d S r    r   r   s     r$   rR   z$ReadWrites.rename.<locals>.<genexpr>j  s/      BBsszz'**BBBBBBr'   )r   r   r   r   r   r   r   r"   s    `r$   r%   zReadWrites.renameg  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|h}t	          t          j        | j        |          | j        | j	        | j
        | j                  S r    )r   r   r   r]   r   r   unionr   r   r   r   r   )r#   r   s     r$   	with_readzReadWrites.with_readp  sq    ##677777#s## 	%CTZ--KOO
 
 	
r'   rc   c                     t          j        | j        |j                  }t          j        | j        |j                  }t          j        | j        |j                  }t          ||z
  ||          S r    )r   r   r   r   r   r   )r#   rc   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   rP   rws     r$   ry   z)ReadWrites.merge_list.<locals>.<listcomp>  s    'H'H'Hb	'H'H'Hr'   c                     g | ]	}|j         
S r!   )r   r   s     r$   ry   z)ReadWrites.merge_list.<locals>.<listcomp>  s    &F&F&FBrx&F&F&Fr'   c                     g | ]	}|j         
S r!   )r   r   s     r$   ry   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'   c                 `    t          | j        |z
  | j        | j        | j        | j                  S r    )r   r   r   r   r   r   )r#   	rem_readss     r$   remove_readszReadWrites.remove_reads  s3    J"KOO
 
 	
r'   c                 @    t          j        | j        | j                  S r    )rX   rY   r   r   r)   s    r$   reads_and_writeszReadWrites.reads_and_writes  s    tz4;777r'   Tc                     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   rB   r   r   r;   r   addr   )r#   ignore_integer_indexnamesr   s       r$   buffer_nameszReadWrites.buffer_names  s     ",((** 	$ 	$Cc9-- ' $z	C/0 0 $ 		#(###r'   )rc   r   r   )r6   r7   r8   r   r   r:   r   r   r   r   r;   r<   r   r   typingr   r9   r%   r
   r   r   r   staticmethodr   r   r   r   r!   r'   r$   r   r   _  sK        c?sOL))))-1Jej)*111&*J#***
fk#s(3 
 
 
 
 


U3C=1 

l 

 

 

 

? ? ? ? B\ 2 B B B \B
 
 
8 8 8     r'   r   c                       e Zd Zdededdf fdZed             Zede	j
        dedee	j
        ee	j        df         ee	j
        df         f         fd	            Zde	j
        dee	j
        ee	j        df         ee	j
        df         f         fd
Zdede	j
        defdZdedefdZddede	j
        dedefdZdedefdZde	j
        defdZdede	j
        dej        defdZ xZS )rn   r   rp   r   Nc                     t                                                       t                      | _        t                      | _        t                      | _        || _        || _        d S r    )super__init__r   _reads_writes_index_exprs_var_ranges_should_normalize)r#   r   rp   	__class__s      r$   r   z_RecordLoadStoreInner.__init__  sQ    '1||.8ll6@ll&0'0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   r;   r<   rV   pop)r   rC   r   rV   s       r$   drop_unused_symbolsz)_RecordLoadStoreInner.drop_unused_symbols  s     %,, 	F) 	IbM==MMOOOIIKKK  	IbM==== 	 	 	 	==r'   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!   rv   s     r$   ry   z4_RecordLoadStoreInner._normalize.<locals>.<listcomp>  s!    3R3R3R1GGAJJ3R3R3Rr'   )r   r   r   r   rZ   r[   r~   r   r   canonicalization_prefixrj   r   r   r;   r   r  )clsr   r   
index_varsr   	new_sizesr   r   new_varsr   rx   s             @r$   ro   z _RecordLoadStoreInner._normalize  s"    *z(()
j''))**$%G$4$D$D$eWj%@@%
 %
!	7E ((?(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   rZ   r[   simplify)rP   rw   s     r$   ry   z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>  s+    UUUaQW%..q11UUUr'   c                 $    g | ]\  }}|d k    |S r   r!   rP   kr   s      r$   ry   z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>  s"    UUUtq!aSTfffffr'   c                     g | ]
}|d k    |S r  r!   r   s     r$   ry   z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>  s    0001aQr'   c                 ^    i | ]*\  }}|t           j        j                            |          +S r!   r  r  s      r$   rU   z6_RecordLoadStoreInner.canonicalize.<locals>.<dictcomp>  sA     
 
 
1 qw((++
 
 
r'   )	r  r  r   r   r   r  r   itemsro   )r#   r   r   rC   r   s        r$   canonicalizez"_RecordLoadStoreInner.canonicalize  s     % 	9UU4;K;R;R;T;TUUUEUUs4+;+@+@+B+BE'J'JUUUI00000E$$UIu===%	**E%LL88
 
(..00
 
 

 uj111r'   r   c                     | j                             t          |g|                     |          R             d| dt	          |           dS )Nzload(rG   rH   )r   r   rB   r  r   r#   r   r   s      r$   loadz_RecordLoadStoreInner.load  sU    	$B):):5)A)ABBBCCC2t22y//2222r'   c                     t          |t                    sJ |                     |t          j        |                    S r    )r   r   r  r;   r   r  s      r$   	load_seedz_RecordLoadStoreInner.load_seed  s6    %%%%%%yyu}U33444r'   valuec           	          | j                             t          |g|                     |          R d|i           d| dt	          |           d| d| d	S )NrE   zstore(rG   rH   )r  r   rB   r  r   )r#   r   r   r!  rE   s        r$   storez_RecordLoadStoreInner.store  so    4N$*;*;E*B*BNNNNNOOODDD	% 0 0DDEDDTDDDDr'   c                 8    |                      ||d| d          S )Nzstore_reduction(rH   )r#  )r#   r   r   r!  s       r$   store_reductionz%_RecordLoadStoreInner.store_reduction  s$    zz$'B%'B'B'BCCCr'   c                     | j                             t          |                     |                      dt	          |           d| dS )Nzindex_expr(rG   rH   )r  r   r   r  r   )r#   r   dtypes      r$   
index_exprz _RecordLoadStoreInner.index_expr  sM    lD,=,=e,D,DEFFF9Yu--999999r'   offsets_nameoffsets_sizeindexing_dtyperightc                     | j                             t          |                     d| d| dt          |           d| d| dS )Nz
bucketize(rG   rH   )r   r   r   r   )r#   r   r)  r*  r+  r,  s         r$   	bucketizez_RecordLoadStoreInner.bucketize  s[     	--...kFkklkki6M6MkkQ_kkchkkkkr'   r    )r6   r7   r8   r   r?   r   r   r  classmethodr;   r<   r	   r   ro   r  r9   r  r   r   r#  r%  r(  torchr'  r.  __classcell__r  s   @r$   rn   rn     s<       19 1 1$ 1 1 1 1 1 1   \ 8J8,58	uz5s!23U5:s?5KK	L8 8 8 [822Z2	uz5s!23U5:s?5KK	L2 2 2 2&3 3UZ 3C 3 3 3 35c 5# 5 5 5 5E E# Eej E EC E E E EDC D# D D D D:
 :c : : : :	l 	l j		l
 	l 	l 	l 	l 	l 	l 	l 	l 	lr'   rn   c                   ,     e Zd Zdededdf fdZ xZS )RecordLoadStorer   rp   r   Nc                 n    t          ||          }t                                          |           d S )Nr   rp   )parent_handler)rn   r   r   )r#   r   rp   r7  r  s       r$   r   zRecordLoadStore.__init__  s?    .!Y
 
 
 	77777r'   )r6   r7   r8   r   r?   r   r1  r2  s   @r$   r4  r4    sR        89 8 8$ 8 8 8 8 8 8 8 8 8 8r'   r4  r3   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)r9  r   cntr3   r   s     r$   rx   zvar_builder.<locals>.add_var  s/    &5$s))5566
1r'   )rX   countr;   r<   r   )r3   rx   r<  r   s   ` @@r$   r   r     s^    
/

CJ
 u|        
 wr'   argsizes.c           	          t          |           \  }}g }|D ]2}|                    t          t          ||                               3||fS r    )r   ra   listmap)r3   r>  r   rx   r   rD   s         r$   index_vars_no_squeezerB    sZ    %f--J%'D . .DWd++,,----r'   d)r3   c                    ddl m} t          |           \  }}g }g }|D ]h}|                    |          \  }}	|                    |           |                     |	t          t          ||                                         i||fS )Nr   )SqueezeView)rr   rE  r   squeezerra   r@  rA  )
r3   r>  rE  r   rx   r   r  rD   new_sizer   s
             r$   index_vars_squeezerH  $  s    %f--J#%D(*I ; ;'0066'"""GGDWh!7!78899::::r'   Fr!   )rp   r3   hidden_argsfnrp   c                ~   t          |d|i\  }}ddlm}m} t	          | |          rt          ||          }	|                     g ||          }
| 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        |
|j                 d d            ,nNt7          ||          }t9          j        |          5   | g ||R   d d d            n# 1 swxY w Y   |j        }	|rg }n!g t>          j         !                    |          }tE          tG          |	j$                  tG          |	j%                  |	j&        ||          S )Nr3   r   )LoopBodyMemoryUsageTyper6  c                 D    i | ]\  }}|t          j        d |           S )tmp)r;   r   )rP   rT   r   s      r$   rU   z'extract_read_writes.<locals>.<dictcomp>B  s.    WWW41aAu|I!II..WWWr'   c                 8    i | ]\  }}|t          |          S r!   )r   )rP   r  r   repls      r$   rU   z'extract_read_writes.<locals>.<dictcomp>C  s)    VVV1Q
1d 3 3VVVr'   )rp   )'rH  	loop_bodyrL  rM  r   rn   indexing_from_argsindirect_varsr`   r  memory_usageLOADr  buffer_name
index_name	LOAD_SEEDr   r   STOREr#  rE   STORE_REDUCTIONr%  
INDEX_EXPRr(  	BUCKETIZEr.  r4  r   set_ops_handlerr7  rX   rY   from_iterabler   r   r   r  r  )rJ  rp   r3   rI  r>  r   r   rL  rM  innername_to_indexentryr   r   rQ  s                 @r$   extract_read_writesrc  1  sg    *8CFCCD*44444444"h  "%yQQQ--.C.C{.CDD 	WWW9REU;V;VWWWDVVVV@S@S@U@UVVVM__%9: 	K 	KEJJu(-8H*IJJJJ__%>? 	U 	UEOOE-s=AQ3R/S/STTTT__%:; 	 	EKK!=1A#BD%*    __%DE 	 	E!!!=1A#BD    __%?@ 	D 	DE]5+;<dCCCC__%>? 	 	EOOe'u7G)H$PT   	 Z9===r"" 	$ 	$B##{####	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$! <

;y44T::;
5<  5=!!  s   4III
input_nodeztorch._inductor.ir.TensorBoxc                 6   ddl m}m} t          | j        |          rA|                                 }|                                 }t          |          dk    r||fS dS t          | j        j        |          sdS |                                 }d}d}|t          |          dk    rmt                      }g }|D ]7}t          |t                    s|j        |v r#|                    |j                   t          j                            |j                  }	|	d|	                                }
|
{t          |
|          rt          |
                                          dk    r`|)|
                                }|
                                }||
                                k    s||
                                k    r dS |                    |
                                           9||k    r||fS |}|t          |          dk    m||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Loopsr   NNN)rr   rf  rg  r   dataget_sizeget_reduction_sizerL   	get_readsr   rB   r   r   r   rZ   try_get_bufferget_defining_opextend)rd  rf  rg  rD   reduction_sizer   seen	new_readsreadbufferops              r$   #extract_input_node_reduction_rangesrv  l  s=    *)))))))*/>22  ""$$#6688~"".))<jo*E22 |
   ""END

 SZZ!^^ *	 	1 	1DdI.. yD  HHTYW++DI66F~''))Bz"n-- 1#b6K6K6M6M2N2NQR2R2R!)%'%:%:%<%<N;;==DD#r'<'<'>'>>>$"++--BWBW'<< CX   0000I.))E7 
 SZZ!^^8 .!!r'   c                      dS )Ncr!   r!   r'   r$   r  r    s    3r'   c                       e Zd ZU eej                 ed<   ddZdede	de
f         fdZ	 ddej        fd	Zd
 Zd Z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S )FreeUnbackedSymbolsOpsHandlersymbolsr   Nc                 ,    t                      | _        d S r    )r   r{  r)   s    r$   r   z&FreeUnbackedSymbolsOpsHandler.__init__  s    !||r'   r   .c                       fd}|S )Nc                      t          j        | |                                          D ]O}t          |t          j        t          j        j        j        f          rxj	        t          |          z  c_	        Pd S r    )rX   rY   r   r   r;   r<   logicboolalgBooleanr{  r   )r   kwargsar#   s      r$   r`  z8FreeUnbackedSymbolsOpsHandler.__getattr__.<locals>.inner  sk    _T6==??;; = =a%*ek.A.I!JKK =LL$9!$<$<<LL= =r'   r!   )r#   r   r`  s   `  r$   __getattr__z)FreeUnbackedSymbolsOpsHandler.__getattr__  s#    	= 	= 	= 	= 	=
 r'   Tc                     t          |t          j        t          j        j        j        f          rJ | xj        t          |          z  c_        t          dt          |           d          S )N(rH   )
r   r;   r<   r  r  r  r{  r   r   r9   )r#   	index_varrD   checkwrap_negs        r$   indirect_indexingz/FreeUnbackedSymbolsOpsHandler.indirect_indexing  sb     i%*ek6I6Q)RSSSSS-d333!"7c)nn"7"7"7888r'   c                     dS )Nrh  r!   )r#   rw   s     r$   frexpz#FreeUnbackedSymbolsOpsHandler.frexp  s    {r'   c                 &    dt          |          z  S Nr    rL   )r#   dtypes
combine_fnr   s       r$   scanz"FreeUnbackedSymbolsOpsHandler.scan      V$$r'   c                 &    dt          |          z  S r  r  )r#   r  r   stable
descendings        r$   sortz"FreeUnbackedSymbolsOpsHandler.sort  r  r'   r'  	src_dtypereduction_typer!  )N.c                 :    t          |          }|dk    rd|z  nd S )Nr   r    )r   )r#   r'  r  r  r!  
num_valuess         r$   	reductionz'FreeUnbackedSymbolsOpsHandler.reduction  s)     +>::
'1A~~w##4?r'   )r   N)TT)r6   r7   r8   r   r;   r   r:   r   r9   r   r   r  r  r  r  r  r0  r'  r   r
   r	   r  r!   r'   r$   rz  rz    s.        %%%%$ $ $ $ c(:     599 9	9 9 9 9  % % %% % %@{@ ;@ &	@
 T5++,@ 
tU9%%	&@ @ @ @ @ @r'   rz  hc                     | S r    r!   )r  s    r$   (_typecheck_FreeUnbackedSymbolsOpsHandlerr    s	     Hr'   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)rr   r  rz  r   r^  r   objectr{  )rJ  r   rindexr  r   handlers         r$   extract_free_unbacked_symbolsr    s    """"""$0E6??ugD+--G 
	7	#	#  U\($& &   	D		                              ?s5   A2	AA2A	A2"A	#A22A69A6r    )Br=   dataclassesrX   loggingrer   r   r   r   r   r   r   r	   r
   unittest.mockr   r;   r0  %torch.fx.experimental.symbolic_shapesr   torch.utils._ordered_setr   codegen.commonr   utilsr   r   r   r   r   r   virtualizedr   r   r   	getLoggerr6   r^   compilesearchr   ABCr   	dataclassrB   r   r   r   r   MockHandlerrn   KernelFormatterHandlerr4  r9   r<   r   r   rB  rH  r?   rc  rv  r  rz  r  r  r!   r'   r$   <module>r     s^   



          				  I I I I I I I I I I I I I I I I I I I I         G G G G G G / / / / / / 4 4 4 4 4 4                6 5 5 5 5 5 5 5 5 5 g!!bj))0    #'   8 d###NI NI NI NI NI NI NI $#NIb d###         c     $# V d###    c   $#8 d###! ! ! ! ! ! ! $#! A A A A A A A AH`l `l `l `l `lAM `l `l `lF8 8 8 8 8a. 8 8 8	 	i5:,:T1U&U V 	 	 	 	U5:s?%; S     IL 
 
 
%
C"8 
# 
 
 
 
  8 8 8c8UZ_%8 8 	8 8 8 8v;".;"
8D$%xUZ0@'AAB;" ;" ;" ;"|  
&@ &@ &@ &@ &@ &@ &@ &@R$    hsCx&8      r'   