o
    hK7                     @   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g 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j0ej1ej2ej3ej4ej5ej6ej7ej8ej9j:Z;i 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dqddZHe?ejIjAgdd ZJe?ejKjAgdd ZKe?ejLgdd ZLe?ejMgdd ZMe?ejNjOgdrddZPe?ejQjAgdd ZQe?ejQjRgdsd!d"ZSe?ejTgdtd#d$ZTe?ejUgd%d& ZUe?ejVgd'd( ZVe?ejWjAgdrd)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dOejndPeodQepdRepdSepdTejcdUejnfdVdWZqe?ejrjAdOejndPeodQepdRepdSepdTejcdUejnfdXdYZse?ejmjtdOejndPejndQejndRepdSepdTejcdUejnfdZd[Zue?ejrjtdOejndPejndQejndRepdSepdTejcdUejnfd\d]Zve?ejwjxdud^d_Zye?ejzjxdud`daZ{e?ej|jxdbdc Z}ej~jAejjje?ej~dOejnddejndeejejn dfejejn dgejejn dhedieodjeofdkdlZ~e ddmdn Zdodp ZdS )v    N)core_aten_decompositionsget_decompositionsremove_decompositions)pw_cast_for_opmath)extra_random_decomps   )configc                 C   s8   t | r| gn| D ]}|tv rtd|  q	t| tS )Nzduplicate decomp: %s)callabledecompositionslogwarningdecompregister_decomposition)opsop r   S/var/www/html/ai/venv/lib/python3.10/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      d S r   r   tensormsgr   r   r   assert_async_msg_decompW      r   c                 C   r   r   r   r   r   r   r   "functional_assert_async_msg_decomp]   r   r   )minmaxc                C   r   r   r   )symbolr    r!   r   r   r   sym_constrain_range_for_sizeb   r   r#   c                 C   s(   |d ur	|  |} |d ur| |} | S r   )	clamp_min	clamp_max)xr    r!   r   r   r   clampg   s
   

r'   c                 C   s   t jj| |ddS )Nfloor)rounding_mode)atendivTensor_mode)abr   r   r   floordivs   s   r/   c                    sN   dgt   }t|D ]\}}|||< qtj fdd|D fi ||S )Nr   c                    s   g | ]} | qS r   r   ).0lr   r   r   
<listcomp>   s    z"empty_permuted.<locals>.<listcomp>)len	enumeratetorchemptypermute)r   physical_layoutkwargspermpr1   r   r2   r   empty_permuted|   s   
&r=   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)grad_outputinputweight
bias_sizesstridepaddingdilation
transposedoutput_paddinggroupsoutput_mask	grad_biasgrad_inpgrad_weight_r   r   r   rG      s"    

rG   c                 C   s   t | dtd  S )N      ?g       @)r6   r   mathr&   r   r   r   log2      rZ   c                 C   s   d| }t | | d|  S )Ng      $@rW   )r*   round)r&   decimalsten_pow_decimalsr   r   r   	round_dec   s   r_   c                 C   s   t t t | S r   r6   logical_notany)rI   r   r   r   all   s   rc   Fc                 C   s   t t t | ||S r   r`   )rI   rF   keepdimr   r   r   all_dim   s   re   c                 C   sX   t ||}t|tjr|dkr|| }|dkr|S t|tjr$|dkr(| | } | | S Nr   r   )r6   bmm
isinstancenumbersNumber)r   batch1batch2betaalpharesultr   r   r   baddbmm   s   rp   c                 C   sP   | j dkr&| ddkr&|ddkr&tj| d|d ddddS tS )Ncpur   TrF   rd   )r@   r   r6   rC   squeeze	unsqueezerB   )r   rl   r   r   r   rg      s   
rg   c                    s   j dkrXddkr7 ddkr7j jkr7tt  dkr7t fddtdD S ddkrX ddkrXtjd d ddd		dS t
S )
Nrq   rr   r   r       c                    s    g | ]}|d d f   qS r   r   )r0   iinput2r   r   r   r3      s     zmm.<locals>.<listcomp>Trs   )r@   r   dtyper6   numelcatrE   rC   rt   ru   rB   )r   ry   r   rx   r   mm   s   
$r}   c                 C   sb   dd }t t|| }t|dkr| d  S dt|  k r%t| k r/n tS tj||S tS )Nc                 S   s   t | jdkp| jd dkS rf   )r4   shaperY   r   r   r   non_empty_tensor   s   zcat.<locals>.non_empty_tensorr   r   )rD   filterr4   cloner*   r|   defaultrB   )tensorsrF   r   filtered_tensorsr   r   r   r|      s   r|   c                 C   sb   |   rtt| jtdt| j| jS t| dk tj	d}tt| tdd}|| S )Nnanr   g        )

is_complexr6   whereisnanrealfloatatan2imagrX   pi)r&   retr   r   r   r   angle   s   r   c                 C   s   |   rJ d| S )NzTODO: implement this)r   r   r   r   r   conj_physical  s   r   c                 C   s   | S r   r   r   r   r   r   lift	  r   r   )	generatorc                C   s    |d u sJ t j| t jd| k S )N)rz   )r6   	rand_likefloat32)r   r   r   r   r   	bernoulli  s   r   c                 C   s   t t ||| kB | |S r   r6   r   r   r   otherr   r   r   fmin     r   c                 C   s   t t ||| k B | |S r   r   r   r   r   r   fmax  r   r   c                 C   s   t | ||| S r   )r6   narrowr   )r   rF   startlengthr   r   r   narrow_copy     r   implicitc                C   s   t j| ||d S )Nr   )r*   expandr   )r   r   r   r   r   r   expand_copy#  r   r   c                 C   s   t | | S r   )r*   r   r   r   r   r   r   view_copy_default(  s   r   c                 C   s   |  | S r   )tor   )r   rz   r   r   r   view_copy_dtype-  s   r   rz   r@   c                K   ,   t jg |  f|p| j|p| jd|S Nr   )r6   randr   rz   r@   r   rz   r@   r:   r   r   r   r   2     
r   c                K   r   r   )r6   randnr   rz   r@   r   r   r   r   
randn_like<  r   r   )rz   layoutr@   
pin_memoryrequires_gradmemory_formatc                C   s0   t jg |  ||p| j|p| j|p| j|dS )N)rz   r   r@   r   )r6   fullr   rz   r   r@   )r   
fill_valuerz   r   r@   r   r   r   r   r   r   	full_likeF  s   
r   c                K   s2   t jjd|g |  f|p| j|p| jd|S )Nr   r   r*   randintlowr   rz   r@   )r   highrz   r@   r:   r   r   r   randint_like\     
r   c                K   s2   t jj||g |  f|p| j|p| jd|S r   r   )r   r   r   rz   r@   r:   r   r   r   randint_like_lowh  r   r   c                 K   s   t jjd| |fi |S )Nr   )r*   r   r   )r   r   r:   r   r   r   r   t  r[   r   rI   scale
zero_point	quant_min	quant_maxrz   returnc                 C   *   d| }t t | | | |||S NrW   r6   r'   r\   r   rI   r   r   r   r   rz   	inv_scaler   r   r   'quantize_per_tensor_default_decomp_impl{     	r   c                 C      |  tj| | S r   r   r6   r   rI   r   r   r   r   rz   r   r   r   )dequantize_per_tensor_default_decomp_impl     	r   c                 C   r   r   r   r   r   r   r   &quantize_per_tensor_tensor_decomp_impl  r   r   c                 C   r   r   r   r   r   r   r   (dequantize_per_tensor_tensor_decomp_impl  r   r   c                 C      t jj| t j|||dS N)rn   )r*   _foreach_addList_foreach_mulr   left_tensorsright_tensorsscalarr   r   r   _foreach_addcmul_scalar     r   c                 C   r   r   )r*   r   r   _foreach_divr   r   r   r   _foreach_addcdiv_scalar  r   r   c              	   C   s"   t j| t jt j|| |S r   )r*   r   r   r   Scalar_foreach_sub)start_tensorsend_tensorsrJ   r   r   r   _foreach_lerp_scalar  s   r   rJ   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_norm	new_zeros)rI   rJ   r   r   r   r   r   r   r-   r.   cr   r   r   miopen_batch_norm  s    

r   c                   C   s   i 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   fallback_randomr
   r   r   r   r   r   select_decomp_table  s   r   )NNr   )F)r   r   )r   )	functoolsloggingrX   ri   typingr6   torch._decomp_decompr   $torch.ao.quantization.fx._decomposedr   r   r   torch._decomp.decompositionsr   $torch._decomp.decompositions_for_rngr    r   	getLogger__name__r   r   r*   primsquantized_decomposed_adaptive_avg_pool2d_backwardarangebitwise_and_bitwise_or_
clamp_min_dist
empty_likeflipgeluhardtanhindex_selectlcm
leaky_relulinalg_vector_norm_log_softmax max_pool2d_with_indices_backward_native_batch_norm_legit#_native_batch_norm_legit_functional$_native_batch_norm_legit_no_trainingr   native_group_normnative_layer_norm_softmaxsin_sqrt_stdstd_mean_to_copytril_indicestriu_indicesunsafe_splitupsample_bilinear2dvecinductor_decompositionsr
   _unsafe_indexdecomps_to_excluder   r   r   _assert_asyncr   r   _functional_assert_asyncr   r#   r'   floor_divider/   r=   rG   rZ   r\   r]   r_   rc   rF   re   rp   rg   r}   r|   r   r   r   detach_r   r   r   r   r   	view_copyr   rz   r   r   r   r   preserve_formatr   	low_dtyper   r   quantize_per_tensorTensorr   intr   dequantize_per_tensorr   r   r   r   _foreach_addcmulr   r   _foreach_addcdivr   _foreach_lerpr   r   py_impl_CDispatchKeyAutogradOptionalbool	lru_cacher   r   r   r   r   r   <module>   s   
	
 $











 





	












		











	



