o
    پi                     @   sR  d dl mZ d dlZzd dlmZmZmZ W nF ey\   dedee	 de
eee f fddZd	ejjddfd
dZ	ddejdejdejdejde	de	deej dejfddZY nw dedee	 de
eee f fddZdedee	 ddfddZd	ejjddfddZ	ddejdejdejdejde	de	deej dejfddZdS )    )OptionalN)mul_nvfp4_a16process_nvfp4_scalesrepack_nvfp4quant_method
group_sizereturnc                 C   s   dS )N)FJPetit is not installed. Please install it with `pip install petit-kernel`. r   r   r
   r
   ^/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/layers/quantization/petit_utils.py_check_petit_nvfp4_supported	   s   r   layerc                 C      t dNr	   
ValueError)r   r
   r
   r   prepare_nvfp4_layer_for_petit   s   r   inputweightweight_scaleweight_scale_2size_nsize_kbiasc                 C   r   r   r   )r   r   r   r   r   r   r   r
   r
   r   apply_petit_nvfp4_linear   s   	r   c                 C   s$   | dkrdS |d ur|dkrdS dS )NNVFP4)FzPetit currently only supports: NVFP4 quantizations in sglang. Please check the `hf_quant_config.json` file for your model's quant configuration.   )Fz;Petit currently only supports: group_size=16 quantizations.)TNr
   r   r
   r
   r   r   $   s
   c                 C   s   t | |\}}|st|d S N)r   r   )r   r   	supported	error_msgr
   r
   r   verify_petit_nvfp4_supported7   s   r!   c                 C   sd   | j }| j}| jtj }t|||d}tjj	|dd| _t
| j||d}tjj	|dd| _d S )N)r   r   F)requires_grad)scalesr   r   )output_size_per_partitioninput_size_per_partitionr   viewtorchint32
contiguousr   nn	Parameterr   r   )r   part_size_npart_size_kqweightpetit_qweightr   r
   r
   r   r   =   s   c           
   
   C   s`   |  d| jd }| jd d |f }t|||||d||dd}	|d ur+|	| |	 |S )Nr   )absglobal_scalesize_mr   r   solution_id)reshapeshaper   sizeadd_)
r   r   r   r   r   r   r   
reshaped_x	out_shapeoutputr
   r
   r   r   N   s   	


r   )typingr   r'   petit_kernelr   r   r   ImportErrorstrinttupleboolr   r*   Moduler   Tensorr   r!   r
   r
   r
   r   <module>   sv    

