a
    d5                     @   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 d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ ddlmZmZ eeZejjZe
ejejejejejejejejejej ej!ej"ej#ej$ej%gZ&i e	 e&Z'dd	 Z(e(ej)gedFd
dZ)e(ej*j+gdd Z,dd Z-eedddZ.dd Z/dd Z0e(ej1gdddddZ1dd Z2dGddZ3e(ej4gdd Z5d d! Z6e(ej7gd"d# Z8d$d% Z9e(ej:gd&d' Z:e(ej;gd(d) Z;e(ej<j=gdHd*d+Z>e(ej?j+gd,d- Z?e(ej?j@gdId/d0ZAe(ejBdJd1d2ZBe(ejCgdKd3d4ZCe(ejDgd5d6 ZDe(ejEejFgd7d8 ZEe(ejGj+gdd9d:d;ZGe
ejHejIejJejKejLejMejNejOejPejQg
ZRe jSej(eRd<ZTeTejUgdLd>d?ZUeTejGjVgdMdd9d@dAZWe XddBdC ZYdDdE ZZdS )N    N)Tensor)core_aten_decompositionsget_decompositions)pw_cast_for_opmath)no_dispatch   )configutilsc                 C   s<   t | r| gn| D ]}|tv rtd|   qt| tS )Nzduplicate decomp: )callabledecompositionslogwarningdecompregister_decomposition)opsop r   f/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/_inductor/decomposition.pyr   (   s    r   c                 C   s(   |d ur|  |} |d ur$| |} | S N)Z	clamp_minZ	clamp_max)xminmaxr   r   r   clamp/   s
    

r   c                 C   s   t jj| |ddS )Nfloor)Zrounding_mode)atendivZTensor_modeabr   r   r   floordiv;   s    r   c                 C   sL   | j tjks$| j tjks$| j tjkr(dS | j tjks@| j tjkrDdS dS d S )N      r   )dtypetorchfloat16ZhalfZbfloat16float32floatr   r   r   r   get_alignment_size@   s
    $r(   r   c                 C   s   | j o
|j S r   )is_cudar   r   r   r   check_deviceI   s    r*   c                 C   s0   |dks| | dkrdS t | | d | |  S Nr   r   )int)r   Zalignment_sizer   r   r   get_padded_lengthM   s    r-   c                 C   sN   |dkr| S | j g | jd | || j|d d  R  }tj| |g|dS )Nr   r   )dim)Z	new_zerosshaper#   cat)r   Zpadded_lengthr.   padr   r   r   pad_dimS   s    0r2   )betaalphac                C   s   t jrt||rt||tjjj| drt|j	d t
|}t|j	d t
|}t|j	d t
|}|dksz|dksz|dkrt| |||||S tS )Ninputr   r   )r   shape_paddingr*   should_pad_benchr#   r   r   addmmr-   r/   r(   	pad_addmmNotImplemented)r6   mat1mat2r3   r4   m_padded_lengthk_padded_lengthn_padded_lengthr   r   r   r9   Z   s    r9   c                 C   s(  |dkr"t ||d}t ||d}n*|dkr8t ||d}n|dkrLt ||d}| d ur|dkr|dkr|  dkr~t | |d} q|  dkrt | |d} n |dkr|  dkrt | |d} |dkrtjj| ||S |dkr tjj| ||d d d | f S tjj| ||d | d d f S d S )Nr   r      )r2   r.   r#   r   r   r9   )r6   r<   r=   r>   r?   r@   r   r   r   r:   l   s(    
$r:   c           	         s  t  sJ ddlm} t ` 	tjjju s>	tjjj	u r|t
jd tt
jd tt
jd tn\	tjjju rt
jd tt
jd tt
jd tnW d    dS   kr  krdkrn nW d    dS ttd}d}	tjjju sH	tjjju rj|	fdd	||d
dd }n6 d ur~t  | 	fdd	||d
dd }tt	tjjj	u rd  d ur jrt |fdd	||d
dd }nZ	tjjju rB|fdd	||d
dd }n$|fdd	||d
dd }||d kW  d    S 1 s0    Y  d S )Nr   )do_benchr   rA   F   d   c                      s
    S r   r   r   )r<   r=   r   r   r   <lambda>       z"should_pad_bench.<locals>.<lambda>T)warmuprepZ
fast_flushc                      s    S r   r   r   )r6   r<   r=   r   r   r   rE      rF   c                      s   t  S r   )r:   r   )	input_padr?   r>   mat1_padmat2_padr@   r   r   rE      s   c                      s   t  S r   )pad_mmr   r?   r>   rJ   rK   r@   r   r   rE      s   c                      s   t  S r   )pad_bmmr   rM   r   r   rE      s   g?)r	   Z
has_tritonZtriton.testingrB   r   r#   r   r   mmr9   r-   r/   r(   bmmZ
randn_liker)   )	r<   r=   r   r6   rB   rG   rH   Zori_timeZpad_timer   )
r6   rI   r?   r>   r<   rJ   r=   rK   r@   r   r   r8      s~    
$

 




r8   c                 C   s   t jrt| |rt| |tjjjrt| j	d t
| }t| j	d t
| }t|j	d t
|}|dksv|dksv|dkrt| ||||S tS r+   )r   r7   r*   r8   r#   r   r   rO   r-   r/   r(   rL   r;   r<   r=   r>   r?   r@   r   r   r   	mm_decomp   s    rR   c                 C   s   |dkr0t | |d} t ||d}tjj| |S |dkrft ||d}tjj| |d d d | f S t | |d} tjj| |d | d d f S d S r+   )r2   r#   r   r   rO   rQ   r   r   r   rL      s    "rL   c                 C   s   t jrt| |rt| |tjjjrt| j	d t
| }t| j	d t
| }t|j	d t
|}|dksv|dksv|dkrt| |||| tS )Nr   rA   r   )r   r7   r*   r8   r#   r   r   rP   r-   r/   r(   rN   r;   rQ   r   r   r   
bmm_decomp   s    rS   c                 C   s   |dkr0t | |d} t ||d}tjj| |S |dkrpt ||d}tjj| |d d d d d | f  S t | |d} tjj| |d d d | d d f  S d S )Nr   rA   r   )r2   r#   r   r   rP   
contiguousrQ   r   r   r   rN     s    ,rN   c                 C   st   |
d r| j jdkrtS t| dgttd|   }t| |||||||||	|
d |
d dg\}}}|||fS )NrA   Zcudar   r   F)	Zdevicetyper;   r   sumlistranger.   convolution_backward)Zgrad_outputr6   ZweightZ
bias_sizesZstridepaddingZdilationZ
transposedZoutput_paddinggroupsZoutput_maskZ	grad_biasZgrad_inpZgrad_weight_r   r   r   rY     s"     
rY   c                 C   s   t | dtd  S )N      ?g       @)r#   r   mathr'   r   r   r   log2=  s    r_   c                 C   s   d| }t | | d|  S )Ng      $@r]   )r   round)r   decimalsZten_pow_decimalsr   r   r   	round_decB  s    rb   c                 C   s   t t t | S r   r#   Zlogical_notanyr5   r   r   r   allH  s    re   Fc                 C   s   t t t | ||S r   rc   )r6   r.   Zkeeepdimr   r   r   all_dimM  s    rf   c                 C   s6   | | |}|  | kr.tj||  S |S d S r   )tosizer   Zexpand_copydefault)selfsrcZnon_blockingZintermediater   r   r   copyT  s    rl   c                 C   sL   t ||}t|tjr |dkr(|| }t|tjr<|dkrD| | } | | S )Nr   )r#   rP   
isinstancenumbersNumber)rj   Zbatch1Zbatch2r3   r4   resultr   r   r   baddbmm]  s    rq   c                 C   s   |   rJ d| S )NzTODO: implement this)Z
is_complexrj   r   r   r   conj_physicalg  s    rs   c                 C   s   | S r   r   rr   r   r   r   liftm  s    rt   )	generatorc                C   s    |d u sJ t j| t jd| k S N)r"   r#   	rand_liker%   )rj   ru   r   r   r   	bernoullir  s    ry   )registry      ?c                 C   s   |  tj| tjd|k S rv   )Zcopy_r#   rx   r%   )rj   pr   r   r   
bernoulli_  s    r}   c                C   s    |d u sJ t j| t jd|k S rv   rw   )rj   r|   ru   r   r   r   bernoulli_p  s    r~   c                   C   s   i t tS r   )r   extra_random_decompsr   r   r   r   fast_random_decomps  s    r   c                   C   s   t jr
tS t S )z"decomps can change based on config)r   Zfallback_randomr   r   r   r   r   r   select_decomp_table  s    r   )NN)N)r   )F)F)r   r   )r{   )r{   )[	functoolsloggingr^   rn   r#   Ztorch._decomp_decompr   r   r   r   Ztorch._decomp.decompositionsr   Ztorch.utils._mode_utilsr    r   r	   	getLogger__name__r   r   r   ZarangeZbitwise_and_Zbitwise_or_Z
clamp_min_ZfliplcmZlinalg_vector_normZsin_Zsqrt_ZstdZstd_meanZ_to_copyZtril_indicesZtriu_indicesZunsafe_splitZinductor_decompositionsr   r   r   Zfloor_divideri   r   r(   r*   r-   r2   r9   r:   r8   rO   rR   rL   rP   rS   rN   rY   r_   r`   ra   rb   re   r.   rf   rl   rq   rs   rt   Zdetach_ry   Znative_dropoutZcauchyZcauchy_ZexponentialZexponential_Z	geometricZ
geometric_Z
log_normalZlog_normal_Zuniform_r   partialZregister_extra_random_decompr}   r|   r~   	lru_cacher   r   r   r   r   r   <module>   s   



	

W





 



	





