o
    ÔÙ¾i  ã                   @   s@   d dl Z d dlmZ G dd„ dejƒZdd„ Zedkreƒ  dS )é    Nc                       sJ   e Zd Zd‡ fdd„	Zdejdejfdd	„Zdejdejfd
d„Z‡  ZS )Ú
DummyModelé   é€   ç      à?c                    s(   t ƒ  ¡  t |d¡| _|| _|| _d S )Ni   )ÚsuperÚ__init__ÚnnÚLinearÚweights_projÚn_headsÚsoftmax_scale)ÚselfÚd_inr   r   ©Ú	__class__© úM/home/ubuntu/.local/lib/python3.10/site-packages/sglang/test/get_logits_ut.pyr      s   

zDummyModel.__init__ÚxÚq_scalec                 C   s:   |   |¡}|| jd  }| d¡}| d¡| | j }|S )Nç      à¿é   éÿÿÿÿ)r
   r   Ú	unsqueezer   )r   r   r   Úweightsr   r   r   Ú_get_logits_head_gate_orig   s
   

z%DummyModel._get_logits_head_gate_origc                 C   s:   |   |¡}| d¡}| jd | | j }| d¡| }|S )Nr   r   r   )r
   r   r   r   )r   r   r   r   Úscale_constr   r   r   Ú_get_logits_head_gate_opt   s
   

z$DummyModel._get_logits_head_gate_opt)r   r   r   )	Ú__name__Ú
__module__Ú__qualname__r   ÚtorchÚTensorr   r   Ú__classcell__r   r   r   r   r      s    r   c                  C   sÒ   t  d¡ tdddd} t  dd¡}t  dd¡}dd l}| ¡ }tdƒD ]}|  ||¡}q$td| ¡ | ƒ | ¡ }tdƒD ]}|  ||¡}q>td	| ¡ | ƒ td
||  	¡  
¡  ¡ ƒ t  ||¡sgJ dƒ‚d S )Nr   r   r   r   )r   r   r   r   iè  zOriginal version time:zOptimized version time:zDifference:z'Mismatch between original and optimized)r    Úmanual_seedr   ÚrandnÚtimeÚranger   Úprintr   ÚabsÚmaxÚitemÚallclose)Úmodelr   r   r%   ÚstartÚ_Úout_origÚout_optr   r   r   Úmain   s   
r1   Ú__main__)r    Útorch.nnr   ÚModuler   r1   r   r   r   r   r   Ú<module>   s    