o
    پi	                     @   s   d Z ddlZddlmZ ddlZeeZdejdeejejf fddZ	dejdeejejf fdd	Z
ddejdedejfddZdS )z
Common utilities for quark.
    N)Tuplewreturnc                 C   s:   d}|     | }| | | |tj}||fS )Ng      |@)absamaxfloatclamptotorchfloat8_e4m3fn)r   FP8_MAXscalescaled r   S/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/layers/int4fp8_utils.pyquantize_fp8_scale_tensorwise   s   r   c                 C   sz   d}|  d| jd  }| jdd| }t||d d d f  tj	| |}| | j| | jd d fS )N   )axis)
reshapeshaper   r   r   r
   roundr	   int8r   )r   S4_MAXw_flatr   r   r   r   r   quantize_int4_scale_columnwise   s
   , r   Tto_packreorderc           	   
   C   s  | j dkr	td|rg d}ng d}d}| j dkrrtj| jd | jd | tj| jd}| jd | }t|D ]7}t|D ]0}| d d || ||  f tj}|d	@ }t	|d d |f t
||d
 |d d |f< q?q9nN| j dkr~| tj}nBtj| jd | tj| jd}| jd | }t|D ]'}t|D ] }| || ||   }|d	@ }t	|| t
||d
 ||< qq|tjS )N   z?Pack: Only supports tensors with dimensions not greater than 2.)r   r                  r   )r   r!   r   r"   r   r#   r    r      r   r!   )dtypedevice   r   )ndim
ValueErrorr
   zerosr   int32r&   ranger	   
bitwise_orbitwise_left_shiftviewuint32)	r   r   	order_mappack_numpackednew_cci
packed_colr   r   r   pack_int4_to_int32   sP   


$

r8   )T)__doc__loggingtypingr   r
   	getLogger__name__loggerTensorr   r   boolr8   r   r   r   r   <module>   s    
 
 
