U
    9%eK7                  !   @   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 d dl	Zd dlm
Z
mZmZ d dlmZ d dlmZ ddlmZ eeZejjZejj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(ej)ej*ej+ej,ej-ej.ej/ej0ej1ej2ej3ej4ej5ej6ej7ej8ej9j:g Z;e
 e;Z<ej=gZ>ee<e> dd Z?e?ej@jAd	d
 Z@e?ejBjCgdd ZDe?ejEjCgdd ZFe?ejGjAgdddddZGe?ejHgededdZHe?ejIjAgdd ZJe?ejKjAgdd ZKe?ejLgdd ZLe?ejMgdd ZMe?ejNjOgdfddZPe?ejQjAgdd ZQe?ejQjRgdgd!d"ZSe?ejTgdhd#d$ZTe?ejUgd%d& ZUe?ejVgd'd( ZVe?ejWjAgdid)d*ZWe?ejXgd+d, ZXe?ejYgd-d. ZYe?ejZej[gd/d0 ZZe?ej\jAgdd1d2d3Z\e?ej]ej]gd4d5 Z]e?ej^ej^gd6d7 Z^e?ej_gd8d9 Z_e?ej`gd d:d;d<Z`e?ejajAgd=d> Zbe?ejajcgd?d@ Zde?ejedddAdBdCZee?ejfdddAdDdEZfe?ejgdddd d ejhdFdGdHZge?ejijAdddAdIdJZie?ejijjdddAdKdLZke?ejljAdMdN Zle?ejmjAejneoepepepejcejndOdPdQZqe?ejrjAejneoepepepejcejndOdRdSZse?ejmjtejnejnejnepepejcejndOdTdUZue?ejrjtejnejnejnepepejcejndOdVdWZve?ejwjxdjdXdYZye?ejzjxdkdZd[Z{e?ej|jxd\d] Z}ej~jAejjje?ej~ejnejnejejn ejejn ejejn eeoeod^d_d`Z~e ddadb Zdcdd ZdS )l    N)core_aten_decompositionsget_decompositionsremove_decompositions)pw_cast_for_opmath)extra_random_decomps   )configc                 C   s8   t | r| gn| D ]}|tkrtd|  qt| tS )Nzduplicate decomp: %s)callabledecompositionslogwarningdecompregister_decomposition)opsop r   \/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/torch/_inductor/decomposition.pyr   H   s    r   c                 C   s
   |  |S N)viewselfsizer   r   r   _unsafe_viewO   s    r   c                 C   s   d S r   r   tensormsgr   r   r   assert_async_msg_decompW   s    r   c                 C   s   d S r   r   r   r   r   r   "functional_assert_async_msg_decomp]   s    r   )minmaxc                C   s   d S r   r   )symbolr   r   r   r   r   sym_constrain_range_for_sizeb   s    r!   c                 C   s(   |d k	r|  |} |d k	r$| |} | S r   )Z	clamp_minZ	clamp_max)xr   r   r   r   r   clampg   s
    

r#   c                 C   s   t jj| |ddS )Nfloor)Zrounding_mode)atendivZTensor_mode)abr   r   r   floordivs   s    r)   c                    sJ   dgt   }t|D ]\}}|||< qtj fdd|D f||S )Nr   c                    s   g | ]} | qS r   r   ).0lr   r   r   
<listcomp>   s     z"empty_permuted.<locals>.<listcomp>)len	enumeratetorchemptyZpermute)r   Zphysical_layoutkwargspermpr+   r   r,   r   empty_permuted|   s    
r5   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 )N   cudar   r   F)	devicetypeNotImplementedr%   sumlistrangedimconvolution_backward)Zgrad_outputinputweightZ
bias_sizesZstridepaddingZdilationZ
transposedZoutput_paddinggroupsZoutput_maskZ	grad_biasZgrad_inpZgrad_weight_r   r   r   r?      s"     
r?   c                 C   s   t | dtd  S )N      ?g       @)r0   r   mathr"   r   r   r   log2   s    rH   c                 C   s   d| }t | | d|  S )Ng      $@rE   )r%   round)r"   decimalsZten_pow_decimalsr   r   r   	round_dec   s    rK   c                 C   s   t t t | S r   r0   Zlogical_notany)r@   r   r   r   all   s    rN   Fc                 C   s   t t t | ||S r   rL   )r@   r>   keepdimr   r   r   all_dim   s    rP   c                 C   sX   t ||}t|tjr |dkr(|| }|dkr4|S t|tjrH|dkrP| | } | | S Nr   r   )r0   bmm
isinstancenumbersNumber)r   Zbatch1batch2betaalpharesultr   r   r   baddbmm   s    rZ   c                 C   sP   | j dkrL| ddkrL|ddkrLtj| d|d ddddS tS )Ncpur   Tr>   rO   )r8   r   r0   r;   squeeze	unsqueezer:   )r   rV   r   r   r   rR      s    
  rR   c                    s   j dkrddkrn ddkrnj jkrntt  dkrnt fddtdD S ddkr ddkrtjd d ddd		dS t
S )
Nr[   r\   r   r       c                    s    g | ]}|d d f   qS r   r   )r*   iinput2r   r   r   r-      s     zmm.<locals>.<listcomp>Tr]   )r8   r   dtyper0   Znumelcatr=   r;   r^   r_   r:   )r   rc   r   rb   r   mm   s&    

$  rf   c                 C   s`   dd }t t|| }t|dkr.| d  S dt|  k rJt| k r\n ntj||S tS )Nc                 S   s   t | jdkp| jd dkS rQ   )r.   shaperG   r   r   r   non_empty_tensor   s    zcat.<locals>.non_empty_tensorr   r   )r<   filterr.   cloner%   re   defaultr:   )Ztensorsr>   rh   Zfiltered_tensorsr   r   r   re      s     re   c                 C   sf   |   r.tt| jtdt| j| jS t| dk tj	d}tt| tdd}|| S d S )Nnanr   g        )

is_complexr0   whereisnanrealfloatatan2imagrF   pi)r"   retrl   r   r   r   angle   s    
  rv   c                 C   s   |   rtd| S )NzTODO: implement this)rm   AssertionErrorr   r   r   r   conj_physical  s    ry   c                 C   s   | S r   r   rx   r   r   r   lift	  s    rz   )	generatorc                C   s    |d kst tj| tjd| k S )N)rd   )rw   r0   	rand_likefloat32)r   r{   r   r   r   	bernoulli  s    r~   c                 C   s   t t ||| kB | |S r   r0   rn   ro   r   otherr   r   r   fmin  s    r   c                 C   s   t t ||| k B | |S r   r   r   r   r   r   fmax  s    r   c                 C   s   t | ||| S r   )r0   Znarrowrj   )r   r>   startlengthr   r   r   narrow_copy  s    r   implicitc                C   s   t j| ||d S )Nr   )r%   expandrj   )r   r   r   r   r   r   expand_copy#  s    r   c                 C   s   t | | S r   )r%   r   rj   r   r   r   r   view_copy_default(  s    r   c                 C   s   |  | S r   )torj   )r   rd   r   r   r   view_copy_dtype-  s    r   rd   r8   c                K   s*   t j|  f|p| j|p| jd|S Nr   )r0   Zrandr   rd   r8   r   rd   r8   r2   r   r   r   r|   2  s    r|   c                K   s*   t j|  f|p| j|p| jd|S r   )r0   Zrandnr   rd   r8   r   r   r   r   
randn_like<  s    r   )rd   layoutr8   
pin_memoryrequires_gradmemory_formatc                C   s.   t j|  ||p| j|p| j|p&| j|dS )N)rd   r   r8   r   )r0   fullr   rd   r   r8   )r   Z
fill_valuerd   r   r8   r   r   r   r   r   r   	full_likeF  s    r   c                K   s0   t jjd||  f|p| j|p$| jd|S )Nr   r   r%   randintlowr   rd   r8   )r   highrd   r8   r2   r   r   r   randint_like\  s    r   c                K   s0   t jj|||  f|p| j|p$| jd|S r   r   )r   r   r   rd   r8   r2   r   r   r   randint_like_lowh  s    r   c                 K   s   t jjd| |f|S )Nr   )r%   r   r   )r   r   r2   r   r   r   r   t  s    r   )r@   scale
zero_point	quant_min	quant_maxrd   returnc                 C   s*   d| }t t | | | |||S NrE   r0   r#   rI   r   r@   r   r   r   r   rd   Z	inv_scaler   r   r   'quantize_per_tensor_default_decomp_impl{  s    	  r   c                 C   s   |  tj| | S r   r   r0   r}   r@   r   r   r   r   rd   r   r   r   )dequantize_per_tensor_default_decomp_impl  s    	r   c                 C   s*   d| }t t | | | |||S r   r   r   r   r   r   &quantize_per_tensor_tensor_decomp_impl  s    	  r   c                 C   s   |  tj| | S r   r   r   r   r   r   (dequantize_per_tensor_tensor_decomp_impl  s    	r   c                 C   s   t jj| t j|||dS N)rX   )r%   _foreach_addList_foreach_mulr   Zleft_tensorsZright_tensorsZscalarr   r   r   _foreach_addcmul_scalar  s
      r   c                 C   s   t jj| t j|||dS r   )r%   r   r   Z_foreach_divr   r   r   r   _foreach_addcdiv_scalar  s
      r   c              	   C   s"   t j| t jt j|| |S r   )r%   r   r   r   ScalarZ_foreach_sub)Zstart_tensorsZend_tensorsrA   r   r   r   _foreach_lerp_scalar  s     r   )r@   rA   biasrunning_meanrunning_vartrainingexponential_average_factorepsilonc              
   C   sB   t | |||||||\}}	}
|r,||	|
fS ||d|dfS )N)r   )r%   native_batch_normZ	new_zeros)r@   rA   r   r   r   r   r   r   r'   r(   cr   r   r   miopen_batch_norm  s     

r   c                   C   s   t tS r   )r
   r   r   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)r   )F)r   r   )r   )r   )r   )	functoolsloggingrF   rT   typingr0   Ztorch._decomp_decompr   Z$torch.ao.quantization.fx._decomposedr   r   r   Ztorch._decomp.decompositionsr   Z$torch._decomp.decompositions_for_rngr    r   	getLogger__name__r   r   r%   ZprimsZquantized_decomposedZ_adaptive_avg_pool2d_backwardZarangeZbitwise_and_Zbitwise_or_Z
clamp_min_distZ
empty_likeflipZgeluZhardtanhZindex_selectZlcmZ
leaky_reluZlinalg_vector_normZ_log_softmaxZ max_pool2d_with_indices_backwardZ_native_batch_norm_legitZ#_native_batch_norm_legit_functionalZ$_native_batch_norm_legit_no_trainingr   Znative_group_normZnative_layer_normZ_softmaxZsin_Zsqrt_ZstdZstd_meanZ_to_copyZtril_indicesZtriu_indicesZunsafe_splitZupsample_bilinear2dZvecZinductor_decompositionsr
   Z_unsafe_indexZdecomps_to_excluder   r   rk   Z_assert_asyncr   r   Z_functional_assert_asyncr   r!   r#   Zfloor_divider)   r5   r?   rH   rI   rJ   rK   rN   r>   rP   rZ   rR   rf   re   rv   ry   rz   Zdetach_r~   r   r   r   r   Z	view_copyr   rd   r   r|   r   r   Zpreserve_formatr   Z	low_dtyper   r   Zquantize_per_tensorZTensorrq   intr   Zdequantize_per_tensorr   r   r   r   Z_foreach_addcmulr   r   Z_foreach_addcdivr   Z_foreach_lerpr   r   Zpy_implZ_CZDispatchKeyZAutogradOptionalbool	lru_cacher   r   r   r   r   r   <module>   sl  
$











 





	













		











	



