o
    پi6                     @   sj   d dl Z d dlZd dlZd dlmZ d dlmZ d dlm	Z	 dZ
G dd de jZedkr3e   dS dS )	    N)copy_all_layer_kv_cache_tiled)assign_draft_cache_locs)next_power_of_2   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestSpecUtilsc                 C   s  t j rdnd| _t jddt j| jd| _t jdt j| jdg| _t jdt j| jdg| _	t j
g dt j| jd| jd d d	ddf< t j
g d
t j| jd| j	d d d	ddf< | jd  | jd< | j	d  | jd< t j
dd | j| j	 D | jt jd| _d S )Ncudacpu      dtypedevice)d   r
   r
   )g        g?g?g333333?g?g      ?g333333?gffffff?皙??      ?r      )g       ggɿg333333ӿgٿg      g333333gffffff皙      )r   r   )r
   r   c                 S   s(   g | ]}t |jd d |jj qS )r
   N)npprodshaper   itemsize).0x r   [/home/ubuntu/.local/lib/python3.10/site-packages/sglang/test/speculative/test_spec_utils.py
<listcomp>&   s    z'TestSpecUtils.setUp.<locals>.<listcomp>r   r   )torchr   is_availabler   zerosuint64	data_ptrsfloat32k_cachev_cachetensordata_ptrint64data_strides)selfr   r   r   setUp   s2   
zTestSpecUtils.setUpc                 C   s0  | j }d}d}d}d}d}d}tj|tj|d}tj|dftj|d}	tjg d	|d
|	dd |f< tj|gtj|d}
tj|gtj|d}tjdgtj|d}tjdd| |d
}tjdgtj|d}tj|dd}|  |d  }tj|tj|d}tj|tj|d}t	|f ||	|
||||||||	j
d |||t|t||  |d || |  }tjg d|d  |tjd}t||sJ tt| jf | j| j||t|tt|t t| jd ddddf tjg dtj|dsJ t| jd ddddf tjg dtj|dsJ d S )Nr
               =   r   r   r.   r/      r1   r0   	   
   r   r   r	   r      dimr0   r5   r6   r         r   r   r   r   r   r   r   r    arangeint32r"   r(   cumsumsumitemr   r   r   allcloser   lenr$   r+   BYTES_PER_TILEr&   r%   r'   )r,   r   num_seqs	page_sizespeculative_num_stepstopkseq_lens_numextend_lens_numreq_pool_indicesreq_to_tokenseq_lensextend_lensnum_new_pages_per_topkout_cache_loclast_page_lenslast_page_lens_cumsumduplicate_cache_lentarget_cache_locsource_cache_locexpected_source_cache_locr   r   r   'test_assign_draft_cache_locs_single_seq.   s   

	z5TestSpecUtils.test_assign_draft_cache_locs_single_seqc                 C   s  | j }d}d}d}d}tj|tj|d}tj|dftj|d}tjg dtj|d}tjg dtj|d}	tjg d	tj|d}
tj|dftj|d}tjg d
|d|dd df< tjg d|d|dd df< tjg d|d|dd df< tjg dtj|d}tj|dd}|  |d  }tjddt|	 tj|d}tj|tj|d}tj|tj|d}t	|f ||||	|
||||||j
d |||t|t||  |d || |  }tjg d|tjd}tjg dd dgd  |tjd}tjg d|tjd}t||sJ t||sJ t||s!J tt| jf | j| j||t|tt|t t| jd ddddf tjg dtj|dsUJ t| jd ddddf tjg dtj|dsqJ d S )Nr8   r.   r/   r0   r   r   )r0   r1   r/   )@   r\   r\   )r	   r	   r	   )r.   r/   r4   r1   r0   r5   r6   r   r7   r   r3   r
   r1   )r.   r/   r4   r1   r0   r	   )r   r8   r
   r9      )xr]            r<                                  $   %   &   '   (   ,   -   .   /   0   4   5   6   7   8   <   r2   >   ?   r\   D   E   F   G   H   L   M   N   O   P   T   U   V   W   X   \   ]   ^   _   `   r   e   f   g   h   l   m   n   o   p   t   u   v   w   x   |   }   ~      r                                                                                                                                          r   r;   )Q   R   S   Y   Z   [   a   b   c   i   j   k   q   r   s   y   z   {                                 r   r   r>   r?   r@   )r,   r   rI   rJ   rK   rL   rO   rP   rQ   rR   rS   rU   rV   rW   rT   rX   rY   expected_out_cache_locrZ   expected_target_cache_locr   r   r   &test_assign_draft_cache_locs_multi_seq~   s   

$

	
z4TestSpecUtils.test_assign_draft_cache_locs_multi_seqc                 C   sV  | j }d}d}d}d}d}|| }tj|tj|d}tj|dftj|d}	tjg d|d|	d	d |f< tj|gtj|d}
tj|gtj|d}tjd
gtj|d}tjdd| |d}tjdgtj|d}d	}d }d }d }t|f ||	|
||||||||	jd |||t|t||  |d || |  }tjdd| |d}t	||sJ d S )Nr
   r/   r0   r1   r   r   r3   r7   r   r	   r   r8   )
r   r    rA   rB   r"   r(   r   r   r   rF   )r,   r   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rW   rX   rY   rV   r   r   r   r   (test_assign_draft_cache_locs_page_size_1   sT   
z6TestSpecUtils.test_assign_draft_cache_locs_page_size_1c                 C   s  | j }d}d}d}d}d}d}tj|tj|d}tj||ftj|d}	tj|tj|d|	dd |f< tj|gtj|d}
|| }tj|gtj|d}tj|dd	}|| | d | }tj|gtj|d}|| | }tj|gtj|d}tjd
d
| tj|d}|  |d  }tj|tj|d}tj|tj|d}t	|f ||	|
||||||||	j
d |||t|t||  |d || |  }g }t|D ]}||| |  }||	d||| f   qt|}t||sJ d S )Nr
   r<   r.   r8   r]      r   r   r9   i  )r   r    rA   rB   r"   r(   rC   rD   rE   r   r   r   rangeappendclonecatrF   )r,   r   rI   rJ   rK   rL   rM   pool_lenrO   rP   rQ   last_page_lenrU   rV   num_new_pages_per_topk_valrS   rN   rR   rT   rW   rX   rY   trimmedexpectedtopk_idstartr   r   r   r   4test_assign_draft_cache_locs_page_size_gt_spec_steps  s~   


zBTestSpecUtils.test_assign_draft_cache_locs_page_size_gt_spec_stepsN)__name__
__module____qualname__r-   r[   r   r   r   r   r   r   r   r      s    Pn-r   __main__)unittestnumpyr   r     sglang.srt.mem_cache.memory_poolr   !sglang.srt.speculative.spec_utilsr   sglang.srt.utilsr   rH   TestCaser   r   mainr   r   r   r   <module>   s      P