
    9iy                        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  S SKJ	r	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'J(r(  SSK)J*r*J+r+  \" S5      r,\RZ                  " \.5      r/\R`                  " S5      Rb                  r2 " S S\ Rf                  5      r4\Rj                  " SS9 " S S\45      5       r6\Rj                  " SS9 " S S\45      5       r7\Rj                  " SS9 " S S\45      5       r8\Rj                  " SS9 " S S5      5       r9\Rj                   " S S5      5       r: " S  S!\+Rv                  5      r< " S" S#\+Rz                  5      r>S$\?S%\@\(\
\R                  /\R                  4   4   4S& jrCS'\\R                     S$\?S%\@\D\D\R                        \(4   4S( jrES)S*.S'\\R                     S$\?S%\@\D\\R                        \(4   4S+ jjrFS,S)S-S..S/\
S0\	4   S'\\R                     S1\GS$\?S2\\D\R                        S%\:4S3 jjrH SAS/\	S4\D\D\R                        S5\(S1\GS%\<4
S6 jjrIS7S8S%\@\\D\R                        \\D\R                        4   4S9 jrJS%\?4S: jrK " S; S<\!5      rL  SBS/\
S0\	4   S=\\R                     S>\\\R                        S?\GS%\\R                     4
S@ jjrMg)C    N)IterableSequence)AnyCallable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_str
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SS\S\4S jjrSrg)Dep&   nameindexunbacked_onlyreturnc                     g N selfr%   s     \/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/torch/_inductor/dependencies.pyget_free_symbol_usesDep.get_free_symbol_uses*   s     	    renamesc                     g r(   r)   r+   r0   s     r,   rename
Dep.rename0       r/   c                     g r(   r)   r+   s    r,   	get_numelDep.get_numel4   r5   r/   c                     g r(   r)   r7   s    r,   numbytes_hintDep.numbytes_hint8   r5   r/   c                     g r(   r)   r7   s    r,   has_unbacked_symbolsDep.has_unbacked_symbols<   r5   r/   c                     g r(   r)   r7   s    r,   is_contiguousDep.is_contiguous@   r5   r/   prefixc                     U $ r(   r)   )r+   rC   s     r,   normalize_with_stride_orderDep.normalize_with_stride_orderD   s    r/   r)   NFt)__name__
__module____qualname____firstlineno__str__annotations__sympyExprabcabstractmethodboolr   Symbolr-   dictr
   r3   r8   intr;   r>   rA   rE   __static_attributes__r)   r/   r,   r!   r!   &   s   
I::$)!	ELL	! 
 	d38n    	5::   	s   	d   	t  #   r/   r!   T)frozenc                   H   \ 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$S\S
\4S jjr S
\4S jr!S
\4S jr"S r#g)%	MemoryDepH   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_usesP   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
MemoryDep())r_   r#   r$   ranges)r+   
maybe_modes     r,   __repr__MemoryDep.__repr__Y   sM    
99 dii[)JDII=4::,bj\QRSSr/   c                 ,    [        U R                  5      $ r(   )lenr]   r7   s    r,   num_varsMemoryDep.num_vars_   s    4>>""r/   otherc                 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>x   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   )rl   rk   r$   r   any	itertoolschainr^   r   graphsizevarsstride_hintsr]   r   logdebug	enumeraterange)r+   rn   self_stridesother_stridesirr   stride_to_indexorders           r,   decide_loop_order_to_match$MemoryDep.decide_loop_order_to_matchc   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-:;]#];% JuQ/F$GGGG	 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]   r7   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$   rf   r_   r7   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   rx   ry   rz   r$   r]   sortedr~   rk   __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^   r7   s    r,   rf   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   rx   ry   simplify_with_rangesr$   rf   r]   r^   r_   r7   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   rx   r8   r#   r   r$   r   rP   SOner   r]   r^   )r+   numelvarsvarr^   s        r,   r8   MemoryDep.get_numel   s    GG%%dii0E  -7tzz7N7N,ODGGKKE ;	;!LE < r/   r0   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_   r2   s     r,   r3   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   rx   ry   	size_hintr8   r   	get_dtyper#   NotImplementedErrorr7   s    r,   r;   MemoryDep.numbytes_hint   b    	77##--dnn.>?.!!$)),C   # 		   A)A, ,
A98A9c                 L    [        [        U R                  5       5      5      S:  $ r   rk   r   r8   r7   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]   r7   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)
rk   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   r7   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#   )rq   vs     r,   rs   (MemoryDep.is_indirect.<locals>.<genexpr>1  s     H0G1;qvv&&0Gs   "$)ru   r$   r   r7   s    r,   r   MemoryDep.is_indirect0  s    H

0G0GHHHr/   r)   rG   )r&   r[   rH   T)$rJ   rK   rL   rM   rN   rO   rP   rQ   r   rU   r_   r   rT   r   r-   rh   propertyrW   rl   listr   r   r   rE   rV   rf   r   r8   r3   r;   r>   rA   r   r   r   rX   r)   r/   r,   r[   r[   H   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 @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rg)StarDepi4  r#   Nr_   r&   c                     [        S5      e)NzStarDep does not have an indexr   r7   s    r,   r$   StarDep.index:      !"BCCr/   c                 T    [         R                  R                  U R                  5      $ r(   )r   rx   r8   r#   r7   s    r,   r8   StarDep.get_numel>  s    ww  ++r/   r0   c                 j    U R                   U;   a"  [        XR                      U R                  5      $ U $ r(   )r#   r   r_   r2   s     r,   r3   StarDep.renameA  s+    99799-tyy99r/   r%   c                     [        5       $ r(   r   r*   s     r,   r-   StarDep.get_free_symbol_usesF       |r/   c                      [         R                  R                  R                  U R	                  5       5      [        [         R                  R                  U R                  5      5      -  $ ! [         a     gf = fr   r   r7   s    r,   r;   StarDep.numbytes_hintK  r   r   c                 L    [        [        U R                  5       5      5      S:  $ r   r   r7   s    r,   r>   StarDep.has_unbacked_symbolsS  r   r/   c                     gNFr)   r7   s    r,   rA   StarDep.is_contiguousV      r/   c                     gr   r)   r7   s    r,   r   StarDep.is_scalarY  r   r/   c                     gr   r)   r7   s    r,   r   StarDep.is_indirect\  r   r/   r)   rG   )rJ   rK   rL   rM   rN   rO   r_   r   r   rP   rQ   r$   r8   rV   r3   rT   r   rU   r-   rW   r;   r>   rA   r   r   rX   r)   r/   r,   r   r   4  s    
ID(3- Duzz D D,5:: ,d38n   %*!	ELL	!
s @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rg)WeakDepih  r#   mutating_bufFis_faker%   r&   c                     [        5       $ r(   r   r*   s     r,   r-   WeakDep.get_free_symbol_usesu  r   r/   c                     [        S5      e)NzWeakDep does not have an indexr   r7   s    r,   r$   WeakDep.indexz  r   r/   c                 6    [         R                  R                  $ r(   )rP   r   r   r7   s    r,   r8   WeakDep.get_numel~  s    ww{{r/   r0   c                     U R                   U;   a-  [        XR                      U R                  U R                  5      $ U $ r(   )r#   r   r   r   r2   s     r,   r3   WeakDep.rename  s3    99799-t/@/@$,,OOr/   c                     gNr   r)   r7   s    r,   r;   WeakDep.numbytes_hint  s    r/   c                     gr   r)   r7   s    r,   r>   WeakDep.has_unbacked_symbols  r   r/   c                     gr   r)   r7   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$   r8   rV   r3   rW   r;   r>   rA   rX   r)   r/   r,   r   r   h  s     I GT %*!	ELL	!
 Duzz D D5:: d38n  
s 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                   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   r0   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(   r3   rq   depr0   s     r,   rs   $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,   rs   r    s     Bkszz'**kr  )r  r   r  r  r  r  r   r2   s    `r,   r3   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+   rn   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!	rem_readsc                     [        U R                  U-
  U R                  U R                  U R                  U R
                  5      $ r(   )r  r  r  r  r  r   )r+   r0  s     r,   remove_readsReadWrites.remove_reads  s9    JJ"KKOOOO
 	
r/   c                 X    [         R                  " U R                  U R                  5      $ r(   )rv   rw   r  r  r7   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   r5  r   r[   r$   rW   rP   r   addr#   )r+   r7  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   r5  r-   )r+   r%   resultr  s       r,   r-   ReadWrites.get_free_symbol_uses  s6     ,6<((*C..}==F +r/   r)   )rn   r  r&   r  r   rG   )rJ   rK   rL   rM   r   r!   rO   r  r  r   r   rP   rQ   r   r   rV   rN   r3   r	   r#  r&  staticmethodr.  r2  r   r5  rT   r;  rU   r-   rX   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\4S jrS\S\	S\4S jr S S\S\
R                  S\S\\   S\4
S jjrS\S\
R                  S\S\4S jrS\
R                  S\\R4                     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,   rD  _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   rx   ry   r   r   r   canonicalization_prefixrV   r   r   rP   r   rN  )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
  )rI  rH  r   r   rx   ry   simplifyr   r   rN  r   itemsr   )r+   r$   r   r   kr   r]   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(rd   re   )rE  r9  r[   r[  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   rW   r_  rP   r   r^  s      r,   	load_seed_RecordLoadStoreInner.load_seed1  s/    %%%%%yyu}}U344r/   valuer_   c           	          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	$ )Nr_   zstore(rd   re   )rF  r9  r[   r[  r   )r+   r#   r$   rd  r_   s        r,   store_RecordLoadStoreInner.store5  sW     	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(re   )rf  )r+   r#   r$   rd  s       r,   store_reduction%_RecordLoadStoreInner.store_reduction;  s    zz$)9%'BCCr/   dtypec                     U R                   R                  [        U R                  U5      6 5        S[	        U5       SU S3$ )Nzindex_expr(rd   re   )rG  r9  r  r[  r   )r+   r$   rk  s      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)rE  r9  r   )r+   r   ro  rp  rq  rr  rs  rt  s           r,   	bucketize_RecordLoadStoreInner.bucketizeB  sA     	
1./KKOOGF1I./ r/   )rG  rE  rI  rH  rF  r(   NN) rJ   rK   rL   rM   r   rT   rD  r@  r	   rW   rP   rQ   r   rN  classmethodr   rU   r   r[  rN   r_  rb  r   rf  ri  torchrk  rm  r   rv  rX   __classcell__rJ  s   @r,   r   r     sr   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&3 3UZZ 3C 35c 5# 5# 5
 OSEE %

E36E>FsmE	EDC D

 D3 D3 D:

 :8EKK3H :S : 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$ )RecordLoadStoreiR  r   r   r&   Nc                 2   > [        XS9n[        TU ]	  US9  g )Nr   r   )parent_handler)r   rC  rD  )r+   r   r   r  rJ  s       r,   rD  RecordLoadStore.__init__S  s"    .!
 	7r/   r)   )	rJ   rK   rL   rM   r   rT   rD  rX   r{  r|  s   @r,   r~  r~  R  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_var_  s(    &$s)56
1r/   )rv   countrP   rQ   rU   )rC   r   r  r   s   ` @@r,   r   r   [  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  g  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   rT  r^   new_sizer   s
             r,   index_vars_squeezer  o  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  rv   rw   from_iterabler  r   rE  rF  rG  )r  r   rC   r  r  r   r   r  innerr*  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   TMPrY  r   memory_usageLOADr_  buffer_name
index_name	LOAD_SEEDrb  rW   STORErf  r_   STORE_REDUCTIONri  
INDEX_EXPRrm  	BUCKETIZErv  )r  r   r   r   r  r  name_to_indexr   r   replrZ  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   rx  N)r   r  r  r  r   get_defining_opget_sizeget_reduction_sizerk   data	get_readsr   r[   r#   r9  r   rx   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,   rQ  rQ    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)'FreeSymbolsOpsHandleri  symbolsr%   r&   Nc                 ^    [        5       U l        U(       a  [        U l        g [        U l        g r(   )r   r  r   r   get_symbolsr*   s     r,   rD  FreeSymbolsOpsHandler.__init__   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(   )rv   rw   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(re   )
r   rP   rQ   r  r  r  r  r  r   rN   )r+   r  r^   r  r  s        r,   indirect_indexing'FreeSymbolsOpsHandler.indirect_indexing)  sb     i%**ekk6I6I6Q6Q)RSSSS((..!Ac)n%5Q"788r/   r   )N.c                     g)Nrx  r)   )r+   r   s     r,   frexpFreeSymbolsOpsHandler.frexp4  s    r/   dtypes
combine_fnr   c                     S[        U5      -  $ Nr(   rk   )r+   r  r  r   s       r,   scanFreeSymbolsOpsHandler.scan7       V$$r/   stable
descendingc                     S[        U5      -  $ r  r  )r+   r  r   r  r  s        r,   sortFreeSymbolsOpsHandler.sort<  r  r/   rk  	src_dtypereduction_typerd  c                 2    [        U5      nUS:  a  SU-  $ S $ )Nr   r(   )r   )r+   rk  r  r  rd  
num_valuess         r,   	reductionFreeSymbolsOpsHandler.reductionA  s$     +>:
'1A~w#?4?r/   maskbodyrn   c                 @    [        U5      (       d   S5       eU" 5         g )Nz$masked body must always be callable.)callable)r+   r  r  rn   s       r,   maskedFreeSymbolsOpsHandler.maskedK  s    ~~EEE~r/   )r  r  r   )TT)rJ   rK   rL   rM   r   rP   rU   rO   rT   rD  rN   r   r   rV   r  r	   rW   rQ   r  r  r   r  r  rz  rk  r   r  r   r  rX   r)   r/   r,   r  r    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  Q  s}     #$0E?ugD#M2G 	
'"^%5t<
D	 	= 	# ?? 	=< 	#" ??s#   A=
A,A=,
A:	6A==
BrG   r   )NrR   dataclassesrv   loggingrecollections.abcr   r   typingr   r   r   r   r	   typing_extensionsr
   unittest.mockr   rP   rz  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   r   virtualizedr   r   r   	getLoggerrJ   r{   compilesearchr   ABCr!   	dataclassr[   r   r   r  r  MockHandlerr   KernelFormatterHandlerr~  rN   r   rQ   rU   r   r   r  r  rT   r  r  r  rQ  r  r  r)   r/   r,   <module>r     s   
    	 . : : "    2 U / 3 4 '  * CL!jj)00#'' D d#hI hI $hIV d#(c ( $(f d#$c $ $$N d#! ! $! J J JZj0AMM j0Z8a.. 8	 	i5::,:T1U&U V 	

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

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

#$ $ 	$
 $uzz*+$ $V 	--
tEJJ
 - - 	-
 -`@"+@"
8D$%xUZZ0@'AAB@"F 
1N 1n .2	cEJJ Xejj)* 	
 r/   