o
    پi                     @   s   d dl mZmZ d dl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 er<d dlmZ d d	lmZmZ 			dd
ejdejdddeej ded dee ddfddZdS )    )TYPE_CHECKINGOptionalN)l1_norm)'get_global_expert_distribution_recorder)topk_ids_logical_to_physical)get_global_experts_capturer)StandardTopKOutputselect_experts)ExpertLocationDispatchInfo)
TopKConfig
TopKOutputhidden_statesrouter_logitstopk_configr   num_token_non_paddedexpert_location_dispatch_infor
   layer_idreturnr   c                 C   s  |j }|j}|j}|s4tjjj||jd\}	}
}|r-t|j	dkr"|	n	|	d d d df }	|	
tj}	n:|ra|d uratjjj|
tj|j|
tj|j|jddd|rUdn|jtdd
\}	}
}nd|_t| |||||dS |d urwt|
|}
t j|
d	 t j||
d
 t|	|
|S )N)kr      g#B;)	r   biask_groupgroup_countgroup_select_moderenorm	norm_typerouted_scaling_factorepsT)r   r   r   r   r   r   )topk_ids)r   r   )use_grouped_topkrenormalizecorrection_biastorchopsnpunpu_moe_gating_top_k_softmaxtop_kr   num_fused_shared_expertstofloat32npu_moe_gating_top_k
topk_groupnum_expert_groupr   floattorch_nativer	   r   r   on_select_expertsr   capturer   )r   r   r   r   r   r   r    r!   r"   topk_weightsr   _ r4   \/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/hardware_backend/npu/moe/topk.pyfused_topk_npu   sZ   	


	
r6   )NNN)typingr   r   r#   sgl_kernel_npu.norm.l1_normr   #sglang.srt.eplb.expert_distributionr   (sglang.srt.eplb.expert_location_dispatchr   -sglang.srt.layers.moe.routed_experts_capturerr   sglang.srt.layers.moe.topkr   r	   r
   r   r   Tensorintr6   r4   r4   r4   r5   <module>   s8    