U
    ªÊ¹jK7  ã                !   @   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j€j�j‚¡e?ej~ƒejnejnejƒejn ejƒejn ejƒejn e„eoeod^œd_d`„ƒƒZ~e  …d¡dadb„ ƒZ†dcdd„ Z‡d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/bwave/python/venv/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r°t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  
àÿ$
ÿ










 





	













		÷




ù
ù
ù
ù



	


ø
