
    ȅi|                        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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+\RX                  " \-5      r.\R^                  " S5      R`                  r1 " S S\ Rd                  5      r3\Rh                  " SS9 " S S\35      5       r5\Rh                  " SS9 " S S\35      5       r6\Rh                  " SS9 " S S\35      5       r7\Rh                  " SS9 " S S5      5       r8\Rh                   " S S5      5       r9 " S  S!\*Rt                  5      r; " S" S#\*Rx                  5      r=S$\>S%\?\'\\R                  /\R                  4   4   4S& jrBS'\\R                     S$\>S%\?\C\C\R                        \'4   4S( jrDS)S*.S'\\R                     S$\>S%\?\C\\R                        \'4   4S+ jjrES,S)S-S..S/\S0\
4   S'\\R                     S1\FS$\>S2\\C\R                        S%\94S3 jjrG SAS/\
S4\C\C\R                        S5\'S1\FS%\;4
S6 jjrHS7S8S%\?\\C\R                        \\C\R                        4   4S9 jrIS%\>4S: jrJ " S; S<\!5      rK  SBS/\S0\
4   S=\\R                     S>\\\R                        S?\FS%\\R                     4
S@ jjrLg)C    N)CallableIterableSequence)AnyOptionalTypeVarUnion)Self)patch)get_free_symbols)free_symbolsfree_unbacked_symbols
OrderedSet   )make_symbolSymT   )index_prevent_reordering)DefaultHandler)get_dtype_sizereduction_num_outputssympy_index_symbol
sympy_subs	VarRanges)ReductionTypeVTzindirect|tmpc                      \ 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/james-whalen/.local/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   r4   r.   c                     g r'   r(   r6   s    r+   numbytes_hintDep.numbytes_hint7   r4   r.   c                     g r'   r(   r6   s    r+   
numel_hintDep.numel_hint;   r4   r.   c                     g r'   r(   r6   s    r+   has_unbacked_symbolsDep.has_unbacked_symbols?   r4   r.   c                     g r'   r(   r6   s    r+   is_contiguousDep.is_contiguousC   r4   r.   prefixc                     U $ r'   r(   )r*   rE   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
   r2   r7   intr:   r=   r@   rC   rG   __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
\\R                     4S jjrS
\4S jr\S
\4S j5       r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())ra   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_   r6   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)rm   rl   r#   r   any	itertoolschainr`   r   graphsizevarsstride_hintsr_   r   logdebug	enumeraterange)r*   ro   self_stridesother_stridesirs   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#   rX   fromkeysr_   r6   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#   rg   ra   r6   s    r+   	normalizeMemoryDep.normalize   sC     II
"--djj$++F
 II
 	
r.   rE   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   ry   rz   r{   r#   r_   sortedr   rl   __getitem__same_reorderr`   _simplify_loopsr   var_builderrX   zipr   rR   expandr]   r"   tuplekeysvalues)r*   rE   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+   rG   %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, ...})rX   r   r_   r`   r6   s    r+   rg   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`   ra   )r]   r"   r   ry   rz   simplify_with_rangesr#   rg   r_   r`   ra   r6   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   ry   r7   r"   r   r#   r   rR   SOner   r_   r`   )r*   numelvarsvarr`   s        r+   r7   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`   ra   )r"   r]   r#   r_   r`   ra   r1   s     r+   r2   MemoryDep.rename   sH    99		"

..YYYY  r.   c                      [         R                  R                  R                  U R	                  5       5      [        [         R                  R                  U R                  5      5      -  $ ! [         a     gf = fNr   	r   ry   rz   	size_hintr7   r   	get_dtyper"   NotImplementedErrorr6   s    r+   r:   MemoryDep.numbytes_hint  b    	77##--dnn.>?.!!$)),C   # 		   A)A, ,
A98A9c                      [         R                  R                  R                  U R	                  5       SS9$ ! [
         a     gf = fNr   )fallbackr   ry   rz   r   r7   r   r6   s    r+   r=   MemoryDep.numel_hint  @    	77##--dnn.>-KK" 		   58 
AAc                 L    [        [        U R                  5       5      5      S:  $ r   rl   r   r7   r6   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#   rR   IntegerrW   r_   r6   s    r+   rC   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)
rl   r_   r   r#   rR   AddargsMulrY   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#   rR   rW   r_   r   rY   r   r6   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"   )rr   vs     r+   rt   (MemoryDep.is_indirect.<locals>.<genexpr><  s     H0G1;qvv&&0Gs   "$)rv   r#   r   r6   s    r+   r   MemoryDep.is_indirect;  s    H

0G0GHHHr.   r(   rI   )r%   r]   rJ   T)%rL   rM   rN   rO   rP   rQ   rR   rS   r   rW   ra   r   rV   r   r,   ri   propertyrY   rm   listr   r   r   rG   rX   rg   r   r7   r2   r:   r=   r@   rC   r   r   r   rZ   r(   r.   r+   r]   r]   K   s    I::U\\3&''


C
  D(3- %*
!
	ELL	!
T# T ## # #7 7c@S 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\	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"   Nra   r%   c                     [        S5      e)NzStarDep does not have an indexr   r6   s    r+   r#   StarDep.indexF       ""BCCr.   c                 T    [         R                  R                  U R                  5      $ r'   )r   ry   r7   r"   r6   s    r+   r7   StarDep.get_numelK  s    ww  ++r.   r/   c                 j    U R                   U;   a"  [        XR                      U R                  5      $ U $ r'   )r"   r   ra   r1   s     r+   r2   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       5      [        [         R                  R                  U R                  5      5      -  $ ! [         a     gf = fr   r   r6   s    r+   r:   StarDep.numbytes_hintX  r   r   c                      [         R                  R                  R                  U R	                  5       SS9$ ! [
         a     gf = fr   r   r6   s    r+   r=   StarDep.numel_hint`  r   r   c                 L    [        [        U R                  5       5      5      S:  $ r   r   r6   s    r+   r@   StarDep.has_unbacked_symbolsf  r   r.   c                     gNFr(   r6   s    r+   rC   StarDep.is_contiguousi      r.   c                     gr   r(   r6   s    r+   r   StarDep.is_scalarl  r  r.   c                     gr   r(   r6   s    r+   r   StarDep.is_indirecto  r  r.   r(   rI   )rL   rM   rN   rO   rP   rQ   ra   r   r   rR   rS   r#   r7   rX   r2   rV   r   rW   r,   rY   r:   r=   r@   rC   r   r   rZ   r(   r.   r+   r   r   ?  s     ID(3- 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   r6   s    r+   r#   WeakDep.index  r   r.   c                 6    [         R                  R                  $ r'   )rR   r   r   r6   s    r+   r7   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
  r1   s     r+   r2   WeakDep.rename  s3    99799-t/@/@$,,OOr.   c                     gNr   r(   r6   s    r+   r:   WeakDep.numbytes_hint      r.   c                     gr  r(   r6   s    r+   r=   WeakDep.numel_hint  r  r.   c                     gr   r(   r6   s    r+   r@   WeakDep.has_unbacked_symbols  r  r.   c                     gr   r(   r6   s    r+   rC   WeakDep.is_contiguous  r  r.   r(   NrI   )rL   rM   rN   rO   rP   rQ   r
  rV   r   rR   rW   r,   r   rS   r#   r7   rX   r2   rY   r:   r=   r@   rC   rZ   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)
rL   rM   rN   rO   rR   rS   rQ   r   rW   rZ   r(   r.   r+   r  r    s3    ::U\\3&''


C
  r.   r  c                   l   \ rS rSr% \\   \S'   \\   \S'   \\   \S'   Sr\	\
\R                        \S'   Sr\	\   \S'   S\\\4   S	S 4S
 jrS\\\\   4   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	\\R8                     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'   r2   rr   depr/   s     r+   rt   $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+   rt   r*    s     Bkszz'**kr+  )r   r   r!  r"  r#  r$  r   r1   s    `r+   r2   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*   ro   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   )r5  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'   )rw   rx   r!  r"  r6   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   rB  r   r]   r#   rY   rR   r   addr"   )r*   rD  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   rB  r,   )r*   r$   resultr)  s       r+   r,   ReadWrites.get_free_symbol_uses  s6     ,6<((*C..}==F +r.   r(   )ro   r   r%   r   r   rI   )rL   rM   rN   rO   r   r    rQ   r  r$  r   r   rR   rS   r   r   rX   rP   r2   r	   r0  r3  staticmethodr;  r?  r   rB  rV   rH  rW   r,   rZ   r(   r.   r+   r   r     s   c?sOL))-1Jejj)*1&*J#*
d38n 
 


U3
3#78 

\ 

? B\ 2 B| B B
jo 
, 
8(3- 8 C  %*!	ELL	! r.   r   c                   j  ^  \ rS rSrS\S\SS4U 4S jjr\S\\	\
R                  4   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4
S jjrS\S\
R                  S\SS4S jrS\
R                  S\\R4                     SS4S jr  S!S\S\\\
R                  \
R                  \
R                  4   S\S\R4                  S\S\\\\
R                  4      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+   rQ  _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   rR   rS   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   ry   rz   r   r   r   canonicalization_prefixrX   r   r   rR   r   r[  )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  )rV  rU  r   r   ry   rz   simplifyr   r   r[  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'   )rR  rF  r]   rh  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   rY   rl  rR   r   rk  s      r+   	load_seed_RecordLoadStoreInner.load_seedH  s,    %%%%%		$e,-r.   valuera   c                 r    U R                   R                  [        U/U R                  U5      Q7SU065        g )Nra   )rS  rF  r]   rh  )r*   r"   r#   rq  ra   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(rf   )rs  )r*   r"   r#   rq  s       r+   store_reduction%_RecordLoadStoreInner.store_reductionQ  s    

4"25' ;<r.   dtypec                 d    U R                   R                  [        U R                  U5      6 5        g r'   )rT  rF  r  rh  )r*   r#   rx  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)rR  rF  r   )r*   r   r|  r}  r~  r  r  r  s           r+   	bucketize_RecordLoadStoreInner.bucketizeW  sA     	
1./KKOOGF1I./ r.   )rT  rR  rV  rU  rS  r'   NN) rL   rM   rN   rO   r   rV   rQ  rM  r	   rY   rR   rS   r   r[  classmethodr   rW   r   rh  rP   rl  ro  r   rs  rv  torchrx  rz  r   r  rZ   __classcell__rW  s   @r+   r   r     su   19 1 1$ 1 S%**_%

# 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 .# .$ .
 OSPP %

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

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

 G8EKK3H GT G 48&*00 #uzz5::uzzAB0 	0
 0 0 sEJJ/00 !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   rP  rQ  )r*   r   r   r  rW  s       r+   rQ  RecordLoadStore.__init__h  s"    .!
 	7r.   r(   )	rL   rM   rN   rO   r   rV   rQ  rZ   r  r  s   @r+   r  r  g  s"    89 8 8$ 8 8r.   r  rE   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   cntrE   r   s     r+   r   var_builder.<locals>.add_vart  s(    &$s)56
1r.   )rw   countrR   rS   rW   )rE   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)rE   r  r   r   r`   r   s         r+   index_vars_no_squeezer  |  s>     &f-JKS%T84d3w+=&>8D%T &Us   5d)rE   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  )
rE   r  r  r   r   r   ra  r`   new_sizer   s
             r+   index_vars_squeezer    so      %f-J')D,.I'006"GDW!789:  r.   Fr(   )r   rE   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)NrE   r   )LoopBody)r   )r  	loop_bodyr  r   extract_loop_body_with_argsr  r   set_ops_handlerr  rw   rx   from_iterabler   r   rR  rS  rT  )r  r   rE   r  r  r   r   r  innerr7  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   TMPrf  r   memory_usageLOADrl  buffer_name
index_name	LOAD_SEEDro  rY   STORErs  ra   STORE_REDUCTIONrv  
INDEX_EXPRrz  	BUCKETIZEr  )r  r   r   r   r  r  name_to_indexr   r   replrg  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_sizerl   data	get_readsr   r]   r"   rF  r   ry   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
   "E15N'+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"                  4   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\R0                  S\R0                  S\S\S\S   4   S\S\S   4   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+   rQ  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'   )rw   rx   r   r   rR   rS   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(rf   )
r   rR   rS   r  r  r  r  r  r   rP   )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'   rl   )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.   rx  	src_dtypereduction_typerq  c                 2    [        U5      nUS:  a  SU-  $ S $ )Nr   r'   )r   )r*   rx  r  r  rq  
num_valuess         r+   	reductionFreeSymbolsOpsHandler.reductionY  s$     +>:
'1A~w#?4?r.   maskbodyro   c                 @    [        U5      (       d   S5       eU" 5         g )Nz$masked body must always be callable.)callable)r*   r  r  ro   s       r+   maskedFreeSymbolsOpsHandler.maskedc  s    ~~EEE~r.   )r  r  r   )TT)rL   rM   rN   rO   r   rR   rW   rQ   rV   rQ  rP   r   r   rX   r  r	   rY   rS   r  r  r   r  r  r  rx  r   r  r   r  rZ   r(   r.   r+   r  r  5  s   %%Td Td T4S 4c3h 4c3h 4TW 4 	9	9 CO$	9 		9
 	9 
	9s uY/ %%'*%4<SM%	y	%
%%#+C=%:=%KN%	y	%
@{{@ ;;@ &	@
 T5++,@ 
tU9%%	&@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rI   r   )MrT   dataclassesrw   loggingrecollections.abcr   r   r   typingr   r   r   r	   typing_extensionsr
   unittest.mockr   rR   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   	getLoggerrL   r|   compilesearchr   ABCr    	dataclassr]   r   r  r  r   MockHandlerr   KernelFormatterHandlerr  rP   r   rS   rW   r   r   r  r  rV   r  r  r  r^  r  r	  r(   r.   r+   <module>r      s   
    	 8 8 0 0 "    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
 - - 	-
 -`@"+@"
8D$%xUZZ0@'AAB@"F 
1N 1n .2	cEJJ Xejj)* 	
 r.   