
    Phk<              	          d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
mZmZmZ d dlZd dlZd dlmZ ddlmZ ddlmZmZmZmZmZ ddlmZ  ej8                  e      Z ej>                  d      j@                  Z!ed	   Z" G d
 dejF                        Z$ G d dejF                        Z% G d dejF                        Z& G d dejF                        Z'ejP                   G d d             Z) G d dejT                        Z+ G d d      Z, G d dejZ                        Z.de/deeeej`                  gejb                  f   f   fdZ2deej`                  df   de/fdZ3d d!deej`                  df   de/fd"Z4d#d d$d%edef   deej`                  df   d&e5de/fd'Z6d(d)dee
e	ej`                        e
e	ej`                        f   fd*Z7d+ Z8y),    N)AnyCallableDictListOptionalSetTupleUnion)free_unbacked_symbols   )index_prevent_reordering)get_dtype_size	sympy_str
sympy_subssympy_symbol	VarRanges)Vzindirect|tmp)	MemoryDepStarDepWeakDepc                   >   e Zd ZU eed<   ej                  ed<   eej                  df   ed<   eej                  df   ed<   d Z	e
deej                  ej                  f   fd       Zdej                  fd	Zd
eeef   dd fdZd Zd ZdefdZdefdZdefdZy)r   nameindex.	var_namessizec                 V    d| j                   d| j                   d| j                   dS )Nz
MemoryDep(, ))r   r   rangesselfs    gC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_inductor/dependencies.py__repr__zMemoryDep.__repr__   s)    DII=4::,bQGG    returnc                 T    t        t        | j                  | j                              S )z{c0: 128, c1: 512, ...})dictzipr   r   r    s    r"   r   zMemoryDep.ranges    s     C		233r$   c                 H   | j                         r+t        j                  j                  | j                        }|S t        | j                  j                        }t        j                  d      }t        | j                  | j                        D ]  \  }}||v s||z  } |S Nr   )is_indirectr   graph	get_numelr   setr   free_symbolssympyIntegerr(   r   r   )r!   numelvarsvarr   s        r"   r-   zMemoryDep.get_numel%   s    GG%%dii0E  tzz../DMM!$E ;	T$;!DLE < r$   renamesc                     | j                   |v r:t        || j                      | j                  | j                  | j                        S | S )N)r   r   )r   r   r   r   r   r!   r5   s     r"   renamezMemoryDep.rename0   s@    99		"DJJ$..tyy  r$   c                     t         j                  j                  j                  | j	                               t        t         j                  j                  | j                              z  S Nr   r,   sizevars	size_hintr-   r   	get_dtyper   r    s    r"   numbytes_hintzMemoryDep.numbytes_hint7   H    ww))$..*:;nGGdii(?
 
 	
r$   c                 L    t        t        | j                                     dkD  S Nr   lenr   r-   r    s    r"   has_unbacked_symbolszMemoryDep.has_unbacked_symbols<       ()9:;a??r$   c                 ~    t        | j                  t        j                        xr | j                  | j                  v S r:   )
isinstancer   r0   Symbolr   r    s    r"   is_contiguouszMemoryDep.is_contiguous?   s)    $**ell3T

dnn8TTr$   c                     t        | j                  t        j                        r+| j                  | j                  vxr | j                          S t        | j                  t        t        j                  f      S r:   )rH   r   r0   rI   r   r+   intr1   r    s    r"   	is_scalarzMemoryDep.is_scalarB   sR    djj%,,/::T^^3ND<L<L<N8NN$**sEMM&:;;r$   c                 N    t        d | j                  j                  D              S )Nc              3   F   K   | ]  }t        |j                          y wr:   )r+   r   .0vs     r"   	<genexpr>z(MemoryDep.is_indirect.<locals>.<genexpr>H   s     H0G1;qvv&0Gs   !)anyr   r/   r    s    r"   r+   zMemoryDep.is_indirectG   s    H

0G0GHHHr$   N)__name__
__module____qualname__str__annotations__r0   Exprr	   rI   r#   propertyr   r   r-   r8   r?   rE   boolrJ   rM   r+    r$   r"   r   r      s    
I::U\\3&''


C
  H 4U\\5::56 4 4	5:: 	d38n  

@Ut U<4 <
IT Ir$   r   c                       e Zd ZU eed<   ed        Zdej                  fdZ	de
eef   dd fdZd Zd Zdefd	Zdefd
ZdefdZy)r   r   c                     t        d      )NzStarDep does not have an indexNotImplementedErrorr    s    r"   r   zStarDep.indexO       !"BCCr$   r%   c                 T    t         j                  j                  | j                        S r:   )r   r,   r-   r   r    s    r"   r-   zStarDep.get_numelS   s    ww  ++r$   r5   c                 R    | j                   |v rt        || j                            S | S r:   )r   r   r7   s     r"   r8   zStarDep.renameV   '    997499-..r$   c                     t         j                  j                  j                  | j	                               t        t         j                  j                  | j                              z  S r:   r;   r    s    r"   r?   zStarDep.numbytes_hint[   r@   r$   c                 L    t        t        | j                                     dkD  S rB   rC   r    s    r"   rE   zStarDep.has_unbacked_symbols`   rF   r$   c                      yNFr]   r    s    r"   rJ   zStarDep.is_contiguousc       r$   c                      yri   r]   r    s    r"   rM   zStarDep.is_scalarf   rj   r$   c                      yri   r]   r    s    r"   r+   zStarDep.is_indirecti   rj   r$   N)rU   rV   rW   rX   rY   r[   r   r0   rZ   r-   r   r8   r?   rE   r\   rJ   rM   r+   r]   r$   r"   r   r   K   su    
ID D,5:: ,d38n  


@t 4 T r$   r   c                   z    e Zd ZU eed<   ed        Zdej                  fdZ	de
eef   dd fdZd Zd Zdefd	Zy
)r   r   c                     t        d      )NzWeakDep does not have an indexr`   r    s    r"   r   zWeakDep.indexv   rb   r$   r%   c                 ,    t        j                  d      S r*   )r0   r1   r    s    r"   r-   zWeakDep.get_numelz   s    }}Qr$   r5   c                 R    | j                   |v rt        || j                            S | S r:   )r   r   r7   s     r"   r8   zWeakDep.rename}   re   r$   c                      yr*   r]   r    s    r"   r?   zWeakDep.numbytes_hint   s    r$   c                      yri   r]   r    s    r"   rE   zWeakDep.has_unbacked_symbols   rj   r$   c                      yri   r]   r    s    r"   rJ   zWeakDep.is_contiguous   rj   r$   N)rU   rV   rW   rX   rY   r[   r   r0   rZ   r-   r   r8   r?   rE   r\   rJ   r]   r$   r"   r   r   s   s\    
ID D 5::  d38n  
t r$   r   c                   |    e Zd ZU ej                  ed<   eej                  df   ed<   eej                  df   ed<   y)IndexExprDepr   .r   r   N)rU   rV   rW   r0   rZ   rY   r	   rI   r]   r$   r"   ru   ru      s3    ::U\\3&''


C
  r$   ru   c                   L   e Zd ZU ee   ed<   ee   ed<   ee   ed<   dZee	e
j                        ed<   dZee   ed<    ej                  ej"                        Zej"                  e   ed<   d	ej*                  eef   d
d fdZded
d fdZddZede	d    fd       Zd Zd Zy)
ReadWritesreadswritesindex_exprsN
range_vars
var_ranges)default_factory	op_countsr5   r%   c           	      $   t        | j                  D ch c]  }|j                  |       c}| j                  D ch c]  }|j                  |       c}| j                  | j
                  | j                  | j                        S c c}w c c}w N)r~   )rw   rx   r8   ry   rz   r{   r|   r~   )r!   r5   deps      r"   r8   zReadWrites.rename   sq    ,0JJ7JSSZZ J7,0KK8KSSZZ K8OOOOnn
 	
78s
   BB
r   c                     t        |t        t        f      sJ t        t        j                  | j                  |h      | j                  | j                  | j                  | j                  | j                        S r   )rH   r   r   rw   r.   unionrx   ry   rz   r{   r|   r~   )r!   r   s     r"   	with_readzReadWrites.with_read   s]    #1222IIdjj3%(KKOOOOnn
 	
r$   c                    t         j                  | j                  |j                        }t         j                  | j                  |j                        }t         j                  | j                  |j                        }t        j                  | j                        }|j                  |j                         t        ||z
  |||      S r   )
r.   r   rx   ry   rz   collectionsCounterr~   updaterw   )r!   otherrx   ry   rz   r~   s         r"   mergezReadWrites.merge   s    		$**ekk24;;5ii 0 0%2C2CD''7	)%&.&+SSr$   read_writesc                    t        j                  | D cg c]  }|j                   c} }t        j                  | D cg c]  }|j                   c} |z
  }t        j                  | D cg c]  }|j                   c} }t        j                         }| D ]  }|j                  |j                          t        ||||      S c c}w c c}w c c}w r   )
r.   r   ry   rx   rz   r   r   r   r~   rw   )r   rw
all_writes	all_readsall_index_exprsr~   s         r"   
merge_listzReadWrites.merge_list   s    YY[ A[r[ AB
II;?;R;?@:M	)){%K{bnn{%KL)4)<)<)>	BR\\*  )ZIVV !B?%Ks   CC+Cc                     t        | j                  |z
  | j                  | j                  | j                  | j
                  | j                        S r   )rw   rx   ry   rz   r{   r|   r~   )r!   	rem_readss     r"   remove_readszReadWrites.remove_reads   s@    JJ"KKOOOOnn
 	
r$   c                 V    t        j                  | j                  | j                        S r:   )	itertoolschainrx   ry   r    s    r"   reads_and_writeszReadWrites.reads_and_writes   s    tzz4;;77r$   )r   rw   )rU   rV   rW   r   DeprY   ru   r{   r   r   r0   rZ   r|   r   dataclassesfieldr   r   r~   typingrX   r   r8   r   r   staticmethodr   r   r   r]   r$   r"   rw   rw      s    s8OH\""-1Jejj)*1&*J#*%6[%6%6#++&Iv~~c" 
fkk#s(3 
 
	
S 	
\ 	
T 	W\ 2 	W 	W
8r$   rw   c            	           e Zd Zdedef fdZdej                  deej                  eej                  df   eej                  df   f   fdZ
dedej                  defd	Zdedefd
Zddedej                  dedefdZdedefdZdej                  defdZdedej                  dej&                  defdZ xZS )_RecordLoadStoreInnerr|   	normalizec                     t         |           t               | _        t               | _        t               | _        || _        || _        y r:   )super__init__r.   _reads_writes_index_exprs_var_ranges
_normalize)r!   r|   r   	__class__s      r"   r   z_RecordLoadStoreInner.__init__   s9     #'*u/2u&0 )r$   r   r%   .c                    | j                   s| j                  j                         D cg c]+  }t        j                  j
                  j                  |      - }}t        d t        | j                  j                         |      D              }t        d |D              }|||fS |j                  }| j                  j                         D ci c]/  \  }}|t        j                  j
                  j                  |      1 }}}g |j                         }	t        |j                               }t        j                  j
                  j                  |	|t        |g|	|            \  }
}}t        t                     \  }}t!        t        |	 ||
D cg c]
  } ||       c}                  }t#        t%        j&                  |      |      }g |j                         }g |
}
|j                  }|r1|d   |vr*|j)                          |
j)                          |r|d   |vr*|t        |      t        |
      fS c c}w c c}}w c c}w )Nc              3   2   K   | ]  \  }}|d k7  s|  ywr   Nr]   )rQ   krR   s      r"   rS   z5_RecordLoadStoreInner.canonicalize.<locals>.<genexpr>   s      AdaQ!VAs   c              3   ,   K   | ]  }|d k7  s	|  ywr   r]   rP   s     r"   rS   z5_RecordLoadStoreInner.canonicalize.<locals>.<genexpr>   s     5Ua1f!Us   
)r   r   valuesr   r,   r<   simplifytupler(   keysr/   items_simplify_loopsr   var_buildercanonicalization_prefixr'   r   r0   expandpop)r!   r   xsizesr   r/   r   rR   r|   
index_vars	new_sizesreindexprunenew_varsadd_varreplacements                   r"   canonicalizez"_RecordLoadStoreInner.canonicalize   s    ;?;K;K;R;R;TU;TaQWW%%..q1;TEU !$"2"2"7"7"95A I 5U55E)U**
 )) ((..0
01 qww((++0 	 
 *z()
j'')*$%GG$4$4$D$D$eWj%@%
!	7E ((?(AB'3z7	3R	1GAJ	3R+STU5<<.<%X]]_% iL	))8B<|; LLNMMO	 8B<|;
 eHouY'777O V
" 4Ss   0H<4IIr   c                     | j                   j                  t        |g| j                  |              d| dt	        |       dS )Nzload(r   r   )r   addr   r   r   r!   r   r   s      r"   loadz_RecordLoadStoreInner.load
  sB    	$B):):5)ABCtfBy/022r$   c                 p    t        |t              sJ | j                  |t        j                  |            S r:   )rH   rL   r   r0   r1   r   s      r"   	load_seedz_RecordLoadStoreInner.load_seed  s,    %%%%yyu}}U344r$   valuec           	          | j                   j                  t        |g| j                  |              d| dt	        |       d| d| d	S )Nzstore(r   r   )r   r   r   r   r   )r!   r   r   r   modes        r"   storez_RecordLoadStoreInner.store  sP    4C$*;*;E*BCDvR	% 01E7"TF!DDr$   c                 0    | j                  ||d| d      S )Nzstore_reduction(r   )r   )r!   r   r   r   s       r"   store_reductionz%_RecordLoadStoreInner.store_reduction  s    zz$)9%'BCCr$   c                     | j                   j                  t        | j                  |              dt	        |       d| dS )Nzindex_expr(r   r   )r   r   ru   r   r   )r!   r   dtypes      r"   
index_exprz _RecordLoadStoreInner.index_expr  sA    lD,=,=e,DEFYu-.bq99r$   offsets_nameoffsets_sizeindexing_dtyperightc                     | j                   j                  t        |             d| d| dt        |       d| d| dS )Nz
bucketize(r   r   )r   r   r   r   )r!   r   r   r   r   r   s         r"   	bucketizez_RecordLoadStoreInner.bucketize  sL     	-.F82l^2i6M5NbQ_P``bchbiijkkr$   r:   )rU   rV   rW   r   r\   r   r0   rZ   r	   rI   r   rX   r   rL   r   r   r   r   torchr   r   __classcell__r   s   @r"   r   r      s   *9 * *+8ZZ+8	uzz5s!23U5::s?5KK	L+8Z3 3UZZ 3C 35c 5# 5E# Eejj E EC EDC D# D:

 :c :	l 	l jj		l
 	l 	lr$   r   c                   (     e Zd ZdZ fdZd Z xZS )
_OpCounterz,Shim to count how many times each op is usedc                 b    t         |           || _        t        j                         | _        y r:   )r   r   parent_handlerr   r   
_op_counts)r!   innerr   s     r"   r   z_OpCounter.__init__,  s&    #/:/B/B/Dr$   c                 \    | j                   |xx   dz  cc<   t        | j                  |      S r*   )r   getattrr   )r!   r   s     r"   __getattr__z_OpCounter.__getattr__1  s)    "t**D11r$   )rU   rV   rW   __doc__r   r   r   r   s   @r"   r   r   )  s    6E
2r$   r   c                   (     e Zd Zdedef fdZ xZS )RecordLoadStorer|   r   c                 V    t        ||      }t        |      }t        |   |       y )N)r|   r   )r   )r   r   r   r   )r!   r|   r   r   r   s       r"   r   zRecordLoadStore.__init__7  s.    .!Y
 $N37r$   )rU   rV   rW   r   r\   r   r   r   s   @r"   r   r   6  s    89 8 8 8r$   r   prefixr%   c                      t        j                         t               dt        j                  dt        j
                  f fd}|fS )Nlengthr%   c                 B    t         t                     }| |<   |S r:   )r   next)r   rR   cntr   r|   s     r"   r   zvar_builder.<locals>.add_varC  s(    F8DI;/0
1r$   )r   countr'   r0   rZ   rI   )r   r   r   r|   s   ` @@r"   r   r   ?  s>    
//
C FJ

 u|| 
 wr$   argsizes.c           	          t        |       \  }}g }|D ]&  }|j                  t        t        ||                   ( ||fS r:   )r   appendlistmap)r   r   r|   r   argsr   s         r"   index_vars_no_squeezer   K  sC    %f-J%'DDWd+,- r$   d)r   c                     ddl m} t        |       \  }}g }g }|D ]Q  }|j                  |      \  }}	|j	                  |       |j	                   |	t        t        ||                         S ||fS )Nr   )SqueezeView)irr   r   squeezerr   r   r   )
r   r   r   r|   r   r   r   r   new_sizer   s
             r"   index_vars_squeezer   S  su    %f-J#%D(*I'006'"GDWh!789:  r$   F)r   r   fnr   c                   t        |d|i\  }}t        ||      }t        j                  |      5   | |  d d d        |rg }ng t	        j
                  | }|j                  j                  }t        t        |j                        t        |j                        |j                  |||j                  j                        S # 1 sw Y   xY w)Nr   )r   )r   r   r   set_ops_handlerr   r   r   rw   r.   r   r   r   r   )	r   r   r   r   r   r|   r   r{   r   s	            r"   extract_read_writesr  `  s     *8CFCD*	y	9B	
		2	
D	 
 
.y-.
,,EELLEMM
$$  
	s   CC
input_nodeztorch._inductor.ir.TensorBoxc                    ddl m}m} t        | j                  |      r3| j                         }| j                         }t        |      dkD  r||fS yt        | j                  j                  |      sy| j                         }d}d}|9t        |      dkD  r*t               }g }|D ]  }t        |t              s|j                  |v r#|j                  |j                         t        j                  j                  |j                        }	|	jt        |	|      rht        |	j                               dkD  rL|!|	j                         }|	j                         }||	j                         k7  s||	j                         k7  s y|j!                  |	j                                 ||k(  r||fS |}|t        |      dkD  r*||fS )aX  
    Returns the size and reduction size of all inputs, if the sizes and reduction_sizes (if exist) are all the same.
    It's possible that a node has multiple inputs, some are Reduction nodes and others are Pointwise nodes.
    In this case, reduction_sizes of the Reduction nodes need to be the same.
    Otherwise returns (None, None).
    r   )ComputedBufferLoopsr   )NNN)r   r  r  rH   dataget_sizeget_reduction_sizerD   	get_readsr.   r   r   r   r   r,   
get_bufferextend)
r  r  r  r   reduction_sizerx   seen	new_readsreadbuffers
             r"   #extract_input_node_reduction_rangesr  {  s    **//>2""$#668~".))joo**E2
   "END

 SZ!^u	DdI.yyD HHTYYWW''		2F~6>21134q8!)%+%>%>%@N!??,D"f&?&?&AAv00'  !1!1!34- . I.))E; 
 SZ!^< .!!r$   c                       y)Ncr]   r]   r$   r"   r   r     s    r$   )9r   r   r   loggingrer   r   r   r   r   r   r   r	   r
   r0   r   %torch.fx.experimental.symbolic_shapesr   codegen.commonr   utilsr   r   r   r   r   virtualizedr   	getLoggerrU   logcompilesearchr+   r   
NamedTupler   r   r   ru   	dataclassrw   MockHandlerr   r   KernelFormatterHandlerr   rX   rZ   rI   r   r   r   r\   r  r  r   r]   r$   r"   <module>r"     s       	  I I I   G 4 Q Q g!bjj)00-.1I!! 1Ihf Pf 2!6$$ ! >8 >8 >8BRlAMM Rlj
2 
28a.. 8	 	i5::,:T1U&U V 	U5::s?%; S  IL 
%

C"8 
# 
  	cUZZ_%  	6=".="
8D$%xUZZ0@'AAB="@r$   