a
    ŗh{  ć                +   @   s  U 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mZmZm	Z	m
Z
 d dlmZmZ d dlZd dlmZ d dlmZ d dlZd dlmZmZmZ d dlmZmZmZmZm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z& d d	l'm(Z( d d
l)m*Z* d dlm+Z+m,Z,m-Z- d dl.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4 ddlm5Z5m6Z6m7Z7 e	dZ8edZ9e
ej:j;ej:j<f Z=ee>d< e ?e@”ZAejBjCZCejBjDZDejBjEZEejBjFZFejBjGZGeeCjHeCjIeCjJeCjKeCjLeCjMeCjNeCjOeCjPeCjQeCjReCjSeCjTeCjUeCjVeCjWeCjXeCjYeCjZeCj[eCj\eCj]eCj^eCj_eCj`eCjaeCjbeCjceCjdeCjeeCjfeCjgeCjheCjie(eCjjeCjkeCjleCjmjneCjojpeEjqeFjrg*Zsi e „es„ZteCjueCjveCjweCjxjyeCjzeCj{eCj|eCjeCj}eCj~eCjeCjeCjjeCjeCjeCjeCjgZee
ej:jej:j<f  e>d< eete e
e=ee= f eee9e8f gee9e8f f dddZeeCjgejejeneneejdddZeeCjjgejeddddZeeCjjgejeddddZeeCjjygdddejeejj eejj dd d!d"ZeeCjge d¾ejeejj eejj ejd#d$d%ZeeCjgee
enejf  ejjeejd&d'd(ZeeCj}gdd)ejenejejejjejd*d+d,Z}eeCjjygee
enejf  een eejd-d.d/ZeeCjgejejejeen e
eneen f e
eneen f e
eneen f eeen enee eejejejf d0d1d2ZeeCjjgdæejenejd3d4d5ZeeCjgedĄejejeej  ejd6d7d8ZeeCj”gedĮejejejeej  ejjejjejd9d:d;Z”eeCj¢gedĀejejeej  ejd<d=d>Z¢eeCj£jygdĆeej enejd?d@dAZ£eeCj¤gejejdBdCdDZ¤eeCj„gdd)ejejeejj ejdEdFdGZ„eeCj¦gejejdHdIdJZ¦eeCj§eCjØgejejdHdKdLZ§eeCj©eDj©gejejejdMdNdOZ©eeCjŖeDjŖgejejejdMdPdQZŖeeCj«dÄejeen eejdSdTdUZ«eeCj¬dÅejeen eejdSdVdWZ¬eeCj­gejenenenejdXdYdZZ­eeCj®jygejee
enejf  ejd[d\d]ZÆeeCj®j gejej ejd^d_d`Z°dĘejeej± ej±dadbdcZ²eeCj³dddddejeej  eej“ eej± eejdedfdgZ³eeCjµdddddejeej  eej“ eej± eejdedhdiZµeeCj¶ddddRdRej·djeje
eneøf eej  eej¹ eej“ eeej±ejdk	dldmZ¶eeCjŗjydddddejeneej  eej“ eej± eejdndodpZŗeeCjŗj»dddddejeneneej  eej“ eej± eejdqdrdsZ¼eeCj½jyenee
enejf  eejdtdudvZ½eeEjqjyejejejejdwdxdyZqeeFjrjyejejejejejejejejejenejdzd{d|ZreejBjEj¾ejejd}d~dZæeeCjĄgedĒejejeneneejdddZĄeeCjĮjĀdČeej eej eej eøeej dddZĆeeCjÄjĀdÉeej eej eej eøeej dddZÅeeCjĘjĀeej eej ejjeej dddZĒeeCjĘjČeej eej eejj eej dddZÉeCjŹjy ĖejĢjĶjĪ”eeCjŹejejejej ejej ejej eeøeøeejejejf d	ddZŹe jĻeŠeedef f dddZŃeŠeedef f dddZŅeeCjÓejejejejdddZÓeeGjŌjÕejeneneøej eejejf dddZÖeeCj×dŹejejejeejdddZ×eeCjŲdĖejejejeejdd d”ZŲeeCjzjyeejejenej ejd¢d£d¤ZzeeCjŁd„d¦ejenejejeeejd§dØd©ZŁejeen ee
eneen f  e
eneen f e
eneen f eeneejejf dŖd«d¬ZŚeeCjŪdĢejeen ee
eneen f  e
eneen f e
eneen f eeejejf d­d®dÆZŪeeCjÜdĶejeen ee
eneen f  e
eneen f e
eneen f eeejejf d­d°d±ZÜeeCjŻejeen eejejf d²d³d“ZŻeeCjŽjĀdRdRdddµejejjeeee eej ejd¶d·døZßeeCjądĪejejeøeøeeejį eejejf d»d¼d½ZądS )Ļé    N)ŚAnyŚCallableŚOptionalŚTypeVarŚUnion)Ś	ParamSpecŚ	TypeAlias)Ścore_aten_decompositionsŚget_decompositionsŚremove_decompositions)Ś_grid_sampler_2dŚ
_index_addŚembedding_dense_backwardŚpw_cast_for_opmathŚ"pw_cast_for_opmath_non_tensor_args)Śextra_random_decomps)Ścounters)Ś	is_fbcode)Ś	out_dtype)Śpad_listlike)Śelementwise_dtypesŚELEMENTWISE_TYPE_PROMOTION_KINDŚtype_to_dtype)Śguard_or_falseŚguard_size_obliviousŚstatically_known_trueé   )ŚconfigŚinductor_prims)Śis_gpuŚ,needs_fallback_due_to_atomic_add_limitationsŚuse_scatter_fallbackŚ_TŚ_PŚ_GenericOperatorŚdecomps_to_exclude)ŚopsŚreturnc                 C   s:   t | tr| n| gD ]}|tv rt d| ” qt | t”S )Nzduplicate decomp: %s)Ś
isinstanceŚlistŚdecompositionsŚlogŚwarningŚdecompŚregister_decomposition)r&   Śop© r0   śK/var/www/auris/lib/python3.9/site-packages/torch/_inductor/decomposition.pyr.      s    r.   )Śgrad_outputŚindicesŚnum_weightsŚpadding_idxŚscale_grad_by_freqr'   c                 C   s   | j r
tS t| ||||S ©N)Zis_xpuŚNotImplementedŚdecomp_embedding_dense_backward)r2   r3   r4   r5   r6   r0   r0   r1   Ś_embedding_dense_backward   s
    

’r:   )ŚtensorŚmsgr'   c                 C   s   d S r7   r0   ©r;   r<   r0   r0   r1   Śassert_async_msg_decomp§   s    r>   c                 C   s   d S r7   r0   r=   r0   r0   r1   Ś"functional_assert_async_msg_decomp­   s    r?   )ŚminŚmax)Śsymbolr@   rA   r'   c                C   s   d S r7   r0   )rB   r@   rA   r0   r0   r1   Śsym_constrain_range_for_size²   s    rC   )Śxr@   rA   r'   c                 C   s(   |d ur|   |”} |d ur$|  |”} | S r7   )Ś	clamp_minŚ	clamp_max)rD   r@   rA   r0   r0   r1   Śclamp¼   s
    

rG   )ŚsizeŚ
fill_valueŚkwargsr'   c                 K   s:   |  d”}|d u r6tt||d< tj| |fi |¤S tS )NŚdtype)Śgetr   ŚtypeŚtorchŚfullr8   )rH   rI   rJ   rK   r0   r0   r1   rO   Ź   s
    
rO   ©Śalpha)rD   ŚdimŚindexr;   rQ   r'   c                C   s.   t  s| jtjkrtS t| |||d|dS d S )NF)ZinplacerQ   )r   rK   rN   Zbfloat16r8   r   )rD   rR   rS   r;   rQ   r0   r0   r1   Ś	index_add×   s    rT   )rH   Śphysical_layoutrJ   r'   c                    sN   dgt   }t|D ]\}}|||< qtj fdd|D fi |¤ |”S )Nr   c                    s   g | ]} | qS r0   r0   )Ś.0Śl©rH   r0   r1   Ś
<listcomp>ö   ó    z"empty_permuted.<locals>.<listcomp>)ŚlenŚ	enumeraterN   ŚemptyŚpermute)rH   rU   rJ   ŚpermŚprW   r0   rX   r1   Śempty_permutedķ   s    
ra   )r2   ŚinputŚweightŚ
bias_sizesŚstrideŚpaddingŚdilationŚ
transposedŚoutput_paddingŚgroupsŚoutput_maskr'   c                 C   st   |
d rt | jjstS t | dgttd|  ”  ”}t 	| |||||||||	|
d |
d dg”\}}}|||fS )Né   r   r   F)
r   ŚdevicerM   r8   ŚatenŚsumr)   ŚrangerR   Śconvolution_backward)r2   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   Z	grad_biasZgrad_inpZgrad_weightŚ_r0   r0   r1   rq   ł   s"     õ
rq   )rD   Śdecimalsr'   c                 C   s   d| }t  | | ”d|  S )Ng      $@g      š?)rn   Śround)rD   rs   Zten_pow_decimalsr0   r0   r1   Ś	round_dec  s    ru   )ŚselfŚbatch2r   r'   c                 C   sÄ   t jrV| jjdvrVt| jd dks6t|jd dkrV|  d”| d” jdd}|S | jjdkrĄt|  d”dkrĄt| d”dkrĄt	d d  d7  < t
j|  d”| d” dd	d
 d”S tS )N©ŚcpuZmpsr   rl   é’’’’©rR   ry   ŚinductorZdecompose_bmmT©rR   Śkeepdim)r   Ścoordinate_descent_tuningrm   rM   r   ŚshapeŚ	unsqueezero   rH   r   rN   Śsqueezer8   )rv   rw   r   Śoutr0   r0   r1   Śbmm   s"    	’’’žr   )rv   Śmat1Śmat2r   ŚbetarQ   r'   c                 C   sģ   | j jdkrčt| d”dkrzt| d”dkrztd d  d7  < tj| d”| d” ddd d”}|| ||   S t| d”dkrčt	| d”d	krčt	| d”d	krčtd d  d7  < |j
| jddd}|| ||   S tS )
Nry   r   r   rz   r|   Zdecompose_addmmTr}   é   )rm   rM   r   rH   r   rN   ro   r   r   r   ŚTr8   )rv   r   r   r   r   rQ   r   r0   r0   r1   Śaddmm:  s*    
’’ž’žżr   )rv   Śinput2r   r'   c                    s\  t jrRjjdvrRtjd dks6t jd dkrR d”  d” jddS jjdkrXt d”dkröt d”dkröt  d”dkröj	 j	kröt
t ”t  ” dkrötd	 d
  d7  < t  fddt d”D ”S t d”dkrXt  d”dkrXtd	 d
  d7  < tj d”  d” ddd d”S tS )Nrx   r   r   rl   r{   ry   rz   é    r|   Zdecompose_mmc                    s    g | ]}|d d f   qS r7   r0   )rV   Śi©r   rv   r0   r1   rY   r  rZ   zmm.<locals>.<listcomp>Tr}   )r   r   rm   rM   r   r   r   ro   rH   rK   r   rN   Śnumelr   Ścatrp   r   r8   )rv   r   r   r0   r   r1   ŚmmX  s8    ’’žż
üū$’’žr   )ŚtensorsrR   r'   c                    s  t jtd fdd}tt|| tdkrjt| dtjid }d }||j	kr^| 
” S |j|dS dt  k rt| k rn ntj  ”S tdkrtfdd	D rd }t|j} dk rę t|j n  |  t” |  ”j|    d ” 
” S tS )
N©rD   r'   c                    sL   t | jdkr$t| jd dkr$dS  t | jk rHt| j  dkrHdS dS )Nr   r   FT)r[   r   r   )rD   r{   r0   r1   Śnon_empty_tensor  s
      zcat.<locals>.non_empty_tensorr   Śtype_promotion_kindr   ©rK   c                 3   s   | ]}| d  u V  qdS )r   Nr0   )rV   Śt)Śfiltered_tensorsr0   r1   Ś	<genexpr>²  s   zcat.<locals>.<genexpr>)rN   ŚTensorŚboolr)   Śfilterr[   r   r   ŚDEFAULTrK   ŚcloneŚtorn   r   ŚdefaultŚallr   Śinsertr   ŚexpandŚflattenr8   )r   rR   r   Zpromoted_dtypeZ
filtered_tŚinpr   r0   )rR   r   r1   r     s4    ’žż’

ż ’

 r   r   c                 C   s~   |   ” r.t t | j”tdt | j| j””S t| t	j
d\}}tjtj|| jd}t | dk |d”}t t | ”td|”S )NŚnan)r   ©rK   rm   r   g        )Ś
is_complexrN   ŚwhereŚisnanŚrealŚfloatŚatan2Śimagr   r   ZINT_TO_FLOATZscalar_tensorŚmathŚpirm   )rD   rr   rK   r°   Śretr0   r0   r1   Śangleæ  s    ’ž
r²   )rD   ŚyrQ   r'   c                C   sø   t  | ”o|  ” }t  |”o"| ” }|r,|s0tS |}|d urD|| }t  | j|j”}t jt jddd}| d } |d }||  | jj”}|| |jj”}	t j	||	 dd |”}
|
S )N)r;   r'   c                 S   sD   | j ^ }}|d dkr tdg |¢|d dR }|  |”}|S )zNReshape tensor from [*initial_dims, last_dim] to *initial_dims, last_dim/2, 2]rl   r   zQThe size of the last dimension must be even to reshape it to [..., last_dim/2, 2])r   ŚAssertionErrorŚview)r;   Zinitial_dimsZlast_dimZ	new_shapeZreshaped_tensorr0   r0   r1   Śreshape_tensor_complexę  s    ’
z#add.<locals>.reshape_tensor_complexr   éž’’’)Z	start_dim)
rN   Z	is_tensorrØ   r8   Zpromote_typesrK   r   rµ   r«   r¤   )rD   r³   rQ   Zx_is_complex_tensorZy_is_complex_tensorŚzZcomplex_typer¶   Z
x_reshapedZ
z_reshapedŚresultr0   r0   r1   ŚaddÓ  s    rŗ   )rv   r'   c                 C   s   |   ” rtS | S r7   )rØ   r8   ©rv   r0   r0   r1   Śconj_physical  s    r¼   c                 C   s   | S r7   r0   r»   r0   r0   r1   Ślift  s    r½   )rv   Śotherr'   c                 C   s   t  t  |”|| kB | |”S r7   ©rN   r©   rŖ   ©rv   r¾   r0   r0   r1   Śfmin  s    rĮ   c                 C   s   t  t  |”|| k B | |”S r7   ræ   rĄ   r0   r0   r1   Śfmax  s    rĀ   F)rv   rR   r~   r'   c                 C   s    | j tjkrtj| ||dS tS ©Nr}   )rK   rN   r   Śanyr8   ©rv   rR   r~   r0   r0   r1   Śamax  s    rĘ   c                 C   s    | j tjkrtj| ||dS tS rĆ   )rK   rN   r   r”   r8   rÅ   r0   r0   r1   Śamin"  s    rĒ   )rv   rR   ŚstartŚlengthr'   c                 C   s   t  | |||” ” S r7   )rN   Znarrowr   )rv   rR   rČ   rÉ   r0   r0   r1   Śnarrow_copy-  s    rŹ   )rv   rH   r'   c                 C   s   t  | |” ” S r7   )rn   rµ   r   )rv   rH   r0   r0   r1   Śview_copy_default7  s    rĖ   )rv   rK   r'   c                 C   s   |   |” ” S r7   )r   r   )rv   rK   r0   r0   r1   Śview_copy_dtype?  s    rĢ   )r;   Śmemory_formatr'   c                 C   s$   |t ju s|d u rt | ”S |S d S r7   )rN   Śpreserve_formatŚutilsZsuggest_memory_format)r;   rĶ   r0   r0   r1   Śget_like_layoutG  s    
rŠ   )rK   rm   rĶ   )rv   rK   rm   rĶ   rJ   r'   c                K   s:   t jg |  ” ¢f|p| j|p | jd|¤jt| |dS ©Nr§   ©rĶ   )rN   ZrandrH   rK   rm   r   rŠ   ©rv   rK   rm   rĶ   rJ   r0   r0   r1   Ś	rand_likeR  s    	
’żüūrŌ   c                K   s:   t jg |  ” ¢f|p| j|p | jd|¤jt| |dS rŃ   )rN   ZrandnrH   rK   rm   r   rŠ   rÓ   r0   r0   r1   Ś
randn_likec  s    	
’żüūrÕ   )rK   Ślayoutrm   Ś
pin_memoryŚrequires_gradrĶ   )	rv   rI   rK   rÖ   rm   r×   rŲ   rĶ   r'   c                C   s>   t jg |  ” ¢||p| j|p | j|p(| j|djt| |dS )N)rK   rÖ   rm   rŲ   rŅ   )rN   rO   rH   rK   rÖ   rm   r   rŠ   )rv   rI   rK   rÖ   rm   r×   rŲ   rĶ   r0   r0   r1   Ś	full_liket  s    
śłrŁ   )rv   ŚhighrK   rm   rĶ   rJ   r'   c                K   s@   t jjd|g |  ” ¢f|p| j|p&| jd|¤jt| |dS )Nr   r§   rŅ   ©rn   ŚrandintŚlowrH   rK   rm   r   rŠ   )rv   rŚ   rK   rm   rĶ   rJ   r0   r0   r1   Śrandint_like  s    

żūśłrŽ   )rv   rŻ   rŚ   rK   rm   rĶ   rJ   r'   c                K   s@   t jj||g |  ” ¢f|p| j|p&| jd|¤jt| |dS rŃ   rŪ   )rv   rŻ   rŚ   rK   rm   rĶ   rJ   r0   r0   r1   Śrandint_like_low  s    
żūśłrß   )rŚ   rH   rJ   r'   c                 K   s   t jjd| |fi |¤S ©Nr   )rn   rÜ   rŻ   )rŚ   rH   rJ   r0   r0   r1   rÜ   ³  s    rÜ   )rb   rc   Śbiasr'   c                 C   s*   t jj |”}t jj | ||| ” d ”S rą   )rN   r&   Ś
_quantizedZ$wrapped_fbgemm_pack_gemm_matrix_fp16Z!wrapped_fbgemm_linear_fp16_weightrH   )rb   rc   rį   Śpacked_weightr0   r0   r1   Ś#linear_dynamic_fp16_unpacked_weight¼  s    ’rä   )rb   Śinput_scaleŚinput_zero_pointrc   Śweight_scaleŚweight_zero_pointrį   Ś	out_scaleŚout_zero_pointŚout_channelr'   c
              	   C   s.   t jj ||||”}
t jj | |||
|||	”S r7   )rN   r&   rā   Z_wrapped_linear_prepackZ#_wrapped_quantized_linear_prepacked)rb   rå   rę   rc   rē   rč   rį   ré   rź   rė   rć   r0   r0   r1   Śwrapped_quantized_linearČ  s    ’łrģ   )Śpackedr'   c                 C   s\   t jt jddd}|| dddf }|| ddd f }| dd df  t j”| | S )N)Śu8r'   c                    sx    fdddD \}}}}t jdkrL||d>  |d>  |d>   tj”d S |d> |d>  |d>  |  tj”d S d S )	Nc                 3   s"   | ]} d |f   tj”V  qdS ©.N)r   rN   Śint32)rV   Śn©rī   r0   r1   r   ę  rZ   zPq_embedding_bag_byte_unpack_decomp.<locals>.bitcast_u8_to_f32.<locals>.<genexpr>)r   r   rl   é   Ślittleé   r   é   rļ   )ŚsysŚ	byteorderrµ   rN   Śfloat32)rī   rD   r³   rø   Śwr0   rņ   r1   Śbitcast_u8_to_f32å  s    
(z=q_embedding_bag_byte_unpack_decomp.<locals>.bitcast_u8_to_f32.ių’’’éü’’’)rN   r   r   rł   )rķ   rū   ZscalesŚoffsetsr0   r0   r1   Ś"q_embedding_bag_byte_unpack_decompć  s    rž   )ŚaŚgridŚinterpolation_modeŚpadding_modeŚalign_cornersr'   c                 C   s@   | j t  d”ko$|dko$| jtjd }t| |||||d}|S )Nry   r   rŅ   )r   r  r  r  Ś_expand_grid)rm   rN   Zis_contiguousZcontiguous_formatŚdecomp_grid_sampler_2d)r’   r   r  r  r  r  Śoutputr0   r0   r1   Śgrid_sampler_2dń  s    ’żśr  )rv   Śleft_tensorsŚright_tensorsŚscalarr'   c                 C   s   t jj| t j ||”|dS ©NrP   )rn   Ś_foreach_addŚListŚ_foreach_mul©rv   r  r	  r
  r0   r0   r1   Ś_foreach_addcmul_scalar  s    ’r  c                 C   s   t jj| t j ||”|dS r  )rn   r  r  Z_foreach_divr  r0   r0   r1   Ś_foreach_addcdiv_scalar  s    ’r  )Śstart_tensorsŚend_tensorsrc   r'   c              	   C   s"   t j | t j t j || ”|””S r7   )rn   r  r  r  ŚScalarŚ_foreach_sub)r  r  rc   r0   r0   r1   Ś_foreach_lerp_scalar(  s    ’žr  )r  r  Śscalarsr'   c              	   C   s"   t j | t j t j || ”|””S r7   )rn   r  r  r  Ś
ScalarListr  )r  r  r  r0   r0   r1   Ś_foreach_lerp_scalarlist6  s    ’žr  )	rb   rc   rį   Śrunning_meanŚrunning_varŚtrainingŚexponential_average_factorŚepsilonr'   c              
   C   sB   t  | |||||||”\}}	}
|r,||	|
fS || d”| d”fS )N)r   )rn   Śnative_batch_normZ	new_zeros)rb   rc   rį   r  r  r  r  r  r’   ŚbŚcr0   r0   r1   Śmiopen_batch_normD  s     ų

żr"  .)r'   c                   C   s   i t „t„S r7   )r*   r   r0   r0   r0   r1   Śfast_random_decompsd  s    r#  c                   C   s   t jr
tS t S )z"decomps can change based on config)r   Zfallback_randomr*   r#  r0   r0   r0   r1   Śselect_decomp_tablek  s    r$  )rv   ŚmaskŚsourcer'   c           
      C   s   ddl m}m} || j|jrt | |g”\} }| d” d”d }dd | ||fD \}}}t 	|||gd”}	t
 ||	|” | j”S tS )Nr   )ŚBackendFeatureŚhas_backend_featurerz   r   c                 s   s   | ]}|  ” V  qd S r7   )r¤   )rV   rD   r0   r0   r1   r     rZ   z!masked_scatter.<locals>.<genexpr>)Zcodegen.commonr'  r(  rm   ZMASKED_SCATTER_WITH_INDEXrn   Zbroadcast_tensorsŚreshapeZcumsumŚ_unsafe_masked_indexrN   r©   rµ   r   r8   )
rv   r%  r&  r'  r(  Z
source_idxZ	self_flatZ	mask_flatZsource_flatr¹   r0   r0   r1   Śmasked_scatterr  s    r+  )rb   Ś	quant_minŚ	quant_maxŚepsrK   r'   c           	      C   sv   t  | ”\}}|| t||  }t  |t  |g””}|t  || ” t j” }t  |||”}| t j	”| t j
”fS r7   )rN   Zaminmaxr¬   rA   r   rt   r   ŚintrG   Śfloat64Śint64)	rb   r,  r-  r.  rK   Zmin_valZmax_valZscaleZ
zero_pointr0   r0   r1   Śchoose_qparams_tensor  s    r2  )rv   rS   r&  Ś
accumulater'   c                 C   s.   |   ” }t ||g| |j”|”}| | j”S r7   )r¤   rN   Z	index_putr)  r   )rv   rS   r&  r3  Z	flattenedr0   r0   r1   Śput  s
    ’r4  c                 C   s   t j| |||d}|  |”S )N)r3  )rn   r4  Zcopy_)rv   rS   r&  r3  r   r0   r0   r1   Śput_£  s    r5  )r2   r  rR   Śinput_dtyper'   c                 C   sD   | | }t j||dd}t | ||”}| j|kr<| |”}| ” S )NTr}   )rN   ro   r   ŚfmarK   r   Ś
contiguous)r2   r  rR   r6  Znew_grad_outputZsum_new_gradZ
grad_inputr0   r0   r1   Ś_softmax_backward_data®  s    

r9  T©Śinclude_self)rv   rR   rS   ŚsrcŚreduction_typer;  r'   c                C   sr  |dkrt | js| jjp | jj}t |”}|rJ| }t | ” |||”}	n2|  ||d”}t | ” |||”}	|	 	|	dk d”}	| |||”}|r||	 S ||	 S t
tjj|| j|j|jjdrĄtS | j|d d   ” | jd |  ”  }
| ” g| j|d d  ¢| jd | ¢R }g t| j| | j¢dtd| j| ¢R }| tj” |
” |” |”}| j|||||dS )NŚmeanr   r   Tr:  )r    rK   Zis_floating_pointrØ   rN   Z	ones_likerT   Z
index_fillZ
zeros_likeZmasked_fillr!   rn   Zscatter_reduce_Ztworm   rM   r8   r   r   rp   Śndimr   r1  Zrepeat_interleaver)  r^   Zscatter_reduce)rv   rR   rS   r<  r=  r;  Ztrue_divisionZonesr   ŚcountsZrepeatsZindex_shaper_   Zscatter_indexr0   r0   r1   Śindex_reduceÄ  sP    

’
ś(,,’žż’ūrA  )rD   Śkernel_sizere   rf   rg   Ś	ceil_moderR   r'   c                 C   sŹ   |dkrdg| }|dkr$dg| }|s,|}t ||}t ||}t ||}t ||}t tj|”}tjjj||ds|t 	tj
”jkrtS t | |||||”\}}	t |	|| j| d  |||”}
||
fS )Nr   r   )Zn_dim)r   Ś	functoolsŚreduceŚoperatorŚmulrN   Z	_inductorZloweringZ%should_fallback_max_pool_with_indicesZiinfoZint8rA   r8   ŚprimsZ!_low_memory_max_pool_with_offsetsZ'_low_memory_max_pool_offsets_to_indicesr   )rD   rB  re   rf   rg   rC  rR   Zwindow_sizeŚvalsrż   r3   r0   r0   r1   Ś_max_pool_with_indicesł  sF    	





’’üśśrJ  )rD   rB  re   rf   rg   rC  r'   c              	   C   s   t | |||||ddS )Nrl   r{   ©rJ  ©rD   rB  re   rf   rg   rC  r0   r0   r1   Śmax_pool2d_with_indices-  s    	’rM  c              	   C   s   t | |||||ddS )Nró   r{   rK  rL  r0   r0   r1   Śmax_pool3d_with_indices;  s    	’rN  )rD   Śoutput_sizer'   c           	      C   s   | j ^ }}}|\}}|dks&|dkrPg |¢||}|  |”| j|tjdfS || dkr|| dkr|| || g}t | |”S tS )Nr   r   )r   Z	new_emptyrN   r1  rn   rM  r8   )	rD   rO  ŚbatchZh_inZw_inZh_outZw_outZo_sizerB  r0   r0   r1   Śadaptive_max_pool2dI  s    rQ  ©Ś	out_int32ŚrightŚsideŚsorter)Śsorted_sequencerv   rS  rT  rU  rV  r'   c                C   s(   t j| tj|g| jd||||dd S )N)rm   rR  r   )rn   ŚsearchsortedrN   r;   rm   )rW  rv   rS  rT  rU  rV  r0   r0   r1   Śsearchsorted_scalar[  s    
śłrY  ē      Ą?ēUUUUUUÕ?)rv   ŚnoiseŚlowerŚupperr  Ś	generatorr'   c                 C   sj   |rF| dk}t j| |||d}t || | | ”}t ||d”}	||	fS || d }
t  | |
”t ” fS d S )Nr   )r_  r   rl   )rn   ŚuniformrN   r©   Ś
leaky_relur   )rv   r\  r]  r^  r  r_  Znot_positiveŚrr  Z	noise_outZnegative_sloper0   r0   r1   Śrrelu_with_noise_functionalo  s    	rc  )NN)r   )N)Nr   r   )N)r   )NF)NF)N)r   r   F)r   )r   )F)F)Nr   r   F)Nr   r   F)rZ  r[  FN)ārD  ŚloggingrÆ   rF  r÷   Śtypingr   r   r   r   r   Ztyping_extensionsr   r   rN   Ztorch._decompŚ_decompr-   Ztorch._prims_commonZ_prims_commonrĻ   Z$torch.ao.quantization.fx._decomposedr	   r
   r   Ztorch._decomp.decompositionsr   r  r   r   r9   r   r   Z$torch._decomp.decompositions_for_rngr   Ztorch._dynamo.utilsr   Ztorch._environmentr   Z!torch._higher_order_ops.out_dtyper   Ztorch._inductor.utilsr   r   r   r   Z%torch.fx.experimental.symbolic_shapesr   r   r   Ś r   r   r   r    r!   r"   r#   Z_opsZOperatorBaseZOpOverloadPacketr$   Ś__annotations__Ś	getLoggerŚ__name__r+   r&   rn   rH  Z	quantizedrā   Zquantized_decomposedZ_adaptive_avg_pool2d_backwardZindex_selectZaddmvZarangeZbitwise_and_Zbitwise_or_Z
clamp_min_ŚdistZeluZ
empty_likeZflipZgeluZhardtanhŚlcmra  Zlinalg_vector_normZ_log_softmaxZ max_pool2d_with_indices_backwardZ_native_batch_norm_legitZ#_native_batch_norm_legit_functionalZ$_native_batch_norm_legit_no_trainingZ_batch_norm_with_updateZ"_batch_norm_with_update_functionalZ_batch_norm_no_updateZbatch_norm_backwardr  Znative_group_normZnative_layer_normZnll_loss2d_backwardZpermute_copyZrrelu_with_noise_backwardZ_softmaxZsin_Zsqrt_Z_to_copyZtril_indicesZtriu_indicesZunbind_copyr/  Zupsample_bilinear2dZvecrä   rģ   Zinductor_decompositionsr*   Z_unsafe_indexr*  Z#_unsafe_masked_index_put_accumulateZ+_scaled_dot_product_flash_attention_for_cpur    r9  rF   rE   rT   ZgluZselect_scatterZslice_scatterŚsplitr   r   ro   ZunbindZbaddbmmr%   r)   Z
OpOverloadr.   r   r:   Z_assert_asyncr<   Śstrr>   Z_functional_assert_asyncr?   rC   ZSymIntŚtypesŚNumberrG   rO   ra   rq   Śtuplert   rs   ru   r   rK   r   r   r   r²   rŗ   r¼   r½   Zdetach_rĮ   rĀ   rĘ   rĒ   rŹ   Z	view_copyrĖ   rĢ   rĶ   rŠ   rŌ   rm   rÕ   rŁ   rĪ   r¬   rÖ   rŽ   Z	low_dtyperß   rÜ   Zembedding_bag_byte_unpackrž   r  Z_foreach_addcmulr  r  Z_foreach_addcdivr  Z_foreach_lerpr  r  r  r"  Zpy_implZ_CZDispatchKeyZAutogradŚcacheŚdictr#  r$  r+  Zchoose_qparamsr;   r2  r4  r5  rA  rJ  rM  rN  rQ  rX  rY  rc  Ś	Generatorr0   r0   r0   r1   Ś<module>   s<  
’
Ö’.ļ 
ž	
śü

ū	
  ż

ü
ü
śłü
ō 
 żü
   śł
 żü' žż=

ü
ū-
  żü
  żü

ū	żż	 žżūłūł÷
ö
śų
ł÷
ü
ü
õ
   ūś
 üū
 üū
ü

ü


÷ ü
ś üū üū

ūłų5ų4    śł    śł
ž
łų    śł