o
    ółĪ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g eCjHeCjIeCjJeCjKeCjLeCjMeCjNeCjOeCjPeCjQeCjReCjSeCjTeCjUeCjVeCjWeCjXeCjYeCjZeCj[eCj\eCj]eCj^eCj_eCj`eCjaeCjbeCjceCjdeCjeeCjfeCjgeCjheCjie(eCjjeCjkeCjleCjmjneCjojpeEjqeFjr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 de
e=ee= f deee9e8f gee9e8f f fddZeeCjgdejdejdendendedejfddZeeCjjgdejd eddfd!d"ZeeCjjgdejd eddfd#d$ZeeCjjygddd%d&ejd'eejj d(eejj ddfd)d*ZeeCjge 		dód+ejd'eejj d(eejj dejfd,d-ZeeCjgd.ee
enejf  d/ejjd0edejfd1d2ZeeCj}gdd3d+ejd4end5ejdejd6ejjdejfd7d8Z}eeCjjygd.ee
enejf  d9een d0edejfd:d;ZeeCjgdejd<ejd=ejd>een d?e
eneen f d@e
eneen f dAe
eneen f dBedCeen dDendEee deejejejf fdFdGZeeCjjgdōd+ejdHendejfdIdJZeeCjge	dõdKejdLejdMeej  dejfdNdOZeeCj”ge			dödKejdPejdQejdMeej  dRejjd6ejjdejfdSdTZ”eeCj¢ge	dõdKejdUejdMeej  dejfdVdWZ¢eeCj£jyg	 dōdXeej d4endejfdYdZZ£eeCj¤gd+ejdejfd[d\Z¤eeCj„gdd3d+ejd]ejd6eejj dejfd^d_Z„eeCj¦gdKejdejfd`daZ¦eeCj§eCjØgdKejdejfdbdcZ§eeCj©eDj©gdKejddejdejfdedfZ©eeCjŖeDjŖgdKejddejdejfdgdhZŖeeCj«		id÷dKejd4een djedejfdkdlZ«eeCj¬		id÷dKejd4een djedejfdmdnZ¬eeCj­gdKejd4endoendpendejf
dqdrZ­eeCj®jygdKejd.ee
enejf  dejfdsdtZÆeeCj®j gdKejduej dejfdvdwZ°	dõdejdxeej± dej±fdydzZ²eeCj³dddd{dKejdueej  d|eej“ dxeej± d0edejfd}d~Z³eeCjµdddd{dKejdueej  d|eej“ dxeej± d0edejfddZµeeCj¶ddddidiej·ddKejd/e
eneøf dueej  deej¹ d|eej“ dededxej±dejfddZ¶eeCjŗjydddd{dKejdendueej  d|eej“ dxeej± d0edejfddZŗeeCjŗj»dddd{dKejdendendueej  d|eej“ dxeej± d0edejfddZ¼eeCj½jydend.ee
enejf  d0edejfddZ½eeEjqjyd<ejd=ejdejdejfddZqeeFjrjyd<ejdejdejd=ejdejdejdejdejdejdendejfddZreejBjEj¾dejdejfddZæeeCjĄge	 	 	idųdejdejd end”end¢edejfd£d¤ZĄeeCjĮjĀ	dłdKeej d„eej d¦eej d§eødeej f
dØd©ZĆeeCjÄjĀ	dłdKeej d„eej d¦eej d§eødeej f
dŖd«ZÅeeCjĘjĀd¬eej d­eej d=ejjdeej fd®dÆZĒeeCjĘjČd¬eej d­eej d°eejj deej fd±d²ZÉeCjŹjy ĖejĢjĶjĪ”eeCjŹd<ejd=ejdejej d³ejej d“ejej dµed¶eød·eødeejejejf fdød¹ZŹe jĻdeŠeedŗef f fd»d¼ZŃdeŠeedŗef f fd½d¾ZŅeeCjÓdKejdæejdĄejdejfdĮdĀZÓeeGjŌjÕd<ejdĆendÄendÅeøduej deejejf fdĘdĒZÖeeCj×	idśdKejd5ejdĄejdČedejf
dÉdŹZ×eeCjŲ	idśdKejd5ejdĄejdČedejf
dĖdĢZŲeeCjzjyedejdĶejd4endĪej dejf
dĻdŠZzeeCjŁdŃdŅdKejd4end5ejdÓejdŌedÕedejfdÖd×ZŁd+ejdŲeen d?ee
eneen f  d@e
eneen f dAe
eneen f dŁed4endeejejf fdŚdŪZŚeeCjŪ		 		idūd+ejdŲeen d?ee
eneen f  d@e
eneen f dAe
eneen f dŁedeejejf fdÜdŻZŪeeCjÜ		 		idūd+ejdŲeen d?ee
eneen f  d@e
eneen f dAe
eneen f dŁedeejejf fdŽdßZÜeeCjŻd+ejdąeen deejejf fdįdāZŻeeCjŽjĀdididddćdäejdKejjdåedęedēee dčeej dejfdédźZßeeCją	ė	ģ	i	düdKejdķejdīeødļeødµedšeejį deejejf f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   śc/home/www/facesmatcher.com/frenv_anti/lib/python3.10/site-packages/torch/_inductor/decomposition.pyr.      s
   r.   Śgrad_outputŚindicesŚnum_weightsŚpadding_idxŚscale_grad_by_freqc                 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Śmsgc                 C   ó   d S r7   r0   ©r;   r<   r0   r0   r1   Śassert_async_msg_decomp§   ó   r?   c                 C   r=   r7   r0   r>   r0   r0   r1   Ś"functional_assert_async_msg_decomp­   r@   rA   )ŚminŚmaxŚsymbolrB   rC   c                C   r=   r7   r0   )rD   rB   rC   r0   r0   r1   Śsym_constrain_range_for_size²   s   rE   Śxc                 C   s(   |d ur	|   |”} |d ur|  |”} | S r7   )Ś	clamp_minŚ	clamp_max)rF   rB   rC   r0   r0   r1   Śclamp¼   s
   

rI   ŚsizeŚ
fill_valueŚkwargsc                 K   s:   |  d”}|d u rtt||d< tj| |fi |¤S tS )NŚdtype)Śgetr   ŚtypeŚtorchŚfullr8   )rJ   rK   rL   rM   r0   r0   r1   rQ   Ź   s
   
rQ   ©ŚalphaŚdimŚindexrS   c                C   s*   t  s| jtjkrtS t| |||d|dS )NF)ZinplacerS   )r   rM   rP   Zbfloat16r8   r   )rF   rT   rU   r;   rS   r0   r0   r1   Ś	index_add×   s   rV   Śphysical_layoutc                    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©rJ   r0   r1   Ś
<listcomp>ö   s    z"empty_permuted.<locals>.<listcomp>)ŚlenŚ	enumeraterP   ŚemptyŚpermute)rJ   rW   rL   ŚpermŚprY   r0   rZ   r1   Śempty_permutedķ   s   
&rb   ŚinputŚweightŚ
bias_sizesŚstrideŚpaddingŚdilationŚ
transposedŚoutput_paddingŚgroupsŚoutput_maskc                 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   ŚdevicerO   r8   ŚatenŚsumr)   ŚrangerT   Śconvolution_backward)r2   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   Z	grad_biasZgrad_inpZgrad_weightŚ_r0   r0   r1   rr   ł   s"    
õ
rr   Śdecimalsc                 C   s   d| }t  | | ”d|  S )Ng      $@g      š?)ro   Śround)rF   rt   Zten_pow_decimalsr0   r0   r1   Ś	round_dec  s   rv   ŚselfŚbatch2r   c                 C   sÄ   t jr+| jjdvr+t| jd dkst|jd dkr+|  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   rm   é’’’’©rT   rz   ŚinductorZdecompose_bmmT©rT   Śkeepdim)r   Ścoordinate_descent_tuningrn   rO   r   ŚshapeŚ	unsqueezerp   rJ   r   rP   Śsqueezer8   )rw   rx   r   Śoutr0   r0   r1   Śbmm   s"   	’’’žr   Śmat1Śmat2Śbetac                 C   sģ   | j jdkrtt| d”dkr=t| d”dkr=td d  d7  < tj| d”| d” ddd d”}|| ||   S t| d”dkrtt	| d”d	krtt	| d”d	krttd d  d7  < |j
| jddd}|| ||   S tS )
Nrz   r   r   r{   r}   Zdecompose_addmmTr~   é   )rn   rO   r   rJ   r   rP   rp   r   r   r   ŚTr8   )rw   r   r   r   r   rS   r   r0   r0   r1   Śaddmm:  s*   
’’ž’žżr   Śinput2c                    sV  t jr)jjdvr)tjd dkst jd dkr) d”  d” jddS jjdkr©t d”dkrzt d”dkrzt  d”dkrzj	 j	krzt
t ”t  ” dkrztd	 d
  d7  < t  fddt d”D ”S 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 )Nry   r   r   rm   r|   rz   r{   é    r}   Zdecompose_mmc                    s    g | ]}|d d f   qS r7   r0   )rX   Śi©r   rw   r0   r1   r[   r  s     zmm.<locals>.<listcomp>Tr~   )r   r   rn   rO   r   r   r   rp   rJ   rM   r   rP   Śnumelr   Ścatrq   r   r8   )rw   r   r   r0   r   r1   ŚmmX  s8   ’’žż
üū$’’žr   Śtensorsc                    s  dt jdtf fdd}tt|| tdkr6t| dtjid }d }||j	kr0| 
” S |j|dS dt  k rDt| k rMn ntj  ”S tdkrtfd	d
D rd }t|j} dk rr t|j n  |  t” |  ”j|    d ” 
” S tS )NrF   r'   c                    sL   t | jdkrt| jd dkrdS  t | jk r$t| j  dkr$dS dS )Nr   r   FT)r\   r   r   )rF   r|   r0   r1   Śnon_empty_tensor  s
     zcat.<locals>.non_empty_tensorr   Śtype_promotion_kindr   ©rM   c                 3   s    | ]	}| d  u V  qdS )r   Nr0   )rX   Śt)Śfiltered_tensorsr0   r1   Ś	<genexpr>²  s    
’zcat.<locals>.<genexpr>)rP   ŚTensorŚboolr)   Śfilterr\   r   r   ŚDEFAULTrM   ŚcloneŚtoro   r   ŚdefaultŚallr   Śinsertr   ŚexpandŚflattenr8   )r   rT   r   Zpromoted_dtypeZ
filtered_tŚinpr   r0   )rT   r   r1   r     s6   ’žż’’
ż ’
 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   ©rM   rn   r   g        )Ś
is_complexrP   ŚwhereŚisnanŚrealŚfloatŚatan2Śimagr   r   ZINT_TO_FLOATZscalar_tensorŚmathŚpirn   )rF   rs   rM   r°   Śretr0   r0   r1   Śangleæ  s   ’
žr²   Śyc                C   sŗ   t  | ”o|  ” }t  |”o| ” }|r|stS |}|d ur"|| }t  | j|j”}dt jdt jfdd}| d } |d }||  | jj”}|| |jj”}	t j	||	 dd |”}
|
S )Nr;   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]rm   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)
rP   Z	is_tensorrØ   r8   Zpromote_typesrM   r   rµ   r«   r¤   )rF   r³   rS   Zx_is_complex_tensorZy_is_complex_tensorŚzZcomplex_typer¶   Z
x_reshapedZ
z_reshapedŚresultr0   r0   r1   ŚaddÓ  s   rŗ   c                 C   s   |   ” rtS | S r7   )rØ   r8   ©rw   r0   r0   r1   Śconj_physical  s   r¼   c                 C   s   | S r7   r0   r»   r0   r0   r1   Ślift  r@   r½   Śotherc                 C   s   t  t  |”|| kB | |”S r7   ©rP   r©   rŖ   ©rw   r¾   r0   r0   r1   Śfmin  ó   rĮ   c                 C   s   t  t  |”|| k B | |”S r7   ræ   rĄ   r0   r0   r1   Śfmax  rĀ   rĆ   Fr   c                 C   ó    | j tjkrtj| ||dS tS ©Nr~   )rM   rP   r   Śanyr8   ©rw   rT   r   r0   r0   r1   Śamax  ó   rČ   c                 C   rÄ   rÅ   )rM   rP   r   r”   r8   rĒ   r0   r0   r1   Śamin"  rÉ   rŹ   ŚstartŚlengthc                 C   s   t  | |||” ” S r7   )rP   Znarrowr   )rw   rT   rĖ   rĢ   r0   r0   r1   Śnarrow_copy-  s   rĶ   c                 C   s   t  | |” ” S r7   )ro   rµ   r   )rw   rJ   r0   r0   r1   Śview_copy_default7  s   rĪ   rM   c                 C   s   |   |” ” S r7   )r   r   )rw   rM   r0   r0   r1   Śview_copy_dtype?  s   rĻ   Śmemory_formatc                 C   s    |t ju s	|d u rt | ”S |S r7   )rP   Śpreserve_formatŚutilsZsuggest_memory_format)r;   rŠ   r0   r0   r1   Śget_like_layoutG  s   
rÓ   )rM   rn   rŠ   rn   c                K   ó:   t jg |  ” ¢f|p| j|p| jd|¤jt| |dS ©Nr§   ©rŠ   )rP   ZrandrJ   rM   rn   r   rÓ   ©rw   rM   rn   rŠ   rL   r0   r0   r1   Ś	rand_likeR  ó   	
’żü
ūrŲ   c                K   rŌ   rÕ   )rP   ZrandnrJ   rM   rn   r   rÓ   r×   r0   r0   r1   Ś
randn_likec  rŁ   rŚ   )rM   Ślayoutrn   Ś
pin_memoryŚrequires_gradrŠ   rŪ   rÜ   rŻ   c                C   s>   t jg |  ” ¢||p| j|p| j|p| j|djt| |dS )N)rM   rŪ   rn   rŻ   rÖ   )rP   rQ   rJ   rM   rŪ   rn   r   rÓ   )rw   rK   rM   rŪ   rn   rÜ   rŻ   rŠ   r0   r0   r1   Ś	full_liket  s   
ś
łrŽ   Śhighc                K   s@   t jjd|g |  ” ¢f|p| j|p| jd|¤jt| |dS )Nr   r§   rÖ   ©ro   ŚrandintŚlowrJ   rM   rn   r   rÓ   )rw   rß   rM   rn   rŠ   rL   r0   r0   r1   Śrandint_like  s   

żūś
łrć   rā   c                K   s@   t jj||g |  ” ¢f|p| j|p| jd|¤jt| |dS rÕ   rą   )rw   rā   rß   rM   rn   rŠ   rL   r0   r0   r1   Śrandint_like_low  s   
żūś
łrä   c                 K   s   t jjd| |fi |¤S ©Nr   )ro   rį   rā   )rß   rJ   rL   r0   r0   r1   rį   ³  s   rį   Śbiasc                 C   s*   t jj |”}t jj | ||| ” d ”S rå   )rP   r&   Ś
_quantizedZ$wrapped_fbgemm_pack_gemm_matrix_fp16Z!wrapped_fbgemm_linear_fp16_weightrJ   )rc   rd   rę   Śpacked_weightr0   r0   r1   Ś#linear_dynamic_fp16_unpacked_weight¼  s   ’ré   Śinput_scaleŚinput_zero_pointŚweight_scaleŚweight_zero_pointŚ	out_scaleŚout_zero_pointŚout_channelc
              	   C   s.   t jj ||||”}
t jj | |||
|||	”S r7   )rP   r&   rē   Z_wrapped_linear_prepackZ#_wrapped_quantized_linear_prepacked)rc   rź   rė   rd   rģ   rķ   rę   rī   rļ   rš   rč   r0   r0   r1   Śwrapped_quantized_linearČ  s   ’łrń   Śpackedc                 C   s^   dt jdt jfdd}|| dddf }|| ddd f }| dd df  t j”| | S )NŚu8r'   c                    st    fdddD \}}}}t jdkr&||d>  |d>  |d>   tj”d S |d> |d>  |d>  |  tj”d S )	Nc                 3   s$    | ]} d |f   tj”V  qdS ©.N)r   rP   Zint32)rX   Śn©ró   r0   r1   r   ę  s   " zPq_embedding_bag_byte_unpack_decomp.<locals>.bitcast_u8_to_f32.<locals>.<genexpr>)r   r   rm   é   Ślittleé   r   é   rō   )ŚsysŚ	byteorderrµ   rP   Śfloat32)ró   rF   r³   rø   Śwr0   rö   r1   Śbitcast_u8_to_f32å  s   
((z=q_embedding_bag_byte_unpack_decomp.<locals>.bitcast_u8_to_f32.ių’’’éü’’’)rP   r   r   rż   )rņ   r’   ŚscalesŚoffsetsr0   r0   r1   Ś"q_embedding_bag_byte_unpack_decompć  s    r  ŚaŚgridŚinterpolation_modeŚpadding_modeŚalign_cornersc                 C   s@   | j t  d”ko|dko| jtjd }t| |||||d}|S )Nrz   r   rÖ   )r  r  r  r  Ś_expand_grid)rn   rP   Zis_contiguousZcontiguous_formatŚdecomp_grid_sampler_2d)r  r  r  r  r  r	  Śoutputr0   r0   r1   Śgrid_sampler_2dń  s   ’żśr  Śleft_tensorsŚright_tensorsŚscalarc                 C   ó   t jj| t j ||”|dS ©NrR   )ro   Ś_foreach_addŚListŚ_foreach_mul©rw   r  r  r  r0   r0   r1   Ś_foreach_addcmul_scalar  ó   ’r  c                 C   r  r  )ro   r  r  Z_foreach_divr  r0   r0   r1   Ś_foreach_addcdiv_scalar  r  r  Śstart_tensorsŚend_tensorsc              	   C   ó"   t j | t j t j || ”|””S r7   )ro   r  r  r  ŚScalarŚ_foreach_sub)r  r  rd   r0   r0   r1   Ś_foreach_lerp_scalar(  ó   ’žr  Śscalarsc              	   C   r  r7   )ro   r  r  r  Ś
ScalarListr  )r  r  r   r0   r0   r1   Ś_foreach_lerp_scalarlist6  r  r"  Śrunning_meanŚrunning_varŚtrainingŚexponential_average_factorŚepsilonc              
   C   sB   t  | |||||||”\}}	}
|r||	|
fS || d”| d”fS )N©r   )ro   Śnative_batch_normZ	new_zeros)rc   rd   rę   r#  r$  r%  r&  r'  r  ŚbŚcr0   r0   r1   Śmiopen_batch_normD  s    
ų
ż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.  ŚmaskŚsourcec           
      C   s   ddl m}m} || j|jrCt | |g”\} }| d” d”d }dd | ||fD \}}}t 	|||gd”}	t
 ||	|” | j”S tS )Nr   )ŚBackendFeatureŚhas_backend_featurer{   r   c                 s   s    | ]}|  ” V  qd S r7   )r¤   )rX   rF   r0   r0   r1   r     s    z!masked_scatter.<locals>.<genexpr>)Zcodegen.commonr1  r2  rn   ZMASKED_SCATTER_WITH_INDEXro   Zbroadcast_tensorsŚreshapeZcumsumŚ_unsafe_masked_indexrP   r©   rµ   r   r8   )
rw   r/  r0  r1  r2  Z
source_idxZ	self_flatZ	mask_flatZsource_flatr¹   r0   r0   r1   Śmasked_scatterr  s   r5  Ś	quant_minŚ	quant_maxŚepsc           	      C   sv   t  | ”\}}|| t||  }t  |t  |g””}|t  || ” t j” }t  |||”}| t j	”| t j
”fS r7   )rP   Zaminmaxr¬   rC   r   ru   r   ŚintrI   Zfloat64Śint64)	rc   r6  r7  r8  rM   Zmin_valZmax_valŚscaleZ
zero_pointr0   r0   r1   Śchoose_qparams_tensor  s   r<  Ś
accumulatec                 C   s.   |   ” }t ||g| |j”|”}| | j”S r7   )r¤   rP   Z	index_putr3  r   )rw   rU   r0  r=  Z	flattenedr0   r0   r1   Śput  s
   ’r>  c                 C   s   t j| |||d}|  |”S )N)r=  )ro   r>  Zcopy_)rw   rU   r0  r=  r   r0   r0   r1   Śput_£  s   
r?  r  Śinput_dtypec                 C   sD   | | }t j||dd}t | ||”}| j|kr| |”}| ” S )NTr~   )rP   rp   r   ŚfmarM   r   Ś
contiguous)r2   r  rT   r@  Znew_grad_outputZsum_new_gradZ
grad_inputr0   r0   r1   Ś_softmax_backward_data®  s   

rC  T©Śinclude_selfŚsrcŚreduction_typerE  c                C   sr  |dkrOt | jsO| jjp| jj}t |”}|r%| }t | ” |||”}	n|  ||d”}t | ” |||”}	|	 	|	dk d”}	| |||”}|rK||	 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   TrD  )r    rM   Zis_floating_pointrØ   rP   Z	ones_likerV   Z
index_fillZ
zeros_likeZmasked_fillr!   ro   Zscatter_reduce_Śtworn   rO   r8   r   r   rq   Śndimr   r:  Zrepeat_interleaver3  r_   Zscatter_reduce)rw   rT   rU   rF  rG  rE  Ztrue_divisionZonesr   ŚcountsZrepeatsZindex_shaper`   Zscatter_indexr0   r0   r1   Śindex_reduceÄ  sJ   

’
ś(,,
üūrL  Śkernel_sizeŚ	ceil_modec                 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sC|t 	tj
”jkrEtS t | |||||”\}}	t |	|| j| d  |||”}
||
fS )Nr   r   )Zn_dim)r   Ś	functoolsŚreduceŚoperatorŚmulrP   Z	_inductorZloweringZ%should_fallback_max_pool_with_indicesZiinfoZint8rC   r8   ŚprimsZ!_low_memory_max_pool_with_offsetsZ'_low_memory_max_pool_offsets_to_indicesr   )rF   rM  rf   rg   rh   rN  rT   Zwindow_sizeŚvalsr  r3   r0   r0   r1   Ś_max_pool_with_indicesł  sF   	





’’üśśrU  c              	   C   ó   t | |||||ddS )Nrm   r|   ©rU  ©rF   rM  rf   rg   rh   rN  r0   r0   r1   Śmax_pool2d_with_indices-  ó   	’rY  c              	   C   rV  )Nr÷   r|   rW  rX  r0   r0   r1   Śmax_pool3d_with_indices;  rZ  r[  Śoutput_sizec           	      C   s   | j ^ }}}|\}}|dks|dkr(g |¢||}|  |”| j|tjdfS || dkrB|| dkrB|| || g}t | |”S tS )Nr   r   )r   Z	new_emptyrP   r:  ro   rY  r8   )	rF   r\  ŚbatchZh_inZw_inZh_outZw_outZo_sizerM  r0   r0   r1   Śadaptive_max_pool2dI  s   r^  ©Ś	out_int32ŚrightŚsideŚsorterŚsorted_sequencer`  ra  rb  rc  c                C   s(   t j| tj|g| jd||||dd S )N)rn   r_  r   )ro   ŚsearchsortedrP   r;   rn   )rd  rw   r`  ra  rb  rc  r0   r0   r1   Śsearchsorted_scalar[  s   
śłrf  ē      Ą?ēUUUUUUÕ?ŚnoiseŚlowerŚupperŚ	generatorc                 C   sf   |r#| dk}t j| |||d}t || | | ”}t ||d”}	||	fS || d }
t  | |
”t ” fS )Nr   )rl  r   rm   )ro   ŚuniformrP   r©   Ś
leaky_relur   )rw   ri  rj  rk  r%  rl  Znot_positiveŚrr  Z	noise_outZnegative_sloper0   r0   r1   Śrrelu_with_noise_functionalo  s   	rp  )NNr(  r7   )Nr   r   )NF)r   r   F)r   )F)Nr   r   F)rg  rh  FN)ārO  ŚloggingrÆ   rQ  rū   Śtypingr   r   r   r   r   Ztyping_extensionsr   r   rP   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&   ro   rS  Z	quantizedrē   Zquantized_decomposedZ_adaptive_avg_pool2d_backwardZindex_selectZaddmvZarangeZbitwise_and_Zbitwise_or_Z
clamp_min_ŚdistZeluZ
empty_likeŚflipZgeluZhardtanhŚlcmrn  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_copyr9  Zupsample_bilinear2dZvecré   rń   Zinductor_decompositionsr*   Z_unsafe_indexr4  Z#_unsafe_masked_index_put_accumulateZ+_scaled_dot_product_flash_attention_for_cpur    rC  rH   rG   rV   ZgluZselect_scatterZslice_scatterŚsplitr   r   rp   ZunbindZbaddbmmr%   r)   Z
OpOverloadr.   r   r:   Z_assert_asyncr<   Śstrr?   Z_functional_assert_asyncrA   rE   ZSymIntŚtypesŚNumberrI   rQ   rb   rr   Śtupleru   rt   rv   r   rM   r   r   r   r²   rŗ   r¼   r½   Zdetach_rĮ   rĆ   rČ   rŹ   rĶ   Z	view_copyrĪ   rĻ   rŠ   rÓ   rŲ   rn   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.  r5  Zchoose_qparamsr;   r<  r>  r?  rL  rU  rY  r[  r^  re  rf  rp  Ś	Generatorr0   r0   r0   r1   Ś<module>   sJ  
’
’žżüūśłų	÷
öõōóņńšļīķģėźéčēęåäćāį ą!ß"Ž#Ż$Ü%Ū&Ś'Ł(Ų)×*Ö’. ļ
’
ž
	’žżüūśü’
ż
üū
	ż’
ž
żü
’žżü
ś’žżüśł’žżü
’žżüūśłų	÷
öõō 
ż’žżü
ś’žżüūśł
ż’žżü'ž’žż
=
ü’ž
üū
-ż’žżü
ż’žżü

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

’žżüūł’žżüūłų4’žżüūśł
ų4ś’žżüūśłś’žżüūśł’’ž
ł’žüūśłųś’žżüūśł