
    3j.~                        S SK r S SKrS SKrS SKrS SKrS SKJrJrJr  S SK	J
r
Jr  S SKJr  S SKJr  S SKrS SKrS SKJr  S SKJrJr  S SKJr  S	S
KJrJr  SSKJr  SSKJr  SSK J!r!J"r"J#r#J$r$J%r%  SSK&J'r'J(r(  \" S5      r)\RT                  " \+5      r,\RZ                  " S5      R\                  r/ " S S\ R`                  5      r1\Rd                  " SS9 " S S\15      5       r3\Rd                  " SS9 " S S\15      5       r4\Rd                  " SS9 " S S\15      5       r5\Rd                  " SS9 " S S5      5       r6\Rd                   " S S5      5       r7 " S  S!\(Rp                  5      r9 " S" S#\(Rt                  5      r;S$\<S%\=\%\\R|                  /\R~                  4   4   4S& jr@S'\\R|                     S$\<S%\=\A\A\R~                        \%4   4S( jrBS)S*.S'\\R|                     S$\<S%\=\A\\R|                        \%4   4S+ jjrCS,S)S-S..S/\S0\
4   S'\\R|                     S1\DS$\<S2\\A\R|                        S%\74S3 jjrE SCS/\
S4\A\A\R|                        S5\%S1\DS%\94
S6 jjrFS7S8S%\=\A\R|                     S-  \A\R|                     S-  4   4S9 jrGS%\<4S: jrH " S; S<\5      rI  SDS/\S0\
4   S=\\R|                     S>\\R|                     S-  S?\DS%\\R~                     4
S@ jjrJ " SA SB\5      rKg)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                      \ rS rSr% \\S'   \R                  \S'   \R                   SS\
S\\R                     4S jj5       r\R                  S\\\4   S\4S j5       r\R                  S\R                  4S	 j5       r\R                  S\4S
 j5       r\R                  S\4S j5       r\R                  S\
4S j5       r\R                  S\
4S j5       rSS\S\4S jjrSrg)Dep%   nameindexunbacked_onlyreturnc                     g N selfr"   s     V/home/wildlama/miniconda3/lib/python3.13/site-packages/torch/_inductor/dependencies.pyget_free_symbol_usesDep.get_free_symbol_uses)   s     	    renamesc                     g r%   r&   r(   r-   s     r)   rename
Dep.rename/       r,   c                     g r%   r&   r(   s    r)   	get_numelDep.get_numel3   r2   r,   c                     g r%   r&   r4   s    r)   numbytes_hintDep.numbytes_hint7   r2   r,   c                     g r%   r&   r4   s    r)   
numel_hintDep.numel_hint;   r2   r,   c                     g r%   r&   r4   s    r)   has_unbacked_symbolsDep.has_unbacked_symbols?   r2   r,   c                     g r%   r&   r4   s    r)   is_contiguousDep.is_contiguousC   r2   r,   prefixc                     U $ r%   r&   )r(   rC   s     r)   normalize_with_stride_orderDep.normalize_with_stride_orderG   s    r,   r&   NFt)__name__
__module____qualname____firstlineno__str__annotations__sympyExprabcabstractmethodboolr   Symbolr*   dictr   r0   r5   intr8   r;   r>   rA   rE   __static_attributes__r&   r,   r)   r   r   %   s6   
I::$)!	ELL	! 
 	d38n    	5::   	s   	C   	d   	t  #   r,   r   T)frozenc                   V   \ rS rSr% \\S'   \R                  \S'   \\R                  S4   \S'   \\R                  S4   \S'   Sr
\S-  \S'    S"S	\S
\\R                     4S jjrS
\4S jr\S
\4S j5       rSS S
\\   S-  4S jrS
\R                  4S jrS#S jrS$S\S
S 4S jjr\S
\\R                  \R                  4   4S j5       rS#S jrS
\R                  4S jrS\\\4   S
S 4S jrS
\4S jrS
\4S jrS
\4S jrS
\4S jrS%S\S
\4S jjr S
\4S jr!S
\4S  jr"S!r#g)&	MemoryDepK   r    r!   .	var_namessizeNmoder"   r#   c                     [        U R                  U5      [        U R                  U5      -  [        U R                  U5      -  $ r%   )r
   r!   r^   r]   r'   s     r)   r*   MemoryDep.get_free_symbol_usesU   s=     TZZ7tyy-89t~~}=>	
r,   c                     SnU R                   b  SU R                    3nSU R                  < SU R                   SU R                   U S3$ )N z, z
MemoryDep())r_   r    r!   ranges)r(   
maybe_modes     r)   __repr__MemoryDep.__repr__^   sM    
99 dii[)JDII=4::,bj\QRSSr,   c                 ,    [        U R                  5      $ r%   )lenr]   r4   s    r)   num_varsMemoryDep.num_varsd   s    4>>""r,   otherc                 0   U R                   UR                   :X  d   eU R                   [        U R                  R                  5      :w  a  gUR                   [        UR                  R                  5      :w  a  g[	        S [
        R                  " U R                  UR                  5       5       5      (       a  g[        R                  R                  R                  U R                  U R                  5      n[        R                  R                  R                  UR                  UR                  5      n[        [        U5      5      [        U5      :w  d!  [        [        U5      5      [        U5      :w  a  [        R                  SU UUU5        g[        U5      [        U5      :w  a  g[!        U5       VVs0 s H  u  pEXT_M	     nnnU Vs/ s H  oVU   PM	     nn[        U5      [        [#        U R                   5      5      :X  d   eU$ s  snnf s  snf )z4
Can return None if not able to decide loop orders.
Nc              3   B   #    U  H  oS :H  =(       d    US:H  v   M     g7f)r   r   Nr&   ).0ss     r)   	<genexpr>7MemoryDep.decide_loop_order_to_match.<locals>.<genexpr>}   s      P)OAAva)Os   zaunable to decide loop order. self_dep=%s v.s. other_dep=%s, self_strides=%s v.s. other_strides=%s)rk   rj   r!   r   any	itertoolschainr^   r   graphsizevarsstride_hintsr]   r   logdebug	enumeraterange)r(   rm   self_stridesother_stridesirq   stride_to_indexorders           r)   decide_loop_order_to_match$MemoryDep.decide_loop_order_to_matchh   s    }}... ==C

 7 788>>S!9!9:: PEJJ)OPPP ww''44TZZP((55ekk5??S z,'(C,==}%B
B  IIs 
 l#z-'@@,5l,CD,CDA14,CD-:;]#];% JuT]]/C$DDDD	 E;s   9HHc                 j    [        U R                  [        R                  U R                  S5      5      $ )z6
Return the offset by setting every variable to be 0.
r   )r   r!   rV   fromkeysr]   r4   s    r)   
get_offsetMemoryDep.get_offset   s$     $**dmmDNNA&FGGr,   c                     [        U R                  /[        R                  U R                  U R
                  5      QU R                  P76 $ )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.
)r[   r    _RecordLoadStoreInner
_normalizer!   re   r_   r4   s    r)   	normalizeMemoryDep.normalize   sC     II
"--djj$++F
 II
 	
r,   rC   c                 :   SSK Jn  [        R                  R                  R                  U R                  U R                  5      n[        [        [        U5      5      UR                  SS9nUR                  U5      nU R                  nU R                  nU" U5      nU" U5      n	[        R                  R                  R                  U	U[        U R                  /X5      5      u  pn[!        U5      u  p[#        [%        U	U" U
 Vs/ s H
  o" U5      PM     sn5      5      5      n['        [(        R*                  " U R                  5      U5      n[-        U R.                  U[1        UR3                  5       5      [1        UR5                  5       5      5      nU$ s  snf )z
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reverse)torch._inductorr   r   rw   rx   ry   r!   r]   sortedr}   rj   __getitem__same_reorderr^   _simplify_loopsr   var_builderrV   zipr   rP   expandr[   r    tuplekeysvalues)r(   rC   r   stridesr   stride_reordersizesr]   new_reordered_sizesnew_reordered_var_namesnew_simplified_sizesreindex_prune
var_rangesadd_varxreplacement	new_indexouts                      r)   rE   %MemoryDep.normalize_with_stride_order   sU    	'''""//

DNNK uS\*0C0CTR/		NN	,U3"0";010@0@0P0P#$51
-v *&1
'-AB-A-ABC
 u||DJJ7E	IIy%
(9":E*BSBSBU<V
 
 Cs   Fc                 T    [        [        U R                  U R                  5      5      $ )z{c0: 128, c1: 512, ...})rV   r   r]   r^   r4   s    r)   re   MemoryDep.ranges   s     C		233r,   c                     [        U R                  [        R                  R                  R                  U R                  U R                  5      U R                  U R                  U R                  S9$ )N)r    r!   r]   r^   r_   )r[   r    r   rw   rx   simplify_with_rangesr!   re   r]   r^   r_   r4   s    r)   r   MemoryDep.simplify_with_ranges   sM    ''""77

DKKPnn
 	
r,   c                 `   U R                  5       (       a+  [        R                  R                  U R                  5      nU$ [        U R                  R                  5      n[        R                  R                  n[        U R                  U R                  5       H  u  p4X2;   d  M  X-  nM     U$ r%   )is_indirectr   rw   r5   r    r   r!   r   rP   SOner   r]   r^   )r(   numelvarsvarr^   s        r)   r5   MemoryDep.get_numel   s    GG%%dii0E  -7tzz7N7N,ODGGKKE ;	;!LE < r,   r-   c                     U R                   U;   aA  [        XR                      U R                  U R                  U R                  U R
                  S9$ U $ )N)r]   r^   r_   )r    r[   r!   r]   r^   r_   r/   s     r)   r0   MemoryDep.rename   sH    99		"

..YYYY  r,   c                      [         R                  R                  R                  U R	                  5       SS9[        [         R                  R                  U R                  5      5      -  $ ! [         a     gf = fNr   )fallback	r   rw   rx   optimization_hintr5   r   	get_dtyper    NotImplementedErrorr4   s    r)   r8   MemoryDep.numbytes_hint  i    	77##55 1 6 qww00;<= = # 		   A(A+ +
A87A8c                      [         R                  R                  R                  U R	                  5       SS9$ ! [
         a     gf = fr   r   rw   rx   r   r5   r   r4   s    r)   r;   MemoryDep.numel_hint  A    	77##55dnn6FQR5SS" 		   58 
AAc                 L    [        [        U R                  5       5      5      S:  $ Nr   rj   r   r5   r4   s    r)   r>   MemoryDep.has_unbacked_symbols      ()9:;a??r,   c                     [        U R                  [        R                  5      (       a  g[        U R                  [        R                  5      =(       a    U R                  U R
                  ;   $ NT)
isinstancer!   rP   IntegerrU   r]   r4   s    r)   rA   MemoryDep.is_contiguous  sA    djj%--00$**ell3T

dnn8TTr,   result_for_complex_expressionc                 D   [        U R                  5      S:X  a  g[        U R                  [        R
                  5      (       a  U R                  R                  OU R                  /nU R                  S   nU H  nXC:X  a    g[        U[        R                  5      (       d  M+  [        UR                  5      S:X  d  MF  UR                  S   U:X  d  M[  [        UR                  S   [        [        R                  45      (       d  M  UR                  S   S:  d  M    g   U$ )z1
Whether the stride for the last dimension is 1.
r   Tr   r   F)
rj   r]   r   r!   rP   AddargsMulrW   r   )r(   r   termslast_symterms        r)   stride1_for_last_dimMemoryDep.stride1_for_last_dim  s     t~~!##-djj%))#D#D

4::,>>"%D
 4++		Na'IIaLH,tyy|c5==-ABBIIaL1$  -,r,   c                    [        U R                  [        R                  5      (       a5  U R                  U R                  ;  =(       a    U R                  5       (       + $ [        U R                  [        [        R                  45      $ r%   )r   r!   rP   rU   r]   r   rW   r   r4   s    r)   	is_scalarMemoryDep.is_scalar6  sU    djj%,,//::T^^3ND<L<L<N8NN$**sEMM&:;;r,   c                 N    [        S U R                  R                   5       5      $ )Nc              3   L   #    U  H  n[        UR                  5      v   M     g 7fr%   )r   r    )rp   vs     r)   rr   (MemoryDep.is_indirect.<locals>.<genexpr><  s     H0G1;qvv&&0Gs   "$)rt   r!   r   r4   s    r)   r   MemoryDep.is_indirect;  s    H

0G0GHHHr,   r&   rG   )r#   r[   rH   T)$rJ   rK   rL   rM   rN   rO   rP   rQ   r   rU   r_   rT   r   r*   rg   propertyrW   rk   listr   r   r   rE   rV   re   r   r5   r0   r8   r;   r>   rA   r   r   r   rX   r&   r,   r)   r[   r[   K   s    I::U\\3&''


C
  D#* %*
!
	ELL	!
T# T ## # #7 7S	D@P 7rHEJJ H

*# * *X 4U\\5::56 4 4
	5:: 		d38n 	 	s C @d @Ut U
-$ -RV -:<4 <
IT Ir,   r[   c                   $   \ rS rSr% \\S'   Sr\S-  \S'   \S\R                  4S j5       r
S\R                  4S jrS\\\4   SS 4S	 jr SS
\S\\R                      4S jjrS\4S jrS\4S jrS\4S jrS\4S jrS\4S jrS\4S jrSrg)StarDepi?  r    Nr_   r#   c                     [        S5      e)NzStarDep does not have an indexr   r4   s    r)   r!   StarDep.indexF       ""BCCr,   c                 T    [         R                  R                  U R                  5      $ r%   )r   rw   r5   r    r4   s    r)   r5   StarDep.get_numelK  s    ww  ++r,   r-   c                 j    U R                   U;   a"  [        XR                      U R                  5      $ U $ r%   )r    r   r_   r/   s     r)   r0   StarDep.renameN  s+    99799-tyy99r,   r"   c                     [        5       $ r%   r   r'   s     r)   r*   StarDep.get_free_symbol_usesS       |r,   c                      [         R                  R                  R                  U R	                  5       SS9[        [         R                  R                  U R                  5      5      -  $ ! [         a     gf = fr   r   r4   s    r)   r8   StarDep.numbytes_hintX  r   r   c                      [         R                  R                  R                  U R	                  5       SS9$ ! [
         a     gf = fr   r   r4   s    r)   r;   StarDep.numel_hint`  r   r   c                 L    [        [        U R                  5       5      5      S:  $ r   r   r4   s    r)   r>   StarDep.has_unbacked_symbolsf  r   r,   c                     gNFr&   r4   s    r)   rA   StarDep.is_contiguousi      r,   c                     gr   r&   r4   s    r)   r   StarDep.is_scalarl  r   r,   c                     gr   r&   r4   s    r)   r   StarDep.is_indirecto  r   r,   r&   rG   )rJ   rK   rL   rM   rN   rO   r_   r   rP   rQ   r!   r5   rV   r0   rT   r   rU   r*   rW   r8   r;   r>   rA   r   r   rX   r&   r,   r)   r   r   ?  s     ID#* Duzz D D,5:: ,d38n   %*!	ELL	!
s C @d @t 4 T r,   r   c                      \ rS rSr% \\S'   \\S'   Sr\\S'    SS\S\\	R                     4S jjr\S\	R                  4S	 j5       rS\	R                  4S
 jrS\\\4   SS 4S jrS\4S jrS\4S jrS\4S jrS\4S jrSrg)WeakDepi{  r    mutating_bufFis_faker"   r#   c                     [        5       $ r%   r   r'   s     r)   r*   WeakDep.get_free_symbol_uses  r   r,   c                     [        S5      e)NzWeakDep does not have an indexr   r4   s    r)   r!   WeakDep.index  r   r,   c                 6    [         R                  R                  $ r%   )rP   r   r   r4   s    r)   r5   WeakDep.get_numel  s    ww{{r,   r-   c                     U R                   U;   a-  [        XR                      U R                  U R                  5      $ U $ r%   )r    r  r  r  r/   s     r)   r0   WeakDep.rename  s3    99799-t/@/@$,,OOr,   c                     gNr   r&   r4   s    r)   r8   WeakDep.numbytes_hint      r,   c                     gr  r&   r4   s    r)   r;   WeakDep.numel_hint  r  r,   c                     gr   r&   r4   s    r)   r>   WeakDep.has_unbacked_symbols  r   r,   c                     gr   r&   r4   s    r)   rA   WeakDep.is_contiguous  r   r,   r&   NrG   )rJ   rK   rL   rM   rN   rO   r  rT   r   rP   rU   r*   r   rQ   r!   r5   rV   r0   rW   r8   r;   r>   rA   rX   r&   r,   r)   r  r  {  s     I GT %*!	ELL	!
 Duzz D D5:: d38n  
s C d t r,   r  c                       \ rS rSr% \R
                  \S'   \\R                  S4   \S'   \\R
                  S4   \S'   Sr	g)IndexExprDepi  r!   .r]   r^   r&   N)
rJ   rK   rL   rM   rP   rQ   rO   r   rU   rX   r&   r,   r)   r  r    s3    ::U\\3&''


C
  r,   r  c                   h   \ rS rSr% \\   \S'   \\   \S'   \\   \S'   Sr\	\
R                     S-  \S'   Sr\S-  \S'   S\\\4   S	S 4S
 jrS\\\   -  S	S 4S jrSS jr\S\	S    S	S 4S j5       rS\\   S	S 4S jrS	\\   4S jrSS\S	\\   4S jjr SS\S	\\
R4                     4S jjrSrg)
ReadWritesi  readswritesindex_exprsN
range_varsr   r-   r#   c                    ^ [        [        U4S jU R                   5       5      [        U4S jU R                   5       5      U R                  U R
                  U R                  5      $ )Nc              3   D   >#    U  H  oR                  T5      v   M     g 7fr%   r0   rp   depr-   s     r)   rr   $ReadWrites.rename.<locals>.<genexpr>  s     Ajszz'**j    c              3   D   >#    U  H  oR                  T5      v   M     g 7fr%   r%  r&  s     r)   rr   r(    s     Bkszz'**kr)  )r  r   r  r   r!  r"  r   r/   s    `r)   r0   ReadWrites.rename  sK    AdjjAABdkkBBOOOO
 	
r,   r'  c                 4   [        U[        [        [        45      (       d   e[        U[        5      (       d  [        U/5      n[	        [        R
                  " U R                  U5      U R                  U R                  U R                  U R                  5      $ r%   )r   r  r   r   r  unionr  r   r!  r"  r   )r(   r'  s     r)   	with_readReadWrites.with_read  st    #*=>>>>#z**cU#CTZZ-KKOOOO
 	
r,   c                     [         R                  " U R                  UR                  5      n[         R                  " U R                  UR                  5      n[         R                  " U R                  UR                  5      n[        X#-
  X45      $ r%   )r   r-  r  r   r!  r  )r(   rm   r  r   r!  s        r)   mergeReadWrites.merge  sc      U[[9!!$++u||< &&t'7'79J9JK%.&>>r,   read_writesc                 L   [         R                  " U  Vs/ s H  oR                  PM     sn6 n[         R                  " U  Vs/ s H  oR                  PM     sn6 U-
  n[         R                  " U  Vs/ s H  oR                  PM     sn6 n[        X2U5      $ s  snf s  snf s  snf r%   )r   r-  r   r  r!  r  )r3  rw
all_writes	all_readsall_index_exprss        r)   
merge_listReadWrites.merge_list  s    %%K'HKb		K'HI
$$+&F+Bxx+&FG*T	$**k,Rk^^k,RS)AA (I&F,Rs   BB2B!	rem_readsc                     [        U R                  U-
  U R                  U R                  U R                  U R
                  5      $ r%   )r  r  r   r!  r"  r   )r(   r;  s     r)   remove_readsReadWrites.remove_reads  s9    JJ"KKOOOO
 	
r,   c                 X    [         R                  " U R                  U R                  5      $ r%   )ru   rv   r  r   r4   s    r)   reads_and_writesReadWrites.reads_and_writes  s    tzz4;;77r,   ignore_integer_indexc                    [        5       nU R                  5        Hm  n[        U[        5      (       d  M  U(       a1  [        UR                  [
        [        R                  45      (       a  MR  UR                  UR                  5        Mo     U$ )z&
Integer index is used for load_seed.
)
r   r@  r   r[   r!   rW   rP   r   addr    )r(   rB  namesr'  s       r)   buffer_namesReadWrites.buffer_names  sh     ",((*Cc9--'z		C/0 0 		#((# + r,   r"   c                 n    [        5       nU R                  5        H  nX#R                  U5      -  nM     U$ r%   )r   r@  r*   )r(   r"   resultr'  s       r)   r*   ReadWrites.get_free_symbol_uses  s6     ,6<((*C..}==F +r,   r&   )rm   r  r#   r  r   rG   )rJ   rK   rL   rM   r   r   rO   r  r"  r   rP   rQ   r   r   rV   rN   r0   r.  r1  staticmethodr9  r=  r   r@  rT   rF  rU   r*   rX   r&   r,   r)   r  r    s   c?sOL))*.JUZZ 4'.#'J	D '
d38n 
 


S:c?2 

| 

? B\ 2 B| B B
jo 
, 
8(3- 8 C  %*!	ELL	! r,   r  c                   f  ^  \ rS rSrS\S\SS4U 4S jjr\S\\	R                  -  S\\	R                     S	\\	R                     SS4S
 j5       r\S\	R                  S\S\\	R                  \\	R                  S4   \\	R                  S4   4   4S j5       rS\	R                  S\\	R                  \\	R                  S4   \\	R                  S4   4   4S jrS\S\	R                  SS4S jrS\S\SS4S jr S S\S\	R                  S\S\S-  SS4
S jjrS\S\	R                  S\SS4S jrS\	R                  S\R0                  S-  SS4S jr  S!S\S\\\	R                  \	R                  \	R                  4   S\S\R0                  S\S\\\	R                  4   S-  S\S-  SS4S jjrSrU =r$ )"r   i  r   r   r#   Nc                    > [         TU ]  5         [        5       U l        [        5       U l        [        5       U l        Xl        X l        g r%   )super__init__r   _reads_writes_index_exprs_var_ranges_should_normalize)r(   r   r   	__class__s      r)   rO  _RecordLoadStoreInner.__init__  s6    '1|.8l6@l&0'0r,   r!   r]   r   c                     [        U [        R                  5      (       d  gU R                  nU(       a>  US   U;  a4  UR	                  5         UR	                  5         U(       a  US   U;  a  M2  gggg)zb
Reduction has last (reduced) dim in its sizes, but
downstream users won't.  Normalize this away.
Nr   )r   rP   rQ   r   pop)r!   r]   r   r   s       r)   drop_unused_symbols)_RecordLoadStoreInner.drop_unused_symbols  sZ     %,,))IbM=MMOIIK IbM=i=ir,   .c                    / UR                  5       Qn[        UR                  5       5      n[        R                  R
                  R                  UU[        U/X45      5      u  pVn[        [        5       5      u  p[        [        X6" U V
s/ s H
  o" U
5      PM     sn
5      5      5      n[        [        R                  " U5      U5      n/ UR                  5       Qn/ UQnU R                  XU5        U[        U5      [        U5      4$ s  sn
f r%   )r   r   r   r   rw   rx   r   r   r   canonicalization_prefixrV   r   r   rP   r   rY  )clsr!   r   
index_varsr   	new_sizesr   r   new_varsr   r   r   s               r)   r    _RecordLoadStoreInner._normalize  s     *z()
j'')*%&WW%5%5%E%E$eWj@&
"	F ((?(AB3z7	3R	1GAJ	3R+STU5<<.<%X]]_% iL	;eHouY'777 4Ss   
D	c                    U R                   (       d  U R                  R                  5        Vs/ s H,  n[        R                  R
                  R                  U5      PM.     nn[        U R                  R                  5       U5       VVs/ s H  u  pEUS:w  d  M  UPM     nnnU Vs/ s H  oUS:w  d  M
  UPM     nnU R                  XU5        U[        U5      [        U5      4$ U R                  R                  5        VVs0 s H/  u  pEU[        R                  R
                  R                  U5      _M1     nnnU R                  X5      $ s  snf s  snnf s  snf s  snnf r  )rT  rS  r   r   rw   rx   simplifyr   r   rY  r   itemsr   )r(   r!   r   r   kr   r]   r   s           r)   canonicalize"_RecordLoadStoreInner.canonicalize2  s)    %%;?;K;K;R;R;TU;TaQWW%%..q1;TEU'*4+;+;+@+@+BE'JU'JtqaSTf'JIU %01aQE0$$Uu=%	*E%L88 ((..0
0 qww((++0 	 
 u11 VU0

s#   3E
EE'	E4E6Er    c                 l    U R                   R                  [        U/U R                  U5      Q76 5        g r%   )rP  rD  r[   rf  r(   r    r!   s      r)   load_RecordLoadStoreInner.loadE  s'    	$B):):5)ABCr,   c                 ~    [        U[        5      (       d   eU R                  U[        R                  " U5      5        g r%   )r   rW   rj  rP   r   ri  s      r)   	load_seed_RecordLoadStoreInner.load_seedH  s,    %%%%%		$e,-r,   valuer_   c                 r    U R                   R                  [        U/U R                  U5      Q7SU065        g )Nr_   )rQ  rD  r[   rf  )r(   r    r!   ro  r_   s        r)   store_RecordLoadStoreInner.storeL  s0     	4N$*;*;E*BNNOr,   c                 0    U R                  XSU S35        g )Nzstore_reduction(rd   )rq  )r(   r    r!   ro  s       r)   store_reduction%_RecordLoadStoreInner.store_reductionQ  s    

4"25' ;<r,   dtypec                 d    U R                   R                  [        U R                  U5      6 5        g r%   )rR  rD  r  rf  )r(   r!   rv  s      r)   
index_expr _RecordLoadStoreInner.index_exprT  s&    lD,=,=e,DEFr,   r   
boundariesboundary_indicesindexing_dtyperightsortersorter_indicesc                     U R                   R                  [        US   5      5        Ub(  U R                   R                  [        US   5      5        gg)z?Records the names of the buffers that bucketize will read from.r   N)rP  rD  r   )r(   r   rz  r{  r|  r}  r~  r  s           r)   	bucketize_RecordLoadStoreInner.bucketizeW  sA     	
1./KKOOGF1I./ r,   )rR  rP  rT  rS  rQ  r%   NN)rJ   rK   rL   rM   r   rT   rO  rK  rW   rP   rQ   r   rY  classmethodr   rU   r   rf  rN   rj  rm  rq  rt  torchrv  rx  r   r  rX   __classcell__rU  s   @r)   r   r     sq   19 1 1$ 1 UZZ

# EJJ 
	 " 8JJ8,58	uzz5s!23U5::s?5KK	L8 822ZZ2	uzz5s!23U5::s?5KK	L2&D DUZZ DD D.c .# .$ .
 LPPP %

P36P>ADjP	P
=C =

 =3 =4 =G

 G5;;3E G$ G 15#'00 #uzz5::uzzAB0 	0
 0 0 c5::o&-0 D0 
0 0r,   r   c                   8   ^  \ rS rSrS\S\SS4U 4S jjrSrU =r$ )RecordLoadStoreig  r   r   r#   Nc                 2   > [        XS9n[        TU ]	  US9  g )Nr   r   )parent_handler)r   rN  rO  )r(   r   r   r  rU  s       r)   rO  RecordLoadStore.__init__h  s"    .!
 	7r,   r&   )	rJ   rK   rL   rM   r   rT   rO  rX   r  r  s   @r)   r  r  g  s"    89 8 8$ 8 8r,   r  rC   r#   c                    ^ ^^ [         R                  " 5       m0 mS[        R                  S[        R                  4UU U4S jjnTU4$ )Nlengthr#   c                 B   > [        T [        T5       35      nU TU'   U$ r%   )r   next)r  r   cntrC   r   s     r)   r   var_builder.<locals>.add_vart  s(    &$s)56
1r,   )ru   countrP   rQ   rU   )rC   r   r  r   s   ` @@r)   r   r   p  sA    
//
CJ

 u||  
 wr,   argsizesc           	      t    [        U 5      u  p#U Vs/ s H  n[        [        X45      5      PM     nnXR4$ s  snf r%   )r   r   map)rC   r  r   r   r^   r   s         r)   index_vars_no_squeezer  |  s>     &f-JKS%T84d3w+=&>8D%T &Us   5d)rC   c                     SSK Jn  [        U 5      u  p4/ n/ nU HP  nUR                  U5      u  pUR	                  U5        UR	                  U	" [        [        XH5      5      5      5        MR     XS4$ )Nr   )SqueezeView)r   r  r   squeezerappendr   r  )
rC   r  r  r   r   r   r_  r^   new_sizer   s
             r)   index_vars_squeezer    so      %f-J')D,.I'006"GDW!789:  r,   Fr&   )r   rC   hidden_argsfn.r   r  c                   [        USU06u  pVSSKJn  [        X5      (       a  [	        U / UQUQUU5      nO>[        XaS9n	[        R                  " U	5         U " / UQUQ76   S S S 5        U	R                  nU(       a  / n
O!/ [        R                  R                  U5      Qn
[        [        UR                  5      [        UR                  5      UR                   U
U5      $ ! , (       d  f       N= f)NrC   r   )LoopBody)r   )r  	loop_bodyr  r   extract_loop_body_with_argsr  r   set_ops_handlerr  ru   rv   from_iterabler  r   rP  rQ  rR  )r  r   rC   r  r  r   r   r  innerr5  r"  s              r)   extract_read_writesr    s     *8CFCD#"+!d![!	
 Z=r"##{# #!!
;y44T:;
5<< 5==!	 	 #"s   C
C-r   r   c           	         SSK Jn  [        X#S9nU R                  U5      nU R                  (       ap  [        U R                  5       VVs0 s H   u  pxU[        [        R                  U5      _M"     n	nnUR                  5        V
Vs0 s H  u  pU
[        X5      _M     nn
nU R                  UR                      H+  nUR                  UR                  XkR                     5        M-     U R                  UR                       H4  nUR#                  UR                  [%        XkR                     5      5        M6     U R                  UR&                      H7  nUR)                  UR                  XkR                     S UR*                  5        M9     U R                  UR,                      H,  nUR/                  UR                  XkR                     S 5        M.     U R                  UR0                      H!  nUR3                  XkR                     S 5        M#     U R                  UR4                      H&  nUR7                  S UR                  S S S 4S S S 5        M(     U$ s  snnf s  snn
f )Nr   )MemoryUsageTyper  )r  r  r   indexing_from_argsindirect_varsr|   r   r   TMPrd  r   memory_usageLOADrj  buffer_name
index_name	LOAD_SEEDrm  rW   STORErq  r_   STORE_REDUCTIONrt  
INDEX_EXPRrx  	BUCKETIZEr  )r  r   r   r   r  r  name_to_indexr   r   replre  entrys               r)   r  r    s    + "ZME))$/M	8A"BRBR8ST8S;txx++8ST<I<O<O<QR<QDAJq//<QR!5!56

5$$m4D4D&EF 7!:!:;))3}=M=M/N+OP <!6!67**+JJ		
 8 !@!@A**+	
 B !;!;<'7'78$? =!:!:; 	dD1	
 < LA URs   
'II!
input_nodeztorch._inductor.ir.IRNodec                 \   SSK JnJnJn  [	        U R                  5       U5      (       a7  / U R                  5       Qn/ U R                  5       Qn[        U5      S:  a  XE4$ g[	        U R                  R                  U5      (       d  gU R                  5       nSnSnUGc  [        U5      S:  Ga|  [        5       n/ nU GHA  n	[	        U	[        5      (       d  M  U	R                  U;   a  M-  UR                  U	R                  5        [        R                   R#                  U	R                  5      n
U
c  Mv  U
R                  5       nUb  [	        X5      (       a  M  [	        X5      (       aw  [        UR                  5       5      S:  aZ  Uc&  / UR                  5       Qn/ UR                  5       QnM  U/ UR                  5       Q:w  d  U/ UR                  5       Q:w  a    gGM"  UR%                  UR                  5       5        GMD     Xh:X  a  XE4$ [        U5      nUc  [        U5      S:  a  GM|  XE4$ )aD  
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   r  N)r   r  r  r  r   get_defining_opget_sizeget_reduction_sizerj   data	get_readsr   r[   r    rD  r   rw   try_get_bufferextend)r  r  r  r  r^   reduction_sizer  seen	new_readsreadbufferops               r)   #extract_input_node_reduction_rangesr    s    87
 *,,.??'$$&';:88:;~"))joo**E22
   "E.2N$(D

 SZ!^ *!	DdI..yyD HHTYYWW++DII6F~'')BzZ99"--#b6K6K6M2NQR2R!)%?r'<'<'>%?N+R[[]+D#'A)>)>)@'AAT N[[]N F (F
   0- . ))y)E; 
 SZ!^< !!r,   c                      g)Ncr&   r&   r,   r)   r\  r\  0  s    r,   c                      \ rS rSr% \\R                     \S'   S%S\SS4S jjr	S\
S\\S	4   S
\\
\4   S\4S jr  S&S\S\\R                   -  S\S\S\R                  4
S jjrS\S\S   4S jrS\S\S\\   S\S   4S jrS\S\\   S\S\S\S   4
S jrS\R.                  S\R.                  S\SS\S   -  SS\S   -  4
S jrS \S!\S	\4   S"\SS4S# jrS$rg)'FreeSymbolsOpsHandleri5  symbolsr"   r#   Nc                 ^    [        5       U l        U(       a  [        U l        g [        U l        g r%   )r   r  r   r   get_symbolsr'   s     r)   rO  FreeSymbolsOpsHandler.__init__8  s    !|4A0|r,   r    r   .kwargsc                 ,   [         R                  " X#R                  5       5       Hl  n[        U[        R
                  [        R                  R                  R                  45      (       d  MH  U =R                  U R                  U5      -  sl	        Mn     g r%   )ru   rv   r   r   rP   rQ   logicboolalgBooleanr  r  )r(   r    r   r  as        r)   _defaultFreeSymbolsOpsHandler._default<  sZ    }}7A!ejj%++*=*=*E*EFGG 0 0 33 8r,   	index_varr^   checkwrap_negc                    [        U[        R                  [        R                  R                  R
                  45      (       a   eU =R                  U R                  U5      -  sl        [        S[        U5       S35      $ )N(rd   )
r   rP   rQ   r  r  r  r  r  r   rN   )r(   r  r^   r  r  s        r)   indirect_indexing'FreeSymbolsOpsHandler.indirect_indexingA  sb     i%**ekk6I6I6Q6Q)RSSSS((..!Ac)n%5Q"788r,   r   )N.c                     g)Nr  r&   )r(   r   s     r)   frexpFreeSymbolsOpsHandler.frexpL  s    r,   dtypes
combine_fnr   c                     S[        U5      -  $ Nr%   rj   )r(   r  r  r   s       r)   scanFreeSymbolsOpsHandler.scanO       V$$r,   stable
descendingc                     S[        U5      -  $ r  r  )r(   r  r   r  r  s        r)   sortFreeSymbolsOpsHandler.sortT  r  r,   rv  	src_dtypereduction_typero  c                 2    [        U5      nUS:  a  SU-  $ S $ )Nr   r%   )r   )r(   rv  r  r  ro  
num_valuess         r)   	reductionFreeSymbolsOpsHandler.reductionY  s$     +>:
'1A~w#?4?r,   maskbodyrm   c                 @    [        U5      (       d   S5       eU" 5         g )Nz$masked body must always be callable.)callable)r(   r  r  rm   s       r)   maskedFreeSymbolsOpsHandler.maskedc  s    ~~EEE~r,   )r  r  r   )TT)rJ   rK   rL   rM   r   rP   rU   rO   rT   rO  rN   r   r   rV   r  rW   rQ   r  r  r   r  r  r  rv  r   r  r   r  rX   r&   r,   r)   r  r  5  s   %%Td Td T4S 4c3h 4c3h 4TW 4 	9	9 EJJ	9 		9
 	9 
	9s uY/ %%'*%4<SM%	y	%
%%#+C=%:=%KN%	y	%
@{{@ ;;@ &	@
 eI&&@ 
i 	 @3 hsCx&8   r,   r  r!   rindexr"   c                 2   SSK Jn  Ub  X/OU/n[        U5      n[        R                  " U5         [
        R                  " USS5         U " U6   S S S 5        S S S 5        UR                  $ ! , (       d  f       N"= f! , (       d  f       UR                  $ = f)Nr   )FlexibleLayoutallow_indexingT)r   r  r  r   r  r	   objectr  )r  r!   r  r"   r  r   handlers          r)   extract_free_symbolsr  i  s}     #$0E?ugD#M2G 	
'"^%5t<
D	 	= 	# ?? 	=< 	#" ??s#   A=
A,A=,
A:	6A==
Bc                   z    \ rS rSr% \\   \S'   S\R                  SS4S jr	S\S\
\S	4   S
\\\4   S\4S jrSrg)SymbolUsageCollectorOpsHandleri}  usagessymbolr#   Nc                 .    Xl         [        5       U l        g r%   )r  r   r
  )r(   r  s     r)   rO  'SymbolUsageCollectorOpsHandler.__init__  s     lr,   r    r   .r  c                     U R                   U;   =(       d    U R                   UR                  5       ;   nU(       a  U R                  R                  U5        g g r%   )r  r   r
  rD  )r(   r    r   r  	used_heres        r)   r  'SymbolUsageCollectorOpsHandler._default  s<    KK4'I4;;&--/+I	KKOOD! r,   )r  r
  )rJ   rK   rL   rM   r   rN   rO   rP   rU   rO  r   r   rV   r  rX   r&   r,   r)   r	  r	  }  sU    sO#u|| # #"S "c3h "c3h "TW "r,   r	  rG   r   )LrR   dataclassesru   loggingrecollections.abcr   r   r   typingr   r   typing_extensionsr   unittest.mockr	   rP   r  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   	getLoggerrJ   rz   compilesearchr   ABCr   	dataclassr[   r   r  r  r  MockHandlerr   KernelFormatterHandlerr  rN   r   rQ   rU   r   r   r  r  rT   r  r  r  r\  r  r  r	  r&   r,   r)   <module>r'     s   
    	 8 8  "    2 U / 3 4 '  * CL!jj)00##'' #L d#pI pI $pIf d#0c 0 $0v d#)c ) $)X d#! ! $! J J JZg0AMM g0T8a.. 8	 	i5::,:T1U&U V 	

#-0
4U\\"#Y./ 47

#-0
4$%y01$ .0'c'

#' ' 	'
 $uzz*+' '\ 	--
tEJJ
 - - 	-
 -`@"+@"
4

d"D$4t$;;<@"F 
1N 1n +/	cEJJ UZZ 4' 	
 (
"^ 
"r,   