o
    hJ.                  	   @   s  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 d dlZd dl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eZedjZed ZG d	d
 d
ej Z!G dd dej Z"G dd dej Z#G dd dej Z$ej%G dd dZ&G dd dej'Z(G dd dZ)G dd dej*Z+de,deeeej-gej.f f fddZ/deej-df de,fdd Z0d!d"deej-df de,fd#d$Z1d%d!d&d'edeej-df d(e2de,fd)d*Z3d+d, Z4dS )-    N)CallableDictListOptionalSetTupleUnion   )index_prevent_reordering)get_dtype_size	sympy_str
sympy_subssympy_symbol	VarRanges)Vzindirect|tmp)	MemoryDepStarDepWeakDepc                   @   s   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d Z	e
deejejf fd	d
Zdeeef dd fddZdd ZdefddZdefddZdefddZdS )r   nameindex.	var_namessizec                 C   s   d| j d| j d| j dS )Nz
MemoryDep(, ))r   r   rangesself r   R/var/www/html/ai/venv/lib/python3.10/site-packages/torch/_inductor/dependencies.py__repr__   s   zMemoryDep.__repr__returnc                 C   s   t t| j| jS )z{c0: 128, c1: 512, ...})dictzipr   r   r   r   r   r   r      s   zMemoryDep.rangesrenamesc                 C   s*   | j |v rt|| j  | j| j| jdS | S )N)r   r   )r   r   r   r   r   r   r#   r   r   r   rename$   s
   
zMemoryDep.renamec                 C   sv   |   rtj| j}nt| jj}t	d}t
| j| jD ]\}}||v r*|| }qtjj|ttj| j S Nr	   )is_indirectr   graph	get_numelr   setr   free_symbolssympyIntegerr"   r   r   sizevars	size_hintr   	get_dtype)r   numelvarsvarr   r   r   r   numbytes_hint+   s   
zMemoryDep.numbytes_hintc                 C   s   t | jtjo| j| jv S N)
isinstancer   r,   Symbolr   r   r   r   r   is_contiguous8   s   zMemoryDep.is_contiguousc                 C   s6   t | jtjr| j| jvo|   S t | jttjfS r5   )r6   r   r,   r7   r   r'   intr-   r   r   r   r   	is_scalar;   s   zMemoryDep.is_scalarc                 C   s   t dd | jjD S )Nc                 s   s    | ]}t |jV  qd S r5   )r'   r   .0vr   r   r   	<genexpr>A   s    z(MemoryDep.is_indirect.<locals>.<genexpr>)anyr   r+   r   r   r   r   r'   @      zMemoryDep.is_indirectN)__name__
__module____qualname__str__annotations__r,   Exprr   r7   r   propertyr   r   r%   r4   boolr8   r:   r'   r   r   r   r   r      s   
 
r   c                   @   sn   e Zd ZU eed< edd Zdeeef dd fddZdd	 Z	de
fd
dZde
fddZde
fddZdS )r   r   c                 C      t d)NzStarDep does not have an indexNotImplementedErrorr   r   r   r   r   H      zStarDep.indexr#   r    c                 C      | j |v rt|| j  S | S r5   )r   r   r$   r   r   r   r%   L      
zStarDep.renamec                 C   s*   t jjt j| jtt j| j S r5   )r   r(   r.   r/   r)   r   r   r0   r   r   r   r   r4   Q   s
   zStarDep.numbytes_hintc                 C      dS NFr   r   r   r   r   r8   V      zStarDep.is_contiguousc                 C   rO   rP   r   r   r   r   r   r:   Y   rQ   zStarDep.is_scalarc                 C   rO   rP   r   r   r   r   r   r'   \   rQ   zStarDep.is_indirectN)rA   rB   rC   rD   rE   rG   r   r   r%   r4   rH   r8   r:   r'   r   r   r   r   r   D   s   
 
r   c                   @   sR   e Zd ZU eed< edd Zdeeef dd fddZdd	 Z	de
fd
dZdS )r   r   c                 C   rI   )NzWeakDep does not have an indexrJ   r   r   r   r   r   f   rL   zWeakDep.indexr#   r    c                 C   rM   r5   )r   r   r$   r   r   r   r%   j   rN   zWeakDep.renamec                 C   rO   r&   r   r   r   r   r   r4   o   rQ   zWeakDep.numbytes_hintc                 C   rO   rP   r   r   r   r   r   r8   r   rQ   zWeakDep.is_contiguousN)rA   rB   rC   rD   rE   rG   r   r   r%   r4   rH   r8   r   r   r   r   r   c   s   
 
r   c                   @   s<   e Zd ZU ejed< eejdf ed< eejdf ed< dS )IndexExprDepr   .r   r   N)rA   rB   rC   r,   rF   rE   r   r7   r   r   r   r   rR   v   s   
 
rR   c                   @   s   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< dZejed< dejeef d	d fd
dZded	d fddZdddZede	d  fddZdd Zdd ZdS )
ReadWritesreadswritesindex_exprsN
range_vars
var_ranges	op_countsr#   r    c                    s<   t  fdd| jD  fdd| jD | j| j| j| jdS )Nc                       h | ]}|  qS r   r%   r<   depr#   r   r   	<setcomp>       z$ReadWrites.rename.<locals>.<setcomp>c                    rZ   r   r[   r\   r^   r   r   r_      r`   rY   rS   rT   rU   rV   rW   rX   rY   r$   r   r^   r   r%      s   zReadWrites.renamer]   c                 C   s<   t |ttfs	J tt| j|h| j| j| j	| j
| jdS Nra   )r6   r   r   rS   r*   unionrT   rU   rV   rW   rX   rY   )r   r]   r   r   r   	with_read   s   zReadWrites.with_readotherc                 C   sr   t | j|j}t | j|j}t | j|j}| jd ur,t| j}||jp)i  n|j}t	|| |||dS rc   )
r*   rd   rT   rU   rV   rY   collectionsCounterupdaterS   )r   rf   rT   rU   rV   rY   r   r   r   merge   s   
zReadWrites.mergeread_writesc                 C   sx   t jdd | D  }t jdd | D  | }t jdd | D  }t }| D ]}|jd ur3||j q&t||||dS )Nc                 S      g | ]}|j qS r   )rU   r<   rwr   r   r   
<listcomp>       z)ReadWrites.merge_list.<locals>.<listcomp>c                 S   rl   r   )rT   rm   r   r   r   ro      rp   c                 S   rl   r   )rV   rm   r   r   r   ro      rp   ra   )r*   rd   rg   rh   rY   ri   rS   )rk   
all_writes	all_readsall_index_exprsrY   rn   r   r   r   
merge_list   s   
zReadWrites.merge_listc                 C   s$   t | j| | j| j| j| j| jdS rc   rb   )r   	rem_readsr   r   r   remove_reads   s   zReadWrites.remove_readsc                 C   s   t | j| jS r5   )	itertoolschainrT   rU   r   r   r   r   reads_and_writes   s   zReadWrites.reads_and_writes)rf   rS   )rA   rB   rC   r   DeprE   rR   rW   r   r   r,   rF   rX   r   rY   rg   rh   typingr   rD   r%   re   rj   staticmethodrt   rv   ry   r   r   r   r   rS   |   s   
 


rS   c                	       s   e Zd Zdedef fddZdejdeejeejdf f fdd	Z	d
e
dejde
fddZd
e
defddZdd
e
dejde
de
fddZd
e
de
fddZdejde
fddZde
dejdejdefddZ  ZS )_RecordLoadStoreInnerrX   	normalizec                    s2   t    t | _t | _t | _|| _|| _d S r5   )super__init__r*   _reads_writes_index_exprs_var_ranges
_normalize)r   rX   r~   	__class__r   r   r      s   

z_RecordLoadStoreInner.__init__r   r    .c                    sB  | j s*dd | j D }tdd t| j |D }tdd |D }|||fS |j}dd | j D }g | }g | }tj	j
||t|g||\}}}	tt \}
 tt|| fdd|D }tt||}g |
 }
g |}|j}|
r|
d	 |vr|
  |  |
r|
d	 |vs|t|
t|fS )
Nc                 S   s   g | ]	}t jj|qS r   r   r(   r.   simplifyr<   xr   r   r   ro      s    z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>c                 s   s     | ]\}}|d kr|V  qdS r	   Nr   r<   kr=   r   r   r   r>      s    z5_RecordLoadStoreInner.canonicalize.<locals>.<genexpr>c                 s   s    | ]	}|d kr|V  qdS r   r   r;   r   r   r   r>      s    c                 S   s    i | ]\}}|t jj|qS r   r   r   r   r   r   
<dictcomp>   s    z6_RecordLoadStoreInner.canonicalize.<locals>.<dictcomp>c                    s   g | ]} |qS r   r   r   add_varr   r   ro      s    )r   r   valuestupler"   keysr+   itemsr   r(   r.   _simplify_loopsr
   var_buildercanonicalization_prefixr!   r   r,   expandpop)r   r   sizesr   r+   rX   
index_vars	new_sizesreindexprunenew_varsreplacementr   r   r   canonicalize   s:   

 z"_RecordLoadStoreInner.canonicalizer   c                 C   s4   | j t|g| |R   d| dt| dS )Nzload(r   r   )r   addr   r   r   r   r   r   r   r   r   load   s   z_RecordLoadStoreInner.loadc                 C   s    t |tsJ | |t|S r5   )r6   r9   r   r,   r-   r   r   r   r   	load_seed   s   z_RecordLoadStoreInner.load_seedNvaluec              	   C   s@   | j t|g| |R   d| dt| d| d| d	S )Nzstore(r   r   )r   r   r   r   r   )r   r   r   r   moder   r   r   store   s   "z_RecordLoadStoreInner.storec                 C   s   |  ||d| dS )Nzstore_reduction(r   )r   )r   r   r   r   r   r   r   store_reduction  r@   z%_RecordLoadStoreInner.store_reductionc                 C   s,   | j t| |  dt| d| dS )Nzindex_expr(r   r   )r   r   rR   r   r   )r   r   dtyper   r   r   
index_expr  s   z _RecordLoadStoreInner.index_exproffsets_nameoffsets_sizeindexing_dtyperightc                 C   s8   | j t| d| d| dt| d| d| dS )Nz
bucketize(r   r   )r   r   r   r   )r   r   r   r   r   r   r   r   r   	bucketize	  s   (z_RecordLoadStoreInner.bucketizer5   )rA   rB   rC   r   rH   r   r,   rF   r   r   rD   r   r9   r   r   r   r   torchr   r   __classcell__r   r   r   r   r}      s*    
-r}   c                       s(   e Zd ZdZ fddZdd Z  ZS )
_OpCounterz,Shim to count how many times each op is usedc                    s   t    || _t | _d S r5   )r   r   parent_handlerrg   rh   
_op_counts)r   innerr   r   r   r     s   
z_OpCounter.__init__c                 C   s   | j |  d7  < t| j|S r&   )r   getattrr   )r   r   r   r   r   __getattr__  s   z_OpCounter.__getattr__)rA   rB   rC   __doc__r   r   r   r   r   r   r   r     s    r   c                       s&   e Zd Zdedef fddZ  ZS )RecordLoadStorerX   r~   c                    s&   t ||d}t|}t j|d d S )N)rX   r~   )r   )r}   r   r   r   )r   rX   r~   r   r   r   r   r   #  s
   zRecordLoadStore.__init__)rA   rB   rC   r   rH   r   r   r   r   r   r   r   "  s    r   prefixr    c                    s4   t   t dtjdtjf fdd}|fS )Nlengthr    c                    s    t  t  }| |< |S r5   )r   next)r   r=   cntr   rX   r   r   r   /  s   zvar_builder.<locals>.add_var)rw   countr!   r,   rF   r7   )r   r   r   r   r   r   +  s   r   argsizes.c                 G   s6   t | \}}g }|D ]}|tt|| q
||fS r5   )r   appendlistmap)r   r   rX   r   argsr   r   r   r   index_vars_no_squeeze7  s
   r   d)r   c           
      G   sb   ddl m} t| \}}g }g }|D ]}||\}}	|| ||	tt|| q||fS )Nr	   )SqueezeView)irr   r   squeezerr   r   r   )
r   r   r   rX   r   r   r   r   new_sizer   r   r   r   index_vars_squeeze?  s   
r   F)r~   r   fnr~   c          	      G   s   t |d|i\}}t||d}t| | |  W d    n1 s#w   Y  |r-g }ng tj| }|jj}tt|j	t|j
|j|||jjS )Nr   )r~   )r   r   r   set_ops_handlerrw   rx   r   rS   r*   r   r   r   r   )	r   r~   r   r   r   rX   rn   rW   r   r   r   r   extract_read_writesL  s"   
r   c                   C   rO   )Ncr   r   r   r   r   r   g  rQ   r   )5rg   dataclassesrw   loggingrer{   r   r   r   r   r   r   r   r,   r   codegen.commonr
   utilsr   r   r   r   r   virtualizedr   	getLoggerrA   logcompilesearchr'   rz   
NamedTupler   r   r   rR   	dataclassrS   MockHandlerr}   r   KernelFormatterHandlerr   rD   rF   r7   r   r   r   rH   r   r   r   r   r   r   <module>   sN    $
.CU(	"
