U
    9%eJ.                     @   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+e,eeeej-gej.f f dddZ/eej-df e,dddZ0d d!eej-df e,dd"d#Z1d$d d%eeej-df e2e,d&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
eejejf dd	d
Zeeef d dddZdd ZedddZedddZed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   [/var/www/html/Darija-Ai-API/env/lib/python3.8/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renamesr!   c                 C   s*   | j |k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 ]\}}||k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   Znumelvarsvarr   r   r   r   numbytes_hint+   s    

zMemoryDep.numbytes_hintc                 C   s   t | jtjo| j| jk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ko"|   S t | jttjfS r6   )r7   r   r.   r8   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 r6   )r)   r   .0vr   r   r   	<genexpr>A   s     z(MemoryDep.is_indirect.<locals>.<genexpr>)anyr   r-   r   r   r   r   r)   @   s    zMemoryDep.is_indirectN)__name__
__module____qualname__str__annotations__r.   Exprr   r8   r   propertyr   r   r'   r5   boolr9   r;   r)   r   r   r   r   r      s   

r   c                   @   sl   e Zd ZU eed< edd Zeeef d dddZdd Z	e
d	d
dZe
d	ddZe
d	ddZdS )r   r   c                 C   s   t dd S )NzStarDep does not have an indexNotImplementedErrorr   r   r   r   r   H   s    zStarDep.indexr$   c                 C   s   | j |krt|| j  S | S r6   )r   r   r&   r   r   r   r'   L   s    
zStarDep.renamec                 C   s*   t jjt j| jtt j| j S r6   )r   r*   r0   r1   r+   r   r   r2   r   r   r   r   r5   Q   s
    zStarDep.numbytes_hintr    c                 C   s   dS NFr   r   r   r   r   r9   V   s    zStarDep.is_contiguousc                 C   s   dS rK   r   r   r   r   r   r;   Y   s    zStarDep.is_scalarc                 C   s   dS rK   r   r   r   r   r   r)   \   s    zStarDep.is_indirectN)rA   rB   rC   rD   rE   rG   r   r   r'   r5   rH   r9   r;   r)   r   r   r   r   r   D   s   

r   c                   @   sP   e Zd ZU eed< edd Zeeef d dddZdd Z	e
d	d
dZdS )r   r   c                 C   s   t dd S )NzWeakDep does not have an indexrI   r   r   r   r   r   f   s    zWeakDep.indexr$   c                 C   s   | j |krt|| j  S | S r6   )r   r   r&   r   r   r   r'   j   s    
zWeakDep.renamec                 C   s   dS r(   r   r   r   r   r   r5   o   s    zWeakDep.numbytes_hintr    c                 C   s   dS rK   r   r   r   r   r   r9   r   s    zWeakDep.is_contiguousN)rA   rB   rC   rD   rE   rG   r   r   r'   r5   rH   r9   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   r8   r   r   r   r   rL   v   s   

rL   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< ejeef d dd	d
Zed dddZd dddZee	d  dddZdd Zdd ZdS )
ReadWritesreadswritesindex_exprsN
range_vars
var_ranges	op_countsr$   c                    s<   t  fdd| jD  fdd| jD | j| j| j| jdS )Nc                    s   h | ]}|  qS r   r'   r=   depr%   r   r   	<setcomp>   s     z$ReadWrites.rename.<locals>.<setcomp>c                    s   h | ]}|  qS r   rT   rU   rW   r   r   rX      s     rS   rM   rN   rO   rP   rQ   rR   rS   r&   r   rW   r   r'      s    zReadWrites.rename)rV   r!   c                 C   s<   t |ttfsttt| j|h| j| j	| j
| j| jdS NrY   )r7   r   r   AssertionErrorrM   r,   unionrN   rO   rP   rQ   rR   rS   )r   rV   r   r   r   	with_read   s    zReadWrites.with_read)otherc                 C   sr   t | j|j}t | j|j}t | j|j}| jd k	rXt| j}||jpRi  n|j}t	|| |||dS r[   )
r,   r]   rN   rO   rP   rS   collectionsCounterupdaterM   )r   r_   rN   rO   rP   rS   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 k	rL||j qLt||||dS )Nc                 S   s   g | ]
}|j qS r   )rO   r=   rwr   r   r   
<listcomp>   s     z)ReadWrites.merge_list.<locals>.<listcomp>c                 S   s   g | ]
}|j qS r   )rN   re   r   r   r   rg      s     c                 S   s   g | ]
}|j qS r   )rP   re   r   r   r   rg      s     rY   )r,   r]   r`   ra   rS   rb   rM   )rd   Z
all_writesZ	all_readsZall_index_exprsrS   rf   r   r   r   
merge_list   s    
zReadWrites.merge_listc                 C   s$   t | j| | j| j| j| j| jdS r[   rZ   )r   Z	rem_readsr   r   r   remove_reads   s    zReadWrites.remove_readsc                 C   s   t | j| jS r6   )	itertoolschainrN   rO   r   r   r   r   reads_and_writes   s    zReadWrites.reads_and_writes)rA   rB   rC   r   DeprE   rL   rQ   r   r   r.   rF   rR   r   rS   r`   ra   typingr   rD   r'   r^   rc   staticmethodrh   ri   rl   r   r   r   r   rM   |   s   


rM   c                       s   e Zd Zeed fddZejeejeejdf f dddZ	e
eje
dd	d
Ze
edddZde
eje
e
dddZe
e
dddZeje
dddZe
ejejedddZ  ZS )_RecordLoadStoreInnerrR   	normalizec                    s2   t    t | _t | _t | _|| _|| _d S r6   )super__init__r,   _reads_writes_index_exprs_var_ranges
_normalize)r   rR   rr   	__class__r   r   rt      s    
z_RecordLoadStoreInner.__init__.)r   r!   c                    s0  | j sTdd | j D }tdd t| j |D }tdd |D }|||fS |j}dd | j D }| }| }tj	j
||t|g||\}}}	tt \}
 tt|| fdd|D }tt||}|
 }
|}|j}|
r|
d	 |kr|
  |  q|t|
t|fS )
Nc                 S   s   g | ]}t jj|qS r   r   r*   r0   simplifyr=   xr   r   r   rg      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   rg      s     )ry   rx   valuestupler#   keysr-   itemsr   r*   r0   Z_simplify_loopsr
   var_buildercanonicalization_prefixr"   r   r.   expandpop)r   r   sizesr   r-   rR   Z
index_vars	new_sizesreindexZpruneZnew_varsreplacementr   r   r   canonicalize   s8    



 

z"_RecordLoadStoreInner.canonicalize)r   r   r!   c                 C   s2   | j t|f| |  d| dt| dS )Nzload(r   r   )ru   addr   r   r   r   r   r   r   r   r   load   s    z_RecordLoadStoreInner.load)r   r   c                 C   s    t |tst| |t|S r6   )r7   r:   r\   r   r.   r/   r   r   r   r   	load_seed   s    z_RecordLoadStoreInner.load_seedN)r   r   valuer!   c              	   C   s>   | j t|f| |  d| dt| d| d| d	S )Nzstore(r   r   )rv   r   r   r   r   )r   r   r   r   moder   r   r   store   s    z_RecordLoadStoreInner.store)r   r!   c                 C   s   |  ||d| dS )Nzstore_reduction(r   )r   )r   r   r   r   r   r   r   store_reduction  s    z%_RecordLoadStoreInner.store_reductionc                 C   s,   | j t| |  dt| d| dS )Nzindex_expr(r   r   )rw   r   rL   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   )ru   r   r   r   )r   r   r   r   r   r   r   r   r   	bucketize	  s    z_RecordLoadStoreInner.bucketize)N)rA   rB   rC   r   rH   rt   r.   rF   r   r   rD   r   r:   r   r   r   r   torchr   r   __classcell__r   r   rz   r   rp      s   	-rp   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 r6   )rs   rt   parent_handlerr`   ra   
_op_counts)r   innerrz   r   r   rt     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__rt   r   r   r   r   rz   r   r     s   r   c                       s$   e Zd Zeed fddZ  ZS )RecordLoadStorerq   c                    s&   t ||d}t|}t j|d d S )Nrq   )r   )rp   r   rs   rt   )r   rR   rr   r   rz   r   r   rt   #  s     zRecordLoadStore.__init__)rA   rB   rC   r   rH   rt   r   r   r   rz   r   r   "  s   r   )prefixr!   c                    s2   t   t tjtjd fdd}|fS )N)lengthr!   c                    s    t  t  }| |< |S r6   )r   next)r   r>   Zcntr   rR   r   r   r   /  s    zvar_builder.<locals>.add_var)rj   countr"   r.   rF   r8   )r   r   r   r   r   r   +  s    r   .)argsizesr   c                 G   s6   t | \}}g }|D ]}|tt|| q||fS r6   )r   appendlistmap)r   r   rR   r   argsr   r   r   r   index_vars_no_squeeze7  s
    r   d)r   c           
      G   sb   ddl m} t| \}}g }g }|D ]4}||\}}	|| ||	tt|| q$||fS )Nr	   )SqueezeView)Zirr   r   Zsqueezerr   r   r   )
r   r   r   rR   r   r   r   r   new_sizer   r   r   r   index_vars_squeeze?  s    
r   F)rr   r   )fnr   rr   r   c          	   	   G   s~   t |d|i\}}t||d}t| | |  W 5 Q R X |rFg }ntj| }|jj}tt|j	t|j
|j|||jjS )Nr   )rr   )r   r   r   Zset_ops_handlerrj   rk   r   rM   r,   ru   rv   rw   r   )	r   rr   r   r   r   rR   rf   rQ   r   r   r   r   extract_read_writesL  s     r   c                   C   s   dS )Ncr   r   r   r   r   r   g  s    r   )5r`   dataclassesrj   loggingrern   r   r   r   r   r   r   r   r.   r   Zcodegen.commonr
   utilsr   r   r   r   r   Zvirtualizedr   	getLoggerrA   logcompilesearchr)   rm   
NamedTupler   r   r   rL   	dataclassrM   ZMockHandlerrp   r   ZKernelFormatterHandlerr   rD   rF   r8   r   r   r   rH   r   r   r   r   r   r   <module>   sF   $
.CU	& 