a
    dz)                     @   s  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mZ ddlmZmZmZmZmZmZ ddlmZ ee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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Z,ddeej)df e(ddd Z-d!dd"eeej)df e.e(d#d$d%Z/d&d' Z0dS )(    N)CallablecastDictListOptionalSetTupleUnion   )index_prevent_reordering)get_dtype_sizesympy_product	sympy_str
sympy_subssympy_symbol	VarRanges)V)	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 dddZ	d dd	d
Z
d dddZeeef d dddZdd ZedddZdS )r   nameindex.size)extra_sizesreturnc                 C   s*   g | j dd |D R }t| j| j|S )Nc                 S   s   g | ]}|d kr|qS r
    .0xr   r   e/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/_inductor/dependencies.py
<listcomp>        z4MemoryDep.broadcast_extend_sizes.<locals>.<listcomp>)r   r   r   r   )selfr   r   r   r   r    broadcast_extend_sizes   s    z MemoryDep.broadcast_extend_sizesr   c                 C   s   t | jdkrt | jjdkrttj| jjt d krt }| jd | jd f}t	|d }t	|d }t
| j||i}t| j||S | S d S )N   r   0r
   1)lenr   r   argsr   sympySymbolr   canonicalization_prefixr   r   r   )r#   cr   s0s1r   r   r   r    maybe_swap_sizes#   s    zMemoryDep.maybe_swap_sizesc                    s   t | j}|dkr&t | jj|d ks*| S t }t |  fddtttj | jj	D }t |dksv||v svJ d| t | jd  }|| jj	vr| jd d }t
| j| j|S | S d S )Nr
   c                    s   g | ]}|j d   qS N)r   )r   fsZ
len_prefixr   r    r!   ;   s   z-MemoryDep.strip_last_size.<locals>.<listcomp>r   z5index expression should contain canonicalized symbols)r)   r   r   r*   r-   r   r   r+   r,   free_symbolsr   r   )r#   Znsizesprefixprefixes
last_indexr   r   r4   r    strip_last_size4   s&    


zMemoryDep.strip_last_sizerenamesr   c                 C   s$   | j |v r t|| j  | j| jS | S r2   )r   r   r   r   r#   r<   r   r   r    renameI   s    
zMemoryDep.renamec                    s   t  jj}g }|D ]>}|jt rd|jvs4J |t|jtt d   qt	j
jt fdd|D tt	j
 j S )N c                    s   g | ]} j | qS r   )r   )r   ir#   r   r    r!   X   r"   z+MemoryDep.numbytes_hint.<locals>.<listcomp>)setr   r6   r   
startswithr-   appendintr)   r   graphsizevars	size_hintr   r   	get_dtype)r#   varsZsize_vars_usedvarr   rA   r    numbytes_hintN   s     zMemoryDep.numbytes_hintc                 C   s   t | jtjtjfS r2   )
isinstancer   r+   r,   ZIntegerrA   r   r   r    is_contiguous[   s    zMemoryDep.is_contiguousN)__name__
__module____qualname__str__annotations__r+   Exprr   r   r$   r1   r:   r   r>   rL   boolrN   r   r   r   r    r      s   

r   c                   @   sD   e Zd ZU eed< eeef d dddZdd Zeddd	Z	d
S )r   r   r;   c                 C   s   | j |v rt|| j  S | S r2   )r   r   r=   r   r   r    r>   c   s    
zStarDep.renamec                 C   s   ddl m} | jtjjv r*tjj| j }n"| jtjjv rHtjj| j }ndS t|drft|j	|rfdS tjj
t| t|  S )Nr
   )MultiOutputLayoutlayout)irrV   r   r   rF   Zname_to_bufferZgraph_inputshasattrrM   rW   rG   rH   r   get_sizer   rI   )r#   rV   bufr   r   r    rL   h   s    

zStarDep.numbytes_hintr%   c                 C   s   dS NFr   rA   r   r   r    rN   x   s    zStarDep.is_contiguousN
rO   rP   rQ   rR   rS   r   r>   rL   rU   rN   r   r   r   r    r   _   s   
r   c                   @   sD   e Zd ZU eed< eeef d dddZdd Zeddd	Z	d
S )r   r   r;   c                 C   s   | j |v rt|| j  S | S r2   )r   r   r=   r   r   r    r>      s    
zWeakDep.renamec                 C   s   dS )Nr
   r   rA   r   r   r    rL      s    zWeakDep.numbytes_hintr%   c                 C   s   dS r\   r   rA   r   r   r    rN      s    zWeakDep.is_contiguousNr]   r   r   r   r    r      s   
r   c                   @   s*   e Zd ZU ejed< eejdf ed< dS )IndexExprDepr   .r   N)rO   rP   rQ   r+   rT   rS   r   r   r   r   r    r^      s   

r^   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< ejeef d ddd	Zed d
ddZdd Zdd ZdS )
ReadWritesreadswritesindex_exprsN
range_vars
var_rangesr;   c                    s6   t  fdd| jD  fdd| jD | j| j| jS )Nc                    s   h | ]}|  qS r   r>   r   depr<   r   r    	<setcomp>   r"   z$ReadWrites.rename.<locals>.<setcomp>c                    s   h | ]}|  qS r   re   rf   rh   r   r    ri      r"   r_   r`   ra   rb   rc   rd   r=   r   rh   r    r>      s    zReadWrites.rename)rg   r   c                 C   s6   t |ttfsJ tt| j|h| j| j| j	| j
S r2   )rM   r   r   r_   rB   unionr`   ra   rb   rc   rd   )r#   rg   r   r   r    	with_read   s    zReadWrites.with_readc                 C   s@   t | j|j}t | j|j}t | j|j}t|| ||S r2   )rB   rk   r`   ra   rb   r_   )r#   otherr`   ra   rb   r   r   r    merge   s    zReadWrites.mergec                 C   s   t | j| | j| j| j| jS r2   rj   )r#   Z	rem_readsr   r   r    remove_reads   s    zReadWrites.remove_reads)rO   rP   rQ   r   DeprS   r^   rc   r   r   r+   rT   rd   r   typingr   rR   r>   rl   rn   ro   r   r   r   r    r_      s   
	

r_   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de
eje
e
dddZe
e
dddZeje
dddZ  ZS )_RecordLoadStoreInnerrd   	normalizec                    s2   t    t | _t | _t | _|| _|| _d S r2   )super__init__rB   _reads_writes_index_exprs_var_ranges
_normalize)r#   rd   rt   	__class__r   r    rv      s    
z_RecordLoadStoreInner.__init__.)r   r   c           	         s   t | j }dd |D }| js8|tdd |D fS t | j }tjj	||t
|g||\}}}tt \} tt|| fdd|D }tt||}|t|fS )Nc                 S   s   g | ]}t jj|qS r   )r   rF   rG   Zsimplifyr   r   r   r    r!      r"   z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>c                 S   s   g | ]}|d kr|qS r   r   r   r   r   r    r!      r"   c                    s   g | ]} |qS r   r   r   add_varr   r    r!      r"   )listrz   valuesr{   tuplekeysr   rF   rG   Z_simplify_loopsr   var_builderr-   dictzipr   r+   expand)	r#   r   sizesZ
index_vars	new_sizesreindexZprune_replacementr   r~   r    canonicalize   s    
 z"_RecordLoadStoreInner.canonicalize)r   r   r   c                 C   s8   |  |\}}| jt||| d| dt| dS )Nzload(, ))r   rw   addr   r   )r#   r   r   canonicalized_indexcanonicalized_sizer   r   r    load   s    z_RecordLoadStoreInner.loadN)r   r   valuer   c              	   C   sD   |  |\}}| jt||| d| dt| d| d| d	S )Nzstore(r   r   )r   rx   r   r   r   )r#   r   r   r   moder   r   r   r   r    store   s    z_RecordLoadStoreInner.store)r   r   c              	   C   s   |  ||d| d| dS )NZreduce_z)(r   )r   )r#   r   dtypeZ	src_dtypeZreduction_typer   r   r   r   r    	reduction   s    z_RecordLoadStoreInner.reductionc                 C   s6   |  |\}}| jt|| dt| d| dS )Nzindex_expr(r   r   )r   ry   r   r^   r   )r#   r   r   r   r   r   r   r    
index_expr   s    z _RecordLoadStoreInner.index_expr)N)rO   rP   rQ   r   rU   rv   r+   rT   r   r   rR   r   r   r   r   __classcell__r   r   r|   r    rr      s   	rr   c                       s$   e Zd Zeed fddZ  ZS )RecordLoadStorers   c                    s   t ||d}t j|d d S )Nrs   )parent_handler)rr   ru   rv   )r#   rd   rt   r   r|   r   r    rv      s    zRecordLoadStore.__init__)rO   rP   rQ   r   rU   rv   r   r   r   r|   r    r      s   r   )r7   r   c                    s4   t   t tjtjd fdd}|fS )N)lengthr   c                    s    t  t  }| |< |S r2   )r   next)r   vZcntr7   rd   r   r    r     s    zvar_builder.<locals>.add_var)	itertoolscountcollectionsOrderedDictr+   rT   r,   )r7   r   r   r   r    r     s    r   .)argsizesr7   c                 G   s6   t | \}}g }|D ]}|tt|| q||fS r2   )r   rD   r   map)r7   r   rd   r   r*   r   r   r   r    index_vars_no_squeeze  s
    r   d)r7   c           
      G   sd   ddl m} t| \}}g }g }|D ]4}||\}}	|| ||	tt|| q$|||fS )Nr
   )SqueezeView)rX   r   r   ZsqueezerrD   r   r   )
r7   r   r   rd   r   r*   r   r   Znew_sizer   r   r   r    index_vars_squeeze  s    
r   F)rt   r7   )fnr   rt   r7   c          
      G   s   t |d|i\}}}t||d}t| | |  W d    n1 sH0    Y  |r\g }ng tj| }|j}	tt|	j	t|	j
|	j||S )Nr7   )rt   )r   r   r   Zset_ops_handlerr   chainr   r_   rB   rw   rx   ry   )
r   rt   r7   r   r   r*   rd   rwrc   innerr   r   r    extract_read_writes#  s    &r   c                   C   s   dS )Nr.   r   r   r   r   r    r-   =  s    r-   )1r   Zdataclassesr   loggingrq   r   r   r   r   r   r   r   r	   r+   Zcodegen.commonr   utilsr   r   r   r   r   r   Zvirtualizedr   	getLoggerrO   logrp   
NamedTupler   r   r   r^   Z	dataclassr_   ZMockHandlerrr   ZKernelFormatterHandlerr   rR   rT   r,   r   r   r   rU   r   r-   r   r   r   r    <module>   s>   ( 
E .8& 