
    IЦin              	          S SK r 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J	r	J
r
JrJrJrJr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  SSKJrJr  SS	KJr  SS
KJrJrJ r J!r!J"r"J#r#  SSK$J%r%J&r&J'r'  \" S5      r(\RR                  " \*5      r+\RX                  " S5      RZ                  r. " S S\ R^                  5      r0\Rb                  " SS9 " S S\05      5       r2\Rb                  " SS9 " S S\05      5       r3\Rb                  " SS9 " S S\05      5       r4\Rb                  " SS9 " S S5      5       r5\Rb                   " S S5      5       r6 " S S\'Rn                  5      r8 " S S\'Rr                  5      r:S \;S!\\#\\Rx                  /\Rz                  4   4   4S" jr>S#\\Rx                     S \;4S$ jr?S%S&.S#\\Rx                     S \;4S' jjr@S(S%S)S*.S+\S,\4   S#\\Rx                     S-\AS \;4S. jjrBS9S/ jrCS0S1S!\\
\	\Rx                        \
\	\Rx                        4   4S2 jrDS3 rE " S4 S55      rFS6\FS!\%S   4S7 jrGS:S+\S,\4   4S8 jjrHg);    N)
AnyCallableDictListOptionalSequenceSetTupleTypeVarUnion)patch)free_unbacked_symbols)
OrderedSet   )make_symbolSymT   )index_prevent_reordering)get_dtype_sizereduction_num_outputssympy_index_symbol	sympy_str
sympy_subs	VarRanges)
OpsHandlerReductionTypeVTzindirect|tmpc                   >   \ rS rSr% \\S'   \R                  \S'   \R                  S\
\\4   SS 4S j5       r\R                  S\R                  4S j5       r\R                  S 5       r\R                  S\4S	 j5       r\R                  S\4S
 j5       rSS jrSrg)Dep/   nameindexrenamesreturnc                     g N selfr$   s     [/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torch/_inductor/dependencies.pyrename
Dep.rename3           c                     g r'   r(   r*   s    r+   	get_numelDep.get_numel7   r.   r/   c                     g r'   r(   r1   s    r+   numbytes_hintDep.numbytes_hint;   r.   r/   c                     g r'   r(   r1   s    r+   has_unbacked_symbolsDep.has_unbacked_symbols?   r.   r/   c                     g r'   r(   r1   s    r+   is_contiguousDep.is_contiguousC   r.   r/   c                     U $ r'   r(   )r*   prefixs     r+   normalize_with_stride_orderDep.normalize_with_stride_orderG   s    r/   r(   Nt)__name__
__module____qualname____firstlineno__str__annotations__sympyExprabcabstractmethodr   r,   r2   r5   boolr8   r;   r?   __static_attributes__r(   r/   r+   r    r    /   s    
I::d38n    	5::   	  	d   	t  r/   r    T)frozenc                      \ rS rSr% \\S'   \R                  \S'   \\R                  S4   \S'   \\R                  S4   \S'   Sr
\\   \S'   S	\4S
 jr\S 5       rS rS rSS jrSS jr\S	\\R                  \R                  4   4S j5       rS rS	\R                  4S jrS\\\4   S	S 4S jrS	\4S jrS rS	\4S jr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%   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
MemoryDep())rU   r"   r#   ranges)r*   
maybe_modes     r+   __repr__MemoryDep.__repr__S   sM    
99 dii[)JDII=4::,bj\QRSSr/   c                 ,    [        U R                  5      $ r'   )lenrS   r1   s    r+   num_varsMemoryDep.num_varsY   s    4>>""r/   c                 2   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      [        [#        S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>r   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=%sr   )r`   r_   r#   free_symbolsany	itertoolschainrT   r   graphsizevarsstride_hintsrS   setlogdebug	enumeraterange)r*   otherself_stridesother_stridesire   stride_to_indexorders           r+   decide_loop_order_to_match$MemoryDep.decide_loop_order_to_match]   s    }}... ==C

 7 788>>S!9!9:: PEJJ)OPPP ww''44TZZP((55ekk5??S s< !S%66#;
;  IIs 
 |M 22,5l,CD,CDA14,CD-:;]#];5zSq$--!89999	 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#   dictfromkeysrS   r1   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.
)rQ   r"   _RecordLoadStoreInner
_normalizer#   rZ   rU   r1   s    r+   	normalizeMemoryDep.normalize   sC     II
"--djj$++F
 II
 	
r/   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   rl   rm   rn   r#   rS   sortedrs   r_   __getitem__same_reorderrT   _simplify_loopsr   var_builderr}   zipr   rI   expandrQ   r"   tuplekeysvalues)r*   r>   r   stridesry   stride_reordersizesrS   new_reordered_sizesnew_reordered_var_namesnew_simplified_sizesreindexprune
var_rangesadd_varxreplacement	new_indexouts                      r+   r?   %MemoryDep.normalize_with_stride_order   sP    	'''""//

DNNK uS\*0C0CTR/		NN	,U3"0";/0ww/?/?/O/O#$50
,u *&1
'-AB-A-ABC
 u||DJJ7E			9eJOO4E.FjN_N_NaHbc
 Cs   Fc                 T    [        [        U R                  U R                  5      5      $ )z{c0: 128, c1: 512, ...})r}   r   rS   rT   r1   s    r+   rZ   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#   rS   rT   rU   )rQ   r"   r   rl   rm   simplify_with_rangesr#   rZ   rS   rT   rU   r1   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   rl   r2   r"   r   r#   rh   rI   SOner   rS   rT   )r*   numelvarsvarrT   s        r+   r2   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)rS   rT   rU   )r"   rQ   r#   rS   rT   rU   r)   s     r+   r,   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   rl   rm   	size_hintr2   r   	get_dtyper"   NotImplementedErrorr1   s    r+   r5   MemoryDep.numbytes_hint   b    	77##--dnn.>?.!!$)),C   # 		   A)A, ,
A98A9c                 L    [        [        U R                  5       5      5      S:  $ r   r_   r   r2   r1   s    r+   r8   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#   rI   IntegerSymbolrS   r1   s    r+   r;   MemoryDep.is_contiguous  sA    djj%--00$**ell3T

dnn8TTr/   c                 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)
r_   rS   r   r#   rI   AddargsMulintr   )r*   result_for_complex_expression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#   rI   r   rS   r   r   r   r1   s    r+   	is_scalarMemoryDep.is_scalar#  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"   )rd   vs     r+   rf   (MemoryDep.is_indirect.<locals>.<genexpr>)  s     H0G1;qvv&&0Gs   "$)ri   r#   rh   r1   s    r+   r   MemoryDep.is_indirect(  s    H

0G0GHHHr/   r(   )r%   rQ   rA   T)!rC   rD   rE   rF   rG   rH   rI   rJ   r
   r   rU   r   r\   propertyr`   rz   r   r   r?   r   rZ   r   r2   r,   r   r5   r8   rM   r;   r   r   r   rN   r(   r/   r+   rQ   rQ   K   s"   
I::U\\3&''


C
  D(3-T# T # #7rH

(T 4U\\5::56 4 4
	5:: 		d38n 	 	s @Ut U
-$ -:<4 <
IT Ir/   rQ   c                       \ rS rSr% \\S'   Sr\\   \S'   \S 5       r	S\
R                  4S jrS\\\4   SS 4S	 jrS
 rS rS\4S jrS\4S jrS\4S jrSrg)StarDepi,  r"   NrU   c                     [        S5      e)NzStarDep does not have an indexr   r1   s    r+   r#   StarDep.index2      !"BCCr/   r%   c                 T    [         R                  R                  U R                  5      $ r'   )r   rl   r2   r"   r1   s    r+   r2   StarDep.get_numel6  s    ww  ++r/   r$   c                 j    U R                   U;   a"  [        XR                      U R                  5      $ U $ r'   )r"   r   rU   r)   s     r+   r,   StarDep.rename9  s+    99799-tyy99r/   c                      [         R                  R                  R                  U R	                  5       5      [        [         R                  R                  U R                  5      5      -  $ ! [         a     gf = fr   r   r1   s    r+   r5   StarDep.numbytes_hint>  r   r   c                 L    [        [        U R                  5       5      5      S:  $ r   r   r1   s    r+   r8   StarDep.has_unbacked_symbolsF  r   r/   c                     gNFr(   r1   s    r+   r;   StarDep.is_contiguousI      r/   c                     gr   r(   r1   s    r+   r   StarDep.is_scalarL  r   r/   c                     gr   r(   r1   s    r+   r   StarDep.is_indirectO  r   r/   r(   )rC   rD   rE   rF   rG   rH   rU   r   r   r#   rI   rJ   r2   r   r,   r5   r8   rM   r;   r   r   rN   r(   r/   r+   r   r   ,  s    
ID(3- D D,5:: ,d38n  
@t 4 T r/   r   c                       \ rS rSr% \\S'   \\S'   \S 5       rS\R                  4S jr
S\\\4   SS 4S jrS	 rS
 rS\4S jrSrg)WeakDepi[  r"   mutating_bufc                     [        S5      e)NzWeakDep does not have an indexr   r1   s    r+   r#   WeakDep.indexb  r   r/   r%   c                 6    [         R                  R                  $ r'   )rI   r   r   r1   s    r+   r2   WeakDep.get_numelf  s    ww{{r/   r$   c                 j    U R                   U;   a"  [        XR                      U R                  5      $ U $ r'   )r"   r   r   r)   s     r+   r,   WeakDep.renamei  s-    99799-t/@/@AAr/   c                     gNr   r(   r1   s    r+   r5   WeakDep.numbytes_hintn  s    r/   c                     gr   r(   r1   s    r+   r8   WeakDep.has_unbacked_symbolsq  r   r/   c                     gr   r(   r1   s    r+   r;   WeakDep.is_contiguoust  r   r/   r(   N)rC   rD   rE   rF   rG   rH   r   r#   rI   rJ   r2   r   r,   r5   r8   rM   r;   rN   r(   r/   r+   r   r   [  sd     ID D5:: d38n  
t r/   r   c                       \ rS rSr% \R
                  \S'   \\R                  S4   \S'   \\R
                  S4   \S'   Sr	g)IndexExprDepix  r#   .rS   rT   r(   N)
rC   rD   rE   rF   rI   rJ   rH   r
   r   rN   r(   r/   r+   r  r  x  s3    ::U\\3&''


C
  r/   r  c                      \ rS rSr% \\   \S'   \\   \S'   \\   \S'   Sr\	\
\R                        \S'   Sr\	\   \S'   S\R                   \\4   S	S 4S
 jrS\\\\   4   S	S 4S jrSS jr\S\
S    4S j5       rS rS rSS 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'   r,   rd   depr$   s     r+   rf   $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+   rf   r    s     Bkszz'**kr  )r  r   r  r  r  r  r   r)   s    `r+   r,   ReadWrites.rename  sK    AdjjAABdkkBBOOOO
 	
r/   r  c                 "   [        U[        [        [        45      (       d   e[        U[        5      (       d  U1n[	        [
        R                  " U R                  U5      U R                  U R                  U R                  U R                  5      $ r'   )r   r   r   ro   r  r   unionr  r  r  r  r   )r*   r  s     r+   	with_readReadWrites.with_read  so    ##67777#s##%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*   rt   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  )r  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!c                     [        U R                  U-
  U R                  U R                  U R                  U R
                  5      $ r'   )r  r  r  r  r  r   )r*   	rem_readss     r+   remove_readsReadWrites.remove_reads  s9    JJ"KKOOOO
 	
r/   c                 X    [         R                  " U R                  U R                  5      $ r'   )rj   rk   r  r  r1   s    r+   reads_and_writesReadWrites.reads_and_writes  s    tzz4;;77r/   c                    [        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   rQ   r#   r   rI   r   addr"   )r*   ignore_integer_indexnamesr  s       r+   buffer_namesReadWrites.buffer_names  sh     ",((*Cc9--'z		C/0 0 		#((# + r/   r(   )rt   r  r   )rC   rD   rE   rF   r   r    rH   r  r  r   r   rI   rJ   r   r   typingr   rG   r,   r   r	   r  r  staticmethodr  r#  r&  r,  rN   r(   r/   r+   r  r    s    c?sOL))-1Jejj)*1&*J#*
fkk#s(3 
 


U3C=1 

l 

? B\ 2 B B
8r/   r  c                     ^  \ rS rSrS\S\SS4U 4S jjr\S 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\4S jrS\S\4S jrSS\S\
R                  S\S\4S jjrS\S\4S jrS\
R                  S\4S jr  SS\S\\\
R                  \
R                  \
R                  4   S\S\R2                  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+   r3  _RecordLoadStoreInner.__init__  s6    '1|.8l6@l&0'0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   rI   rJ   rh   pop)r#   rS   r   rh   s       r+   drop_unused_symbols)_RecordLoadStoreInner.drop_unused_symbols  sZ     %,,))IbM=MMOIIK IbM=i=ir/   r#   .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   rl   rm   r   r   r   canonicalization_prefixr}   r   r   rI   r   r=  )clsr#   r   
index_varsr   	new_sizesr   r   new_varsr   r   r   s               r+   r    _RecordLoadStoreInner._normalize  s     *z()
j'')*$%GG$4$4$D$D$eWj@%
!	E ((?(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   )r8  r7  r   r   rl   rm   simplifyr   r   r=  r   itemsr   )r*   r#   r   r   kr   rS   r   s           r+   canonicalize"_RecordLoadStoreInner.canonicalize  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                     U R                   R                  [        U/U R                  U5      Q76 5        SU S[	        U5       S3$ )Nzload(rX   rY   )r4  r)  rQ   rJ  r   r*   r"   r#   s      r+   load_RecordLoadStoreInner.load  sB    	$B):):5)ABCtfBy/022r/   c                 |    [        U[        5      (       d   eU R                  U[        R                  " U5      5      $ r'   )r   r   rN  rI   r   rM  s      r+   	load_seed_RecordLoadStoreInner.load_seed  s/    %%%%%yyu}}U344r/   valuec           	          U R                   R                  [        U/U R                  U5      Q7SU065        SU S[	        U5       SU SU S3	$ )NrU   zstore(rX   rY   )r5  r)  rQ   rJ  r   )r*   r"   r#   rS  rU   s        r+   store_RecordLoadStoreInner.store  sU    4N$*;*;E*BNNOvR	% 01E7"TF!DDr/   c                 .    U R                  XSU S35      $ )Nzstore_reduction(rY   )rU  )r*   r"   r#   rS  s       r+   store_reduction%_RecordLoadStoreInner.store_reduction  s    zz$)9%'BCCr/   c                     U R                   R                  [        U R                  U5      6 5        S[	        U5       SU S3$ )Nzindex_expr(rX   rY   )r6  r)  r  rJ  r   )r*   r#   dtypes      r+   
index_expr _RecordLoadStoreInner.index_expr  sA    lD,=,=e,DEFYu-.bq99r/   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)r4  r)  r   )r*   r   r^  r_  r`  ra  rb  rc  s           r+   	bucketize_RecordLoadStoreInner.bucketize  sA     	
1./KKOOGF1I./ r/   )r6  r4  r8  r7  r5  r'   NN)rC   rD   rE   rF   r   rM   r3  r/  r=  classmethodrI   rJ   r
   r   r   rJ  rG   rN  r   rQ  rU  rX  r\  r   torchr[  r   re  rN   __classcell__r9  s   @r+   r   r     s   19 1 1$ 1   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&3 3UZZ 3C 35c 5# 5E# Eejj E EC EDC D# D:

 :c : 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$ )RecordLoadStorei+  r   r   r%   Nc                 2   > [        XS9n[        TU ]	  US9  g )Nr   r   )parent_handler)r   r2  r3  )r*   r   r   rp  r9  s       r+   r3  RecordLoadStore.__init__,  s"    .!
 	7r/   r(   )	rC   rD   rE   rF   r   rM   r3  rN   rj  rk  s   @r+   rm  rm  +  s"    89 8 8$ 8 8r/   rm  r>   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)rs  r   cntr>   r   s     r+   r   var_builder.<locals>.add_var8  s(    &$s)56
1r/   )rj   countrI   rJ   r   )r>   r   rv  r   s   ` @@r+   r   r   4  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   listmap)r>   ry  r   r   rT   r   s         r+   index_vars_no_squeezer}  @  s<    %f-JKS%T84d3w+=&>8D%T &Us   5d)r>   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|  )
r>   ry  r  r   r   r   rC  rT   new_sizer   s
             r+   index_vars_squeezer  F  sm    %f-J#%D(*I'006"GDW!789:  r/   Fr(   )r   r>   hidden_argsfn.r   c                   [        USU06u  pVSSKJn  [        X5      (       a  [	        U / UQUQXa5      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)Nr>   r   )LoopBody)r   )r  	loop_bodyr  r   extract_loop_body_with_argsrm  r   set_ops_handlerrp  rj   rk   from_iterabler  r   r4  r5  r6  )r  r   r>   r  ry  r   r   r  innerr  r  s              r+   extract_read_writesr  S  s     *8CFCD#"+%$%%z

 Z=r"##{# #!!
;y44T:;
5<< 5==!  #"s   C
C,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   )MemoryUsageTypero  )r  r  r   indexing_from_argsindirect_varsrr   r   r   TMPrH  r   memory_usageLOADrN  buffer_name
index_name	LOAD_SEEDrQ  r   STORErU  rU   STORE_REDUCTIONrX  
INDEX_EXPRr\  	BUCKETIZEre  )r  r   r   r   r  r  name_to_indexrw   r   replrI  entrys               r+   r  r  w  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}-=-=>ejj	
 8 !@!@A}-=-=>	
 B !;!;<'7'78$? =!:!:; 	5$$dD$7tT	
 < L/ 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   rg  N)r   r  r  r  r   get_defining_opget_sizeget_reduction_sizer_   data	get_readsr   rQ   r"   r)  r   rl   try_get_bufferextend)r  r  r  r  rT   reduction_sizer  seen	new_readsreadbufferops               r+   #extract_input_node_reduction_rangesr    s    87
 *,,.??'$$&';: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@    s    r/   c                   
   \ rS rSr% \\R                     \S'   SS jrS\	S\
S\4   4S jr SS\R                  4S	 jjrS
 rS rS rS\R$                  S\R$                  S\S\S\S   4   S\S\S   4   4
S jrSS jrSrg)FreeUnbackedSymbolsOpsHandleri  symbolsr%   Nc                 "    [        5       U l        g r'   )r   r  r1   s    r+   r3  &FreeUnbackedSymbolsOpsHandler.__init__  s    !|r/   r"   .c                    ^  U 4S jnU$ )Nc                  "  > [         R                  " XR                  5       5       Hf  n[        U[        R
                  [        R                  R                  R                  45      (       d  MH  T=R                  [        U5      -  sl	        Mh     g r'   )rj   rk   r   r   rI   rJ   logicboolalgBooleanr  r   )r   kwargsar*   s      r+   r  8FreeUnbackedSymbolsOpsHandler.__getattr__.<locals>.inner  sV    __T==?;a%**ekk.A.A.I.I!JKKLL$9!$<<L <r/   r(   )r*   r"   r  s   `  r+   __getattr__)FreeUnbackedSymbolsOpsHandler.__getattr__  s    	=
 r/   c                     [        U[        R                  [        R                  R                  R
                  45      (       a   eU =R                  [        U5      -  sl        [        S[        U5       S35      $ )N(rY   )
r   rI   rJ   r  r  r  r  r   r   rG   )r*   	index_varrT   checkwrap_negs        r+   indirect_indexing/FreeUnbackedSymbolsOpsHandler.indirect_indexing  s]     i%**ekk6I6I6Q6Q)RSSSS-d33!Ac)n%5Q"788r/   c                     g)Nrg  r(   )r*   r   s     r+   frexp#FreeUnbackedSymbolsOpsHandler.frexp  s    r/   c                     S[        U5      -  $ Nr'   r_   )r*   dtypes
combine_fnr   s       r+   scan"FreeUnbackedSymbolsOpsHandler.scan      V$$r/   c                     S[        U5      -  $ r  r  )r*   r  r   stable
descendings        r+   sort"FreeUnbackedSymbolsOpsHandler.sort  r  r/   r[  	src_dtypereduction_typerS  )N.c                 2    [        U5      nUS:  a  SU-  $ S $ )Nr   r'   )r   )r*   r[  r  r  rS  
num_valuess         r+   	reduction'FreeUnbackedSymbolsOpsHandler.reduction  s$     +>:
'1A~w#?4?r/   c                 @    [        U5      (       d   S5       eU" 5         g )Nz$masked body must always be callable.)callable)r*   maskbodyrt   s       r+   masked$FreeUnbackedSymbolsOpsHandler.masked	  s    ~~EEE~r/   )r  )r%   N)TT)rC   rD   rE   rF   r   rI   r   rH   r3  rG   r   r   r  r  r  r  r  ri  r[  r   r   r
   r  r  rN   r(   r/   r+   r  r    s    %%$ c(:  599	9%%@{{@ ;;@ &	@
 T5++,@ 
tU9%%	&@r/   r  hc                     U $ r'   r(   )r  s    r+   (_typecheck_FreeUnbackedSymbolsOpsHandlerr    s	     Hr/   c                 0   SSK Jn  Ub  X/OU/n[        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#   rindexr  r   handlers         r+   extract_free_unbacked_symbolsr    s{    "$0E?ugD+-G 
		7	#U\\($& 	D	&	# ??	& &	#	# ??s#   A<	A+A<+
A9	5A<<
B)Fr'   )IrK   dataclassesrj   loggingrer.  r   r   r   r   r   r   r	   r
   r   r   unittest.mockr   rI   ri  %torch.fx.experimental.symbolic_shapesr   torch.utils._ordered_setr   utils._sympy.symbolr   r   codegen.commonr   utilsr   r   r   r   r   r   virtualizedr   r   r   r   	getLoggerrC   rp   compilesearchr   ABCr    	dataclassrQ   r   r   r  r  MockHandlerr   KernelFormatterHandlerrm  rG   rJ   r   r   r}  r  rM   r  r  r  r@  r  r  r  r(   r/   r+   <module>r     s   
    	        G / 3 4  6 5 CL!jj)00#'' 8 d#]I ]I $]I@ d##c # $#\ d#c  $8 d#! ! $! A A AHd0AMM d0N8a.. 8	 	i5::,:T1U&U V 	Xejj%9 3  GJ 
(5::"6 
 
  !c!

#! ! 	!HD@"+@"
8D$%xUZZ0@'AAB@"F
+ +\$hsCx&8 r/   